Abramo Bagnara
598b943410
Fixed LabelDecl source range.
...
llvm-svn: 165976
2012-10-15 21:07:44 +00:00
Richard Smith
a05b3b5435
If the range in a for range statement doesn't have a viable begin/end function,
...
but can be dereferenced to form an expression which does have viable begin/end
functions, then typo-correct the range, even if something else goes wrong with
the statement (such as inaccessible begin/end or the wrong type of loop
variable).
In order to ensure we recover correctly and produce any followup diagnostics in
this case, redo semantic analysis on the for-range statement outside of the
diagnostic trap, after issuing the typo-correction.
llvm-svn: 164323
2012-09-20 21:52:32 +00:00
Sam Panzer
22a3fe1b9c
Clarified diagnostics for range-based for loops with invalid ranges
...
llvm-svn: 163350
2012-09-06 21:50:08 +00:00
Joao Matos
566359c0bf
Revert r163083 per chandlerc's request.
...
llvm-svn: 163149
2012-09-04 17:49:35 +00:00
Joao Matos
c32a7e4d8e
Implemented parsing and AST support for the MS __leave exception statement. Also a minor fix to __except printing in StmtPrinter.cpp. Thanks to Aaron Ballman for review.
...
llvm-svn: 163083
2012-09-02 03:45:41 +00:00
Chris Lattner
6dc7e57d6a
don't warn about unused values when the unused value is a statement expression expanded from a macro. This is of dubious utility in general, but is specifically a major issue for the linux kernel. This resolves PR13747.
...
llvm-svn: 163034
2012-08-31 22:39:21 +00:00
Benjamin Kramer
cc4c49dd63
Now that ASTMultiPtr is nothing more than a array reference, make it a MutableArrayRef.
...
This required changing all get() calls to data() and using the simpler constructors.
llvm-svn: 162501
2012-08-23 23:38:35 +00:00
Benjamin Kramer
62b95d88dc
Rip out remnants of move semantic emulation and smart pointers in Sema.
...
These were nops for quite a while and only lead to confusion. ASTMultiPtr
now behaves like a proper dumb array reference.
llvm-svn: 162475
2012-08-23 21:35:17 +00:00
Sam Panzer
0f38443616
Better diagnostics for range-based for loops with bad range types.
...
The old error message stating that 'begin' was an undeclared identifier
is replaced with a new message explaining that the error is in the range
expression, along with which of the begin() and end() functions was
problematic if relevant.
Additionally, if the range was a pointer type or defines operator*,
attempt to dereference the range, and offer a FixIt if the modified range
works.
llvm-svn: 162248
2012-08-21 00:52:01 +00:00
Chad Rosier
0731affaca
[ms-inline asm] Extract AsmStmt handling into a separate file, so as to not
...
pollute SemaStmt with extraneous asm handling logic.
llvm-svn: 162132
2012-08-17 21:19:40 +00:00
Chad Rosier
2da9d6d6cf
[ms-inline asm] Instantiate the MCStreamer as a NullStream. We're parsing
...
instruction, not emitting them, so a NullStream is fine.
llvm-svn: 162105
2012-08-17 16:38:04 +00:00
Chad Rosier
b899c1b417
[ms-inline asm] Comment.
...
llvm-svn: 162055
2012-08-16 22:47:10 +00:00
Chad Rosier
bf17e01fe5
[ms-inline asm] Extract a helper function, getSpelling(). Also use this on
...
tokens we don't know how to handle; this should aid when debugging.
llvm-svn: 162053
2012-08-16 22:40:32 +00:00
Chad Rosier
50cf25c72d
[ms-inline asm] If we don't know how to handle a token then assume this is not a
...
simple asm.
llvm-svn: 162051
2012-08-16 22:30:02 +00:00
Chad Rosier
3d4b98b4bc
[ms-inline asm] Add a helper function, isMSAsmKeyword().
...
These require special handling, which we don't currently handle. This is being
put in place to ensure we don't do invalid symbol table lookups or try to parse
invalid assembly. The test cases just makes sure the latter isn't happening.
llvm-svn: 162050
2012-08-16 22:25:38 +00:00
Sam Panzer
2c4ca0fa7d
Removed unused LParenLoc parameter to ActOnCXXForRangeStmt
...
llvm-svn: 162048
2012-08-16 21:47:25 +00:00
Chad Rosier
efb2911664
[ms-inline asm] Perform symbol table lookup on variables. The idea is to use
...
this information to determine valid MC operands. This will also be used for
semantic analysis.
llvm-svn: 162043
2012-08-16 19:52:25 +00:00
Chad Rosier
592b90a476
[ms-inline asm] Start tracking which tokens are registers and which are
...
variables, function or label references. The former is a potential clobber.
The latter is either an input or an output. Unfortunately, it's difficult to
test this patch at the moment, but the added test case will eventually do so.
llvm-svn: 162026
2012-08-16 17:10:59 +00:00
Chad Rosier
7dbef3e035
[ms-inline asm] Add inputs and outputs to AST. No functional change.
...
llvm-svn: 162000
2012-08-16 00:06:53 +00:00
Chad Rosier
b32f3d5230
[ms-inline asm] Use a set container to remove redundant clobbers.
...
llvm-svn: 161991
2012-08-15 21:55:19 +00:00
Chad Rosier
712faa2708
[ms-inline asm] Address a FIXME by computing the number of asm statements when
...
building the AsmString.
llvm-svn: 161988
2012-08-15 21:08:52 +00:00
Chad Rosier
aa7c1cb5f8
[ms-inline asm] MSVC parses multiple __asm statements on a single line as one
...
statement. For example,
if (x)
__asm out dx, ax __asm out dx, ax
results in a single inline asm statement (i.e., both "out dx, ax" statements are
predicated on if(x)).
llvm-svn: 161986
2012-08-15 21:03:27 +00:00
Chad Rosier
ecf77b56dd
[ms-inline asm] Don't emit newlines as these are ignored by the AsmParser
...
anyways. Also, simplify some conditional logic.
llvm-svn: 161977
2012-08-15 19:12:42 +00:00
Chad Rosier
ad34aef449
[ms-inline asm] Capturing loop-scoped (std::string)Reg with a StringRef is bad.
...
llvm-svn: 161966
2012-08-15 18:09:18 +00:00
Chad Rosier
b6f46c1af9
[ms-inline asm] Add the left brace source location and improve the pretty
...
printer. Patch by Enea Zaffanella <zaffanella@cs.unipr.it>.
llvm-svn: 161958
2012-08-15 16:53:30 +00:00
NAKAMURA Takumi
19f29cfc14
clang/lib/Sema/SemaStmt.cpp: Include MCAsmLexer.h to appease msvc to define llvm::AsmToken.
...
llvm-svn: 161927
2012-08-15 04:19:08 +00:00
Chad Rosier
222ed4b53a
[ms-inline asm] Have MC start parsing the asms.
...
llvm-svn: 161913
2012-08-15 00:42:47 +00:00
Chad Rosier
767a7b9ed0
[ms-inline asm] Remove the last bits of LineEnds.
...
llvm-svn: 161904
2012-08-14 23:14:45 +00:00
Chad Rosier
a6e89aac91
[ms-inline asm] Simplify more logic by using the Token::hasLeadingSpace() and
...
Token::isAtStartOfLine() APIs.
llvm-svn: 161898
2012-08-14 22:11:17 +00:00
Chad Rosier
bba12afe48
[ms-inline asm] Address a potential buffer overflow.
...
llvm-svn: 161896
2012-08-14 21:48:01 +00:00
Chad Rosier
25e8fe6ae0
[ms-inline asm] Simplify the logic in patchMSAsmString. We no longer need to
...
track the LineEnds now that single line asm statments aren't merged.
llvm-svn: 161893
2012-08-14 20:58:21 +00:00
Chad Rosier
7459543795
[ms-inline asm] Add a helpful assert.
...
llvm-svn: 161796
2012-08-13 22:04:09 +00:00
Chad Rosier
162b14f326
[ms-inline asm] Address a potential buffer overflow.
...
llvm-svn: 161793
2012-08-13 21:35:47 +00:00
Chad Rosier
65a8e0b69f
[ms-inline asm] Have patchMSAsmStrings() return a vector or AsmStrings.
...
The AsmParser expects a single asm instruction, but valid ms-style inline asm
statements may contain multiple instructions.
This happens with asm blocks
__asm {
mov ebx, eax
mov ecx, ebx
}
or when multiple asm statements are adjacent to one another
__asm mov ebx, eax
__asm mov ecx, ebx
and
__asm mov ebx, eax __asm mov ecx, ebx
Currently, asm blocks are not properly handled.
llvm-svn: 161780
2012-08-13 20:32:07 +00:00
Chad Rosier
f32302a7d9
[ms-inline asm] PatchMSAsmString() doesn't correctly patch non-simple asm
...
statements. Therefore, we can't pass the PatchedAsmString to the AsmParser
and expect things to work.
llvm-svn: 161701
2012-08-10 21:27:11 +00:00
Chad Rosier
d6ef704fe4
[ms-inline asm] Fix a memory leak introduced in r161686.
...
llvm-svn: 161698
2012-08-10 21:06:19 +00:00
Chad Rosier
a7020aee00
[ms-inline asm] Add clobbers to AST representation.
...
llvm-svn: 161686
2012-08-10 19:13:14 +00:00
Chad Rosier
3674ebaa6b
[ms-inline asm] Use asserts as these calls are now guarded by identical checks.
...
llvm-svn: 161676
2012-08-10 18:20:12 +00:00
Chad Rosier
02a8439730
Whitespace.
...
llvm-svn: 161673
2012-08-10 17:56:09 +00:00
Chad Rosier
d82f647dee
[ms-inline asm] Fix comment.
...
llvm-svn: 161622
2012-08-09 21:28:05 +00:00
Chad Rosier
8640a2a0db
[ms-inline asm] Use StringRef here, per Jordan's suggestion.
...
llvm-svn: 161619
2012-08-09 21:06:32 +00:00
Chad Rosier
543cb3e93a
[ms-inline asm] Simplify logic for empty asm statements.
...
llvm-svn: 161615
2012-08-09 20:52:43 +00:00
Chad Rosier
11ede938e9
[ms-inline asm] Instantiate the various parts to the AsmParser.
...
llvm-svn: 161614
2012-08-09 20:47:38 +00:00
Chad Rosier
d5c43a5f4b
[ms-inline asm] Initialize targets and assembly printers/parsers.
...
llvm-svn: 161595
2012-08-09 17:33:11 +00:00
Chad Rosier
5d4d8b746b
[ms-inline asm] Use more idiomatic logic. Thanks, Bill.
...
llvm-svn: 161526
2012-08-08 21:42:11 +00:00
Chad Rosier
b1886eb604
[ms-inline asm] Make sure IsSimple is correctly handled.
...
llvm-svn: 161522
2012-08-08 21:08:20 +00:00
Chad Rosier
66753b3835
Remove extraneous comment.
...
llvm-svn: 161521
2012-08-08 20:38:22 +00:00
Chad Rosier
83916498b8
[ms-inline asm] Add a very simple test case. Basically, we're only testing for
...
crashers at the moment (and coincidentally this case was causing a crash).
llvm-svn: 161520
2012-08-08 20:37:31 +00:00
Chad Rosier
3ed0bd9938
[ms-inline asm] Refactor the logic to generate the AsmString into Sema. No
...
functional change intended.
llvm-svn: 161518
2012-08-08 19:48:07 +00:00
Chad Rosier
d12b7a64dc
[ms-inline asm] Add support for detecting simple ms-style inline asm. Simple
...
asm statements are those that don't reference variable names, function names,
and labels.
Add logic to generate a patched AsmString that will eventually be consumed by
the AsmParser. No functional change at this point, so unfortunately no test
case.
llvm-svn: 161508
2012-08-08 18:22:06 +00:00