summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
Commit message (Collapse)AuthorAgeFilesLines
* add a new Sema::CurFunctionNeedsScopeChecking bool that is used to avoid Chris Lattner2009-04-194-9/+26
| | | | | | | calling into the jump checker when a function or method is known to contain no VLAs or @try blocks. llvm-svn: 69509
* move jump scope checking and related code out into its own file, SemaDecl.cpp isChris Lattner2009-04-194-267/+293
| | | | | | already too large. llvm-svn: 69505
* rewrite an O(N^2) algorithm to be O(n).Chris Lattner2009-04-191-19/+18
| | | | llvm-svn: 69500
* second half of indirect jump checking: make sure that any Chris Lattner2009-04-191-10/+32
| | | | | | address taken labels are in function scope llvm-svn: 69499
* First half of jump scope checking for indirect goto.Chris Lattner2009-04-191-7/+21
| | | | llvm-svn: 69498
* Add location info for indirect goto.Chris Lattner2009-04-191-2/+2
| | | | llvm-svn: 69497
* reimplement DeclStmt handling so that we correctly handle intermixed Chris Lattner2009-04-181-47/+30
| | | | | | VLA's and statement expressions. llvm-svn: 69491
* the scope checker does work with objc methods, add testcase.Chris Lattner2009-04-181-5/+0
| | | | llvm-svn: 69487
* I didn't understand how @catches were chained. Now that I get it, fixChris Lattner2009-04-181-11/+10
| | | | | | | the scope checker to not think @catches are nested in each other, eliminating some bogus notes. llvm-svn: 69486
* forgot to commit this before.Chris Lattner2009-04-181-1/+1
| | | | llvm-svn: 69480
* reject invalid jumps among pieces of @try blocks. This seems to workChris Lattner2009-04-181-3/+24
| | | | | | | reasonably well except for the problem that @catches are nested within each other in the AST, giving the ugly diagnostics in L8. llvm-svn: 69477
* unconditionally check for goto correctness. This is because switchChris Lattner2009-04-181-4/+2
| | | | | | | | | statements don't end up in the LabelMap so we don't have a quick way to filter them. We could add state to Sema (a "has vla" and "has jump" bit) to try to filter this out, but that would be sort of gross and I'm not convinced it is the best way. Thoughts welcome. llvm-svn: 69476
* abstract the SwitchStack for blocks just like we do the goto labels.Chris Lattner2009-04-182-8/+21
| | | | | | This fixes a crash on invalid (test10). rdar://6805469 llvm-svn: 69465
* fix two error paths out of ParseBlockLiteralExpression toChris Lattner2009-04-181-1/+1
| | | | | | | | call ActOnBlockError so that CurBlock gets popped. This fixes a crash on test/block-syntax-error.c when this new assertion is enabled. llvm-svn: 69464
* refactor some code, adding a new getLabelMap() accessor methodChris Lattner2009-04-184-40/+50
| | | | | | | so that clients can't poke the function-local one when they really want the current block label. No functionality change. llvm-svn: 69463
* Improve switch diagnostic to emit the "jump" message on theChris Lattner2009-04-181-17/+20
| | | | | | | | | | | | | | | specific bad case instead of on the switch. Putting it on the switch means you don't know what case is the problem. For example: scope-check.c:54:3: error: illegal switch case into protected scope case 2: ^ scope-check.c:53:9: note: jump bypasses initialization of variable length array int a[x]; ^ llvm-svn: 69462
* first step to getting switches giving "jump into vla scope" errors.Chris Lattner2009-04-181-2/+7
| | | | llvm-svn: 69461
* fix error recovery in the case of a jump to a label with no definitionChris Lattner2009-04-181-25/+27
| | | | | | | to create a well formed AST instead of a dangling pointer. This resolves several fixme's. llvm-svn: 69459
* rewrite the goto scope checking code to be more efficient, simpler,Chris Lattner2009-04-181-81/+203
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | produce better diagnostics, and be more correct in ObjC cases (fixing rdar://6803963). An example is that we now diagnose: int test1(int x) { goto L; int a[x]; int b[x]; L: return sizeof a; } with: scope-check.c:15:3: error: illegal goto into protected scope goto L; ^ scope-check.c:17:7: note: scope created by variable length array int b[x]; ^ scope-check.c:16:7: note: scope created by variable length array int a[x]; ^ instead of just saying "invalid jump". An ObjC example is: void test1() { goto L; @try { L: ; } @finally { } } t.m:6:3: error: illegal goto into protected scope goto L; ^ t.m:7:3: note: scope created by @try block @try { ^ There are a whole ton of fixme's for stuff to do, but I believe that this is a monotonic improvement over what we had. llvm-svn: 69437
* don't evaluate ->child_end() every time through the loop, or *i frequently ↵Chris Lattner2009-04-181-27/+32
| | | | | | within it. llvm-svn: 69431
* split code out into a new CheckFunctionJumpScopes routine,Chris Lattner2009-04-181-32/+44
| | | | | | | add some comments, change type from void* -> Stmt*, use smallvector instead of vector. llvm-svn: 69430
* make scope checking be static functions instead of sema methods.Chris Lattner2009-04-182-36/+24
| | | | llvm-svn: 69429
* FunctionDecl::getBody() is getting an ASTContext argument for use inDouglas Gregor2009-04-183-3/+3
| | | | | | | | lazy PCH deserialization. Propagate that argument wherever it needs to be. No functionality change, except that I've tightened up a few PCH tests in preparation. llvm-svn: 69406
* tweak redefinition of a typedef a bit to fix a couple of problems:Chris Lattner2009-04-171-15/+12
| | | | | | | | | | | | | | | | | | | | | | | 1. We had logic in sema to decide whether or not to emit the error based on manually checking whether in a system header file. 2. we were allowing redefinitions of typedefs in class scope in C++ if in header file. 3. there was no way to force typedef redefinitions to be accepted by the C compiler, which annoys me when stripping linemarkers out of .i files. The fix is to split the C++ class typedef redefinition path from the C path, and change the C path to be a warning that normally maps to error. This causes it to properly be ignored in system headers, etc. and gives us a way to control it. Passing -Wtypedef-redefinition now turns the error into a warning. One behavior change is that we now diagnose cases where you redefine a typedef in your .c file that was defined in a header file. This seems like reasonable behavior, and the diagnostic now indicates that it can be controlled with -Wtypedef-redefinition. llvm-svn: 69391
* fix a crash on invalid by making ActOnDeclarator create decl withChris Lattner2009-04-171-0/+3
| | | | | | | a dummy *function* type when it is recovering and knows it needs a function. rdar://6802350 - clang crash on invalid input llvm-svn: 69374
* Implement lvalue test for conditional expressions.Sebastian Redl2009-04-172-4/+33
| | | | | | Add a few commented lines to the test case that point out things that don't work yet. llvm-svn: 69354
* Add support for the __has_trivial_destructor type trait.Anders Carlsson2009-04-172-3/+19
| | | | llvm-svn: 69345
* Fixup semantic analysis for nested blocks, and allow block literalMike Stump2009-04-172-2/+8
| | | | | | | expressions that can be of static duration to be returned. Radar 6786551 llvm-svn: 69331
* If a class has a non-trivial constructor that doesn't take any arguments, we ↵Anders Carlsson2009-04-163-11/+26
| | | | | | | | | | | | | | | | | | will now make an implicit CXXTemporaryObjectExpr. So struct S { S(); }; void f() { S s; } 's' here will implicitly be declared as. S s = S(); llvm-svn: 69326
* Fix a crash bug when comparing overload quality of conversion operators with ↵Sebastian Redl2009-04-166-23/+352
| | | | | | | | | | | conversion constructors. Remove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn't help myself. Change the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn't changed anywhere. Let the parser handle C++'s irregular grammar around assignment-expression and conditional-expression. And finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness. llvm-svn: 69299
* Attempt to fix a read-after-free running test/Sema/designated-initializers.c.Eli Friedman2009-04-161-3/+3
| | | | | | Douglas, can you check that this is doing the right thing? llvm-svn: 69298
* When we create an implicit CXXTemporaryObjectExpr we don't need to check ↵Anders Carlsson2009-04-161-6/+1
| | | | | | that it's a valid init. Instead, just set it as the VarDecl's initializer. llvm-svn: 69292
* Disable the code I added before until I understand what's causing ↵Anders Carlsson2009-04-161-0/+5
| | | | | | default2.cpp to fail. llvm-svn: 69267
* use getDiagnosticLevel instead of getDiagnosticMapping, whichChris Lattner2009-04-161-2/+2
| | | | | | is about to become private. llvm-svn: 69262
* Add support for the __has_trivial_constructor type trait.Anders Carlsson2009-04-162-0/+31
| | | | llvm-svn: 69245
* When declaring a variable that has a constructor and a direct initializer, ↵Anders Carlsson2009-04-151-9/+13
| | | | | | | | | | | | | | | | | | for example: struct X { X(int, int); }; X x(10, 10); we model that as X x = X(10, 10); inserting a temporary object expr. llvm-svn: 69227
* Add warning when a tentative array definition is assumed to have one element.Daniel Dunbar2009-04-151-2/+3
| | | | | | - Also, fixed one to actually be one (instead of zero). :) llvm-svn: 69226
* Fix <rdar://problem/6786597> varargs not supported for Blocks under clang.Steve Naroff2009-04-151-2/+6
| | | | | | Teach Sema::SemaBuiltinVAStart() about blocks. llvm-svn: 69201
* Patch to remove a bogus warning which pointed to underlying ASTFariborz Jahanian2009-04-151-13/+3
| | | | | | | | gen. issue for property in continuation class declared readwrite but which did not generate the declaration for the setter. Fix also removed a FIXME and resulted in code cleanup. llvm-svn: 69200
* Fixup http://llvm.org/viewvc/llvm-project?rev=69165&view=rev (based on ↵Steve Naroff2009-04-151-3/+10
| | | | | | feedback from Eli). llvm-svn: 69184
* Revert previous patch (will commit a fix soon).Steve Naroff2009-04-151-7/+6
| | | | llvm-svn: 69178
* Fix <rdar://problem/6789707> "warning: 'extern' variable has an initializer" ↵Steve Naroff2009-04-151-1/+1
| | | | | | not correct for __private_extern__. llvm-svn: 69167
* Fix <rdar://problem/6791490> [clang10 regression] [sema] invalid illegal ↵Steve Naroff2009-04-151-7/+6
| | | | | | | | | | | | jump diagnostic. caused by: <rdar://problem/6252084> [sema] jumps into Obj-C exception blocks should be disallowed. Sema::RecursiveCalcLabelScopes() and Sema::RecursiveCalcJumpScopes() need to pop the ScopeStack within the statement iteration loop (was outside the loop). Eli, please review (thanks). llvm-svn: 69165
* Implement support for designated initializers that refer to members ofDouglas Gregor2009-04-153-26/+117
| | | | | | anonymous structs or unions. Fixes PR3778. llvm-svn: 69153
* Switch designated-initializer checking from using designator iteratorsDouglas Gregor2009-04-151-16/+17
| | | | | | to using designator indices. No functionality change. llvm-svn: 69147
* Improve "assignment to cast" diagnostic.Daniel Dunbar2009-04-151-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Strip off extra parens when looking for casts. - Change the location info to point at the cast (instead of the assignment). For example, on int *b; #define a ((void*) b) void f0() { a = 10; } we now emit: /tmp/t.c:4:3: error: assignment to cast is illegal, lvalue casts are not supported a = 10; ^ ~ /tmp/t.c:2:12: note: instantiated from: #define a ((void*) b) ~^~~~~~~~~~ instead of: /tmp/t.c:4:5: error: expression is not assignable a = 10; ~ ^ llvm-svn: 69114
* Diagnose properties which have no implementations;Fariborz Jahanian2009-04-141-19/+52
| | | | | | | either unimplemented setter/getter or no implementation directive. llvm-svn: 69098
* Fix <rdar://problem/6252084> [sema] jumps into Obj-C exception blocks should ↵Steve Naroff2009-04-141-12/+13
| | | | | | | | be disallowed. This builds on Eli's work from http://llvm.org/viewvc/llvm-project?view=rev&revision=65678. llvm-svn: 69073
* implement some sema for gnuc_inline attribute. Reject always_inline and ↵Chris Lattner2009-04-141-5/+15
| | | | | | no_inline on objc methods. llvm-svn: 69051
* recognize the gnuc_inline attribute.Chris Lattner2009-04-141-0/+17
| | | | llvm-svn: 69044
OpenPOWER on IntegriCloud