Chris Lattner
7adf076088
Finally fix PR2189. This makes a fairly invasive but important change to
...
move getAsArrayType into ASTContext instead of being a method on type.
This is required because getAsArrayType(const AT), where AT is a typedef
for "int[10]" needs to return ArrayType(const int, 10).
Fixing this greatly simplifies getArrayDecayedType, which is a good sign.
llvm-svn: 54317
2008-08-04 07:31:14 +00:00
Daniel Dunbar
032db47f0f
Support __attribute__(({con,de}structor)) in Parse & Sema
...
- Including possible priority argument
- In other news, the attribute parsing code really needs a cleanup
llvm-svn: 54257
2008-07-31 22:40:48 +00:00
Chris Lattner
944d306371
fix some problems handling stmtexprs with labels (PR2374), and
...
improve 'expression unused' diagnostics for stmtexprs.
llvm-svn: 54098
2008-07-26 19:51:01 +00:00
Chris Lattner
bcf2e66b3c
testcase for PR2416, which we already handle correctly.
...
llvm-svn: 54096
2008-07-26 19:15:11 +00:00
Chris Lattner
89026888ef
move all objc sema tests into a new SemaObjC directory. Next step is to
...
remove the objc- prefix from the tests that use it.
llvm-svn: 54084
2008-07-26 00:57:24 +00:00
Chris Lattner
a075e63bbc
fix several problems with the protocol qualified id handling where id was implicit.
...
First, fix canonical type handling of these, since protocol qualified id's are always
canonical. Next, enhance SemaType to actually make these when used (instead of int)
allowing them to actually be used when appropriate. Finally remove a bunch of logic
relating to the mishandling of canonical types with protocol-qual id's. This fixes
rdar://5986251
llvm-svn: 54083
2008-07-26 00:46:50 +00:00
Chris Lattner
0974b2380f
improve handling of the horrible GCC objc extension that treats "<foo>"
...
like "id<foo>". This 1) fixes an infinite loop in the parser on things
like "short<foo>" 2) emits a warning about this bogus construct and 3)
changes the testcase to be substantially reduced.
llvm-svn: 54082
2008-07-26 00:20:22 +00:00
Chris Lattner
0d70761cad
GCC supports the complex conjugate operator (an extension) on complex int
...
as well as complex float. rdar://6097730
llvm-svn: 54080
2008-07-25 23:52:49 +00:00
Chris Lattner
8c217a81ac
fix diagnostics.
...
llvm-svn: 54079
2008-07-25 23:41:08 +00:00
Chris Lattner
903eb518e6
Fix rdar://6095136, various crashes with incomplete enum types.
...
llvm-svn: 54074
2008-07-25 23:18:17 +00:00
Chris Lattner
61f60a05b2
c89 does not perform array -> pointer promotion unless the array is an lvalue. This
...
is different than C99. This fixes the rest of rdar://6095180.
llvm-svn: 54064
2008-07-25 21:33:13 +00:00
Chris Lattner
f6e1e309c7
In c99 mode, comma does do function/array promotion even though
...
it does not do unary promotions (like short->int).
llvm-svn: 54058
2008-07-25 20:54:07 +00:00
Chris Lattner
e174acc910
Comma does not perform unary promotions, rdar://6095180
...
llvm-svn: 54045
2008-07-25 20:02:29 +00:00
Chris Lattner
e08e47ab2f
gcc requires a semicolon at the end of an interface, unlike its extension for structs.
...
rdar://6095245.
llvm-svn: 54044
2008-07-25 19:54:55 +00:00
Steve Naroff
e2177fbfdc
Cleaunup Sema::ActOnClassMessage(). This commit:
...
(a) removes a bogus warning.
(b) removes an undesirable usage of the ObjCMessageExpr constructor that takes an IdentifierInfo * (which I will abolish).
llvm-svn: 54042
2008-07-25 19:39:00 +00:00
Chris Lattner
f9c49e5d27
Reject typedef redefinitions when the underlying types are not identical,
...
even if in a system header etc. rdar://6079937
llvm-svn: 54038
2008-07-25 18:44:27 +00:00
Chris Lattner
ec8996d771
Add support for __extension__ as an lvalue. rdar://6097308
...
llvm-svn: 54033
2008-07-25 18:07:19 +00:00
Chris Lattner
070968957e
Fix rdar://6094010 various asserts happening with wide strings in inline asm.
...
llvm-svn: 53947
2008-07-23 06:46:56 +00:00
Daniel Dunbar
b725726c29
Implement nans, prefetch, and trap builtins.
...
This closes <rdar://problem/6080720>, support for __builtin_constant_p
has been filed separately.
llvm-svn: 53885
2008-07-21 22:59:13 +00:00
Ted Kremenek
5224e6a81d
Add test case for nonnull attribute.
...
Fix indexing bug.
llvm-svn: 53882
2008-07-21 22:09:15 +00:00
Chris Lattner
ca1e848588
Switch initialization of the protocol list for an interface decl to use
...
the standard "set these as the list of protocols" interface instead of a
strange "set this as the size and then set each one to the value" interface.
The problem with the later is that it a) is completely different from
everything else, b) is awkward, and c) doesn't handle the case when a
referenced protocol is invalid: it set it to null.
This meant that all clients downstream would have to handle null protocols
in the protocol list, and empirically they didn't. Fix this by not setting
invalid protocols in the referenced protocol list, fixing the crash on
test/Sema/objc-interface-1.m
While I'm at it, clean up some locations so that we produce:
t.m:1:25: error: cannot find interface declaration for 'NSObject', superclass of 'NSWhatever'
@interface NSWhatever : NSObject <NSCopying>
~~~~~~~~~~~~~~~~~~~~~ ^
instead of:
t.m:1:1: error: cannot find interface declaration for 'NSObject', superclass of 'NSWhatever'
@interface NSWhatever : NSObject <NSCopying>
^
llvm-svn: 53846
2008-07-21 07:06:49 +00:00
Chris Lattner
87899be4cc
when in the context of an @implementation, look for private methods in the
...
@implementation to resolve nullary selector references.
llvm-svn: 53845
2008-07-21 06:44:27 +00:00
Argyrios Kyrtzidis
bd25998a45
When in C++, make EnumConstant names hide tag names in the same scope, instead of colliding with them.
...
llvm-svn: 53702
2008-07-16 21:01:53 +00:00
Argyrios Kyrtzidis
7da34d050b
When checking for name collision between a tag and a previously defined namespace, the collision occured even when the tag was in a different nested scope.
...
Fix it by taking into account the scope when checking for namespace-tag name collisions.
llvm-svn: 53667
2008-07-16 07:45:46 +00:00
Nate Begeman
191a6b1f1b
http://llvm.org/bugs/show_bug.cgi?id=2523
...
Add some code to handle vector comparisons, which is the language side
of the llvm vicmp/vfcmp instructions. Also make the vector-vector and
vector-scalar asign checks a bit more sane under the presence of lax vector
conversions.
llvm-svn: 53565
2008-07-14 18:02:46 +00:00
Nuno Lopes
7bfa180056
fix CheckForConstantInitializer() for Compound Literals
...
also fix the correspondent test (it was expecting more errors than it should. please confirm my fix is correct (at least gcc agrees with me)
llvm-svn: 53174
2008-07-07 16:46:50 +00:00
Argyrios Kyrtzidis
5708a4661e
'&&' commands together so that the test status reflects the results of all the commands, otherwise the test status will be the result of only the last command.
...
llvm-svn: 53135
2008-07-04 10:33:02 +00:00
Chris Lattner
3f26dc0bf6
new testcase
...
llvm-svn: 53071
2008-07-03 03:53:40 +00:00
Chris Lattner
9ff58d7caf
Fix PR2020 by recovering by defining an anonymous enum, instead of recovering
...
by filling in the body of a union with enum constants.
llvm-svn: 53069
2008-07-03 03:30:58 +00:00
Argyrios Kyrtzidis
ed9834272f
Add Sema support for C++ classes.
...
llvm-svn: 52956
2008-07-01 10:37:29 +00:00
Chris Lattner
58418ffa32
Make ProcessDeclAttributes walk the declarator structure pulling
...
decl attributes out of the various places they can hide. This makes
us correctly reject things like this:
t.c:2:22: error: mode attribute only supported for integer and floating-point types
int **__attribute((mode(HI)))* i32;
^
because you can't make a pointer be HImode.
llvm-svn: 52876
2008-06-29 00:16:31 +00:00
Eli Friedman
4f89ccb1df
Fix for PR2501; this patch makes usual arithmetic conversions for
...
integers which have the same width and different signedness work
correctly. (The testcase in PR2501 uses a comparison between long and
unsigned int).
llvm-svn: 52853
2008-06-28 06:23:08 +00:00
Chris Lattner
2239b7d3d2
rename some attr tests for consistency.
...
llvm-svn: 52770
2008-06-26 06:32:02 +00:00
Chris Lattner
091f698d29
"this patch adds code generation hooks for Objective-C constant strings. It also modifies Sema so that Objective-C constant strings are treated as untyped objects if the interface for the constant string class can not be found. This is consistent with Apple GCC. I thought it was consistent with GNU GCC, since this was causing failures when trying to compile GNUstep with (GNU) GCC, but it appears that this is not the case when attempting to produce a simple test case to demonstrate it. Possibly there is a way of making the error go away, but I haven't found out what it is yet."
...
Patch by David Chisnall!
llvm-svn: 52599
2008-06-21 21:44:18 +00:00
Chris Lattner
5a92bab4f0
"This moves built-in Objective-C types up the scope chains to where they can be replaced by versions included from the runtime library's headers."
...
This makes it ok to use @"foo" without a declaration for NSConstantString.
Patch by David Chisnall!
llvm-svn: 52593
2008-06-21 20:20:39 +00:00
Chris Lattner
535b830449
add parser and sema support for the funny ObjC '@defs' thing.
...
Patch by David Chisnall!
llvm-svn: 52586
2008-06-21 19:39:06 +00:00
Ted Kremenek
87c760af36
Add test case for NSString format-string checking.
...
llvm-svn: 52337
2008-06-16 18:01:05 +00:00
Eli Friedman
61b529f466
Don't crash if we can't find FileEntry info for a typedef, since one
...
isn't guaranteed to exist. This fixes a crash with conflicting typedefs
coming from stdin.
This also fixes the crash in PR2406, but doesn't completely fix the
issue; it appears there's something strange about the physical location
for the definition of int64_t in stdlib.h.
llvm-svn: 52209
2008-06-11 06:20:39 +00:00
Eli Friedman
7567573926
For struct initialization, check compatibility with the unqualified
...
type; this isn't explicitly stated in the standard, but it doesn't
really make sense for them to have an effect here. Fixes the included
testcase, sent to me by Steve Naroff.
llvm-svn: 52113
2008-06-09 03:52:40 +00:00
Steve Naroff
946166f4e9
Second half of "fix" for <rdar://problem/5986085> clang on xcode: error: redefinition of 'XCElementToggler' as different kind of symbol
...
llvm-svn: 52024
2008-06-05 22:57:10 +00:00
Steve Naroff
25449a5221
Fix <rdar://problem/5986833> clang on xcode: incompatible type returning 'void', expected 'int'.
...
- Changed Sema::ObjCActOnStartOfMethodDef() to more accurately type "self" in factory methods.
- Changed Sema::ActOnInstanceMessage() to use the new type to restrict the lookup.
llvm-svn: 52005
2008-06-05 14:49:39 +00:00
Steve Naroff
f9c65246dd
Fix <rdar://problem/5987482> clang on xcode: null dereference in Sema::ActOnMemberReferenceExpr.
...
In addition to fixing the crasher, this commit fixes further improves property lookup (by searching protocols of qualified interfaces..."NSObject <prot>").
llvm-svn: 52001
2008-06-05 13:55:23 +00:00
Steve Naroff
d1c3d1130b
Fix trivial crasher and downgrade an error to warning (to match GCC).
...
llvm-svn: 51976
2008-06-05 04:33:44 +00:00
Steve Naroff
cfdf6166fc
Support "<p>" as a short-hand for "id<p>". Here's a comment from GCC (the only documentation I could find on it).
...
/* Make "<SomeProtocol>" equivalent to "id <SomeProtocol>" - nisse@lysator.liu.se . */
This commit adds the parser magic. The type associated with <p> is still incorrect. Will discuss with Chris.
llvm-svn: 51972
2008-06-05 00:02:44 +00:00
Steve Naroff
d5bf26fa26
Fix crash identified by <rdar://problem/5986085>.
...
llvm-svn: 51969
2008-06-04 23:08:38 +00:00
Devang Patel
dbb7263fd9
Add ObjCInterface layout support.
...
Reuse RecordLayout.
llvm-svn: 51968
2008-06-04 21:54:36 +00:00
Steve Naroff
524fbe8687
Update a test and add a FIXME.
...
llvm-svn: 51967
2008-06-04 21:38:52 +00:00
Ted Kremenek
46267c839d
Added fixmes.
...
llvm-svn: 51964
2008-06-04 20:48:08 +00:00
Steve Naroff
d9c2607014
Parser::ParseObjCSynchronizedStmt() needs to Enter/Exit a decl scope.
...
llvm-svn: 51963
2008-06-04 20:36:13 +00:00
Nuno Lopes
28bcfec325
fix type of ?: operator. If one of the operator is void, the type should be void as well.
...
Please confirm this is safe
llvm-svn: 51957
2008-06-04 19:14:12 +00:00
Fariborz Jahanian
6e59392e4b
Fix a gcc compatibility issue which allows more protocol-qualified id on RHS to be
...
assigned to less protocol qualified object on LHS.
llvm-svn: 51956
2008-06-04 19:00:03 +00:00
Steve Naroff
c68e382ba9
ASTContext::typesAreCompatible(): id is compatible with all qualified id types.
...
llvm-svn: 51939
2008-06-04 15:07:33 +00:00
Steve Naroff
f4308aac53
Sema::ActOnClassMessage() needs to look through it's local implementation for private class methods.
...
llvm-svn: 51938
2008-06-04 14:43:54 +00:00
Steve Naroff
5ccccf0326
Make sure we look through categories when searching for a classes property.
...
Fixes <rdar://problem/5984338> clang on xcode: property implementation must have its declaration in interface 'PBXOpenQuicklyModule'
llvm-svn: 51925
2008-06-04 04:46:04 +00:00
Steve Naroff
b115be707d
Put back my temporary hack until Eli addresses this in a more complete fashion.
...
llvm-svn: 51920
2008-06-03 22:06:04 +00:00
Steve Naroff
aaf5108d26
Change Expr::isIntegerConstantExpr() to allow for pointer types (for GCC compatibility). Note FIXME.
...
Fix <rdar://problem/5977870> clang on xcode: error: arrays with static storage duration must have constant integer length
llvm-svn: 51907
2008-06-03 17:15:29 +00:00
Steve Naroff
b788d9bd27
Allow implicit pointer/int conversions on ObjCQualifiedIdTypes in Sema::CheckCompareOperands() and Sema::CheckAssignmentConstraints().
...
Fixes <rdar://problem/5980804> clang on xcode: error: incompatible type sending 'id<XDUMLType>', expected 'NSCellType'.
llvm-svn: 51902
2008-06-03 14:04:54 +00:00
Steve Naroff
0b225dac9b
Finish up r51900.
...
llvm-svn: 51901
2008-06-03 13:21:30 +00:00
Steve Naroff
b877e2c3ca
Fix parser bug/FIXME with @catch .
...
<rdar://problem/5980846> clang on xcode: error: declarator requires an identifier (for @catch )
llvm-svn: 51895
2008-06-03 05:36:54 +00:00
Steve Naroff
ebf4cb4841
Fix <rdar://problem/5979875> clang on xcode: error: use of undeclared identifier 'super'
...
llvm-svn: 51888
2008-06-02 23:03:37 +00:00
Steve Naroff
e643e12313
Tweak Sema::ObjCQualifiedIdTypesAreCompatible() to handle qualified interface types on the RHS.
...
This eliminates a bogus warning identified in the test below.
This fixes <rdar://problem/5968256> clang on xcode: error: incompatible type initializing 'NSObject<XCSelectionSource> *', expected 'id<NSObject,XCSelectionSource>'
llvm-svn: 51832
2008-06-01 02:43:50 +00:00
Steve Naroff
09efde0ae7
Add some more test cases that demonstrate clang is a bit stricter than GCC. These can be fixed lazily if they become a problem.
...
llvm-svn: 51830
2008-05-31 23:10:15 +00:00
Steve Naroff
524011f389
Teach Sema::CheckConditionalOperands() to check for ObjCQualifiedIdType's. This fixes a bogus error.
...
<rdar://problem/5967036> clang on xcode: error: incompatible operand types ('id<DTOutputStreams>' and 'DTFilterOutputStream *')
llvm-svn: 51828
2008-05-31 22:33:45 +00:00
Steve Naroff
a326bae77a
Fix <rdar://problem/5965704> clang: bad receiver type 'id const'
...
llvm-svn: 51809
2008-05-31 02:19:15 +00:00
Steve Naroff
66002283e6
Teach Expr::isLvalue() about ObjC properties. For now, all properties are writable. Added a FIXME for another day.
...
llvm-svn: 51800
2008-05-30 23:23:16 +00:00
Eli Friedman
66572afde4
Allow a pointer implicitly cast to a bool as a constant expression, as
...
required by the standard (the standard doesn't know anything about
implicit casts).
Disallow pointers cast to non-integral arithmetic types as constant
expressions. This was previously allowed by accident.
llvm-svn: 51779
2008-05-30 18:14:48 +00:00
Eli Friedman
3360d898ec
Make sure to allow assigning a pointer to a bool.
...
llvm-svn: 51778
2008-05-30 18:07:22 +00:00
Eli Friedman
3df5efe83e
Cleanup/refactoring of Sema struct layout. This patch unifies the struct
...
and union codepaths and fixes some minor bugs.
I'm reasonably confident this is accurate, at least for X86. I'll
correct any bugs as I find them; I haven't found any for a while,
though.
llvm-svn: 51762
2008-05-30 09:31:38 +00:00
Eli Friedman
a904087b0d
Get the type right for wide string literals; it's wchar_t, not char.
...
llvm-svn: 51586
2008-05-27 07:57:14 +00:00
Eli Friedman
3e113409cb
Implementation of gcc mode attribute; this is significant because
...
it fixes PR2204. Not too much to say about the implementation; it works
in a similar way to the vector size attribute.
At some point, we need to modify the targets to provide information
about the appropriate types.
llvm-svn: 51577
2008-05-27 03:33:27 +00:00
Eli Friedman
1c2d5f56f8
Change diagnostic per suggestion, to make it a bit clearer what is
...
happening.
llvm-svn: 51574
2008-05-27 02:01:50 +00:00
Eli Friedman
0e56c82e4a
Count the number of initializable members correctly in structs/unions
...
with unnamed members.
llvm-svn: 51557
2008-05-25 14:03:31 +00:00
Eli Friedman
e0f832bd4f
Diagnose implicit init list for empty aggregate, like struct {}. Fixes
...
PR2151 (by not creating the empty implicit init list).
llvm-svn: 51556
2008-05-25 13:49:22 +00:00
Eli Friedman
85f5497c4a
Move the error checking for variable-sized objects so we don't
...
double-report errors; fixes PR2362.
llvm-svn: 51555
2008-05-25 13:22:35 +00:00
Eli Friedman
d042a969c9
Fix this test on non-X86 platforms.
...
llvm-svn: 51552
2008-05-25 04:43:38 +00:00
Eli Friedman
bb5de96bc8
Patch for PR2350; the issue was tnat we were allowing (with an error)
...
void f(const void) in one place and rejecting it in another.
llvm-svn: 51424
2008-05-22 08:54:03 +00:00
Eli Friedman
0ceef458b6
Fix this test so that it's valid; the point is to test for the crash,
...
not the missing diagnostic.
llvm-svn: 51365
2008-05-21 05:37:55 +00:00
Eli Friedman
0883bfb541
PR2347: Fix crash iterating over VLAs; this started triggering because
...
we now iterate over the whole AST when we destroy it.
llvm-svn: 51363
2008-05-21 05:06:46 +00:00
Eli Friedman
86346ede95
Fix a couple of bugs found by Neil Booth in the const-ness checking.
...
llvm-svn: 51361
2008-05-21 03:39:11 +00:00
Eli Friedman
503731aa22
Fix typo in test.
...
llvm-svn: 51308
2008-05-20 08:27:04 +00:00
Eli Friedman
f8353034eb
Add __builtin_frame_address and __builtin_return_address gcc builtins to
...
Sema. No codegen yet.
llvm-svn: 51307
2008-05-20 08:23:37 +00:00
Eli Friedman
d0e48ea682
Be a bit more defensive in SemaInit.
...
llvm-svn: 51301
2008-05-20 05:25:56 +00:00
Eli Friedman
37a186d765
Add some more checking for compound literals.
...
llvm-svn: 51300
2008-05-20 05:22:08 +00:00
Eli Friedman
ca8da1d89d
Make the unused expression warning a bit less aggressive (found in PHP
...
code).
llvm-svn: 51276
2008-05-19 21:24:43 +00:00
Eli Friedman
a68c3006f4
Switch on SemaInit; this makes some code in SemaDecl dead, but I'll give
...
it a few days to make sure there aren't any significant regressions.
llvm-svn: 51273
2008-05-19 20:29:35 +00:00
Eli Friedman
8e12298192
Add proper type-checking for pointer additiion; before, we were accepting
...
addition with a pointer and an integer even when it didn't make sense.
llvm-svn: 51228
2008-05-18 18:08:51 +00:00
Eli Friedman
58639e584c
Both operands to && have to be scalars, not just one.
...
llvm-svn: 51065
2008-05-13 20:16:47 +00:00
Steve Naroff
a98fe19c7e
Fix <rdar://problem/5924576> clang -fsyntax-only generates "redefinition" errors when parsing AppKit that gcc does not.
...
Teach Sema::MergeVarDecl() about __private_extern__.
llvm-svn: 51005
2008-05-12 22:36:43 +00:00
Steve Naroff
bf1516c618
Fix <rdar://problem/5928590> clang -fsyntax-only: "incompatible operand types ('int' and 'void')" on input that 'gcc -fsyntax-only' eats
...
llvm-svn: 51002
2008-05-12 21:44:38 +00:00
Chris Lattner
c9c296d235
testcase for PR2263, fixed by Nate's r50903 patch.
...
llvm-svn: 50983
2008-05-12 18:31:17 +00:00
Argyrios Kyrtzidis
fa8e15bfa5
-Implement proper name lookup for namespaces.
...
-identifierResolver exposes an iterator interface to get all decls through the scope chain.
-The semantic staff (checking IdentifierNamespace and Doug's checking for shadowed tags were moved out of IdentifierResolver and back into Sema. IdentifierResolver just gives an iterator for all reachable decls of an identifier.
llvm-svn: 50923
2008-05-09 23:39:43 +00:00
Ted Kremenek
712c91f8a9
Add attribute "format" support for typedefs of function pointers.
...
llvm-svn: 50906
2008-05-09 17:36:24 +00:00
Chris Lattner
adb86418db
Fix rdar://5921025 a crash on the included testcase.
...
llvm-svn: 50885
2008-05-09 05:34:49 +00:00
Douglas Gregor
caa8acebe7
Diagnose attempts to use C++ default arguments outside of a function declaration
...
llvm-svn: 50799
2008-05-07 04:49:29 +00:00
Fariborz Jahanian
6a70e2019b
Test was accidently nullified in previous check-in.
...
llvm-svn: 50758
2008-05-06 18:14:26 +00:00
Fariborz Jahanian
09367d68ff
Patch to refactor setter/getter names of property attributes into Selector
...
(was IdentifierInfo * before). This will make method declartations whole
lot easier.
llvm-svn: 50747
2008-05-06 18:09:04 +00:00
Chris Lattner
4dd2710222
Fix rdar://5905347 a crash on invalid builtin, due to the
...
params not getting installed for builtins when synthesized.
llvm-svn: 50676
2008-05-05 22:18:14 +00:00
Chris Lattner
cfcabaeb7f
add testcase for pr2050 which is now fixed.
...
llvm-svn: 50610
2008-05-04 01:13:36 +00:00
Fariborz Jahanian
9964c9c64d
Another test case for properties in protocols.
...
llvm-svn: 50589
2008-05-02 21:09:40 +00:00
Fariborz Jahanian
98a6c4fa77
This patch is about merging ObjC2's properties declared in class
...
protocols into class's property list and performing semantics
on them for while doing so.
llvm-svn: 50587
2008-05-02 19:17:30 +00:00