]>
granicus.if.org Git - clang/log
Chris Lattner [Mon, 3 Sep 2007 18:37:14 +0000 (18:37 +0000)]
VC++ doesn't define S_ISDIR
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41688
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 3 Sep 2007 18:31:57 +0000 (18:31 +0000)]
Add a method required by the VC++ STL, patch by Hartmut Kaiser!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41687
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 3 Sep 2007 18:30:32 +0000 (18:30 +0000)]
Add #include required on win32.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41686
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 3 Sep 2007 18:28:41 +0000 (18:28 +0000)]
Eliminate some VC++ warnings, patch by Hartmut Kaiser!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41685
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 3 Sep 2007 18:24:56 +0000 (18:24 +0000)]
Add #ifdefs to make the source portable to windows. Patch contributed
by Hartmut Kaiser!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41684
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 3 Sep 2007 18:21:31 +0000 (18:21 +0000)]
initial checkin of vc++ project files, contributed by
Hartmut Kaiser!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41683
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Mon, 3 Sep 2007 01:24:23 +0000 (01:24 +0000)]
Finish getting "array-init.c" to work properly.
Array scalar initialization is now is reasonable shape.
Next step, structure and array of structure initializers.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41681
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Sun, 2 Sep 2007 20:30:18 +0000 (20:30 +0000)]
More progress on array initializers.
- Added Expr::isConstantExpr().
- Added type checking for InitListExpr elements.
- Added diagnostic for trying to initialize a variable sized object.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41674
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Sun, 2 Sep 2007 15:34:30 +0000 (15:34 +0000)]
More semantic analysis of initializers.
Added 2 errors and one warning, updated test case.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41672
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Sun, 2 Sep 2007 02:04:30 +0000 (02:04 +0000)]
Start implementing semantic analysis for C initializers.
Step 1: Start instantiating InitListExpr's.
Step 2: Call newly added function Sema::CheckInitializer() from Sema::ParseDeclarator().
Step 3: Give InitListExpr's a preliminary type.
Step 4: Start emitting diagnostics for simple assignments.
Note:
As a result of step 1, the CodeGen/mandel.c test asserts "Unimplemented agg expr!", which is expected.
As a result of step 4, the test below now fails. This isn't expected and needs to be investigated (it appears type checking for C++ references is flawed in some way).
******************** TEST 'Sema/cxx-references.cpp' FAILED! ********************
Command:
clang -fsyntax-only Sema/cxx-references.cpp
Output:
Sema/cxx-references.cpp:8:12: warning: incompatible pointer types assigning 'int &*' to 'int *'
int *p = &r;
^~
Sema/cxx-references.cpp:10:20: error: incompatible types assigning 'int (int)' to 'int (&)(int)'
int (&rg)(int) = g;
^
Sema/cxx-references.cpp:13:18: error: incompatible types assigning 'int [3]' to 'int (&)[3]'
int (&ra)[3] = a;
^
Sema/cxx-references.cpp:16:14: error: incompatible types assigning 'int *' to 'int *&'
int *& P = Q;
^
4 diagnostics generated.
******************** TEST 'Sema/cxx-references.cpp' FAILED! ********************
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41671
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Sat, 1 Sep 2007 21:08:38 +0000 (21:08 +0000)]
Finish converting SwitchStmt AST to source ranges.
Move DumpSourceRange() to DumpStmt().
Now -parse-ast-dump will display source range info for all stmts/exprs.
One day we should implement the source range protocol for Decls.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41670
91177308 -0d34-0410-b5e6-
96231b3b80d8
Fariborz Jahanian [Sat, 1 Sep 2007 00:26:16 +0000 (00:26 +0000)]
Patch to parse @implementation prologue, method definitions,
objc2's @synthesize and @dynamic.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41667
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Fri, 31 Aug 2007 23:49:30 +0000 (23:49 +0000)]
Convert more statments over to SourceRanges...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41666
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Fri, 31 Aug 2007 23:28:33 +0000 (23:28 +0000)]
Move SourceRange protocol from Expr->Stmt.
Converted many of the statements over. Still a hanful left...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41663
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 22:54:14 +0000 (22:54 +0000)]
add stmtexpr support for aggregates
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41662
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 22:51:38 +0000 (22:51 +0000)]
add support for complex stmtexpr's
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41661
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 22:49:20 +0000 (22:49 +0000)]
Generalize RValue to handle complex better, generalize EmitCompoundStmt to
support any sort of expr, add a new EmitAnyExpr routine.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41660
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Fri, 31 Aug 2007 22:47:06 +0000 (22:47 +0000)]
Fixed missing '(' and ')' characters in (CFG) pretty-printing of
statement expressions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41659
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Fri, 31 Aug 2007 22:29:13 +0000 (22:29 +0000)]
Added better pretty printing in CFGs for __builtin_choose_expr
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41658
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Fri, 31 Aug 2007 22:26:13 +0000 (22:26 +0000)]
Further cleanups in CFG printing for comma expressions, statement expressions, and indirect gotos.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41657
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 22:09:40 +0000 (22:09 +0000)]
implement code generation for scalar stmt expressions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41656
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 21:49:55 +0000 (21:49 +0000)]
Fix a bug/missing-feature Ted noticed: the 'unused' warning should not
warn about the last stmt in a stmtexpr, f.e. there should be no warning for:
int maxval_stmt_expr(int x, int y) {
return ({int _a = x, _b = y; _a > _b ? _a : _b; });
}
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41655
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Fri, 31 Aug 2007 21:49:40 +0000 (21:49 +0000)]
Cleanups for printing the terminators of CFGBlocks for "?", "||", and "&&" operators.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41654
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 21:49:13 +0000 (21:49 +0000)]
diagnose extended uses of offsetof
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41653
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 21:48:38 +0000 (21:48 +0000)]
new diag
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41652
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Fri, 31 Aug 2007 21:30:12 +0000 (21:30 +0000)]
Added "PrinterHelper" interface (include/AST/PrinterHelper) that can
be passed as an (optional) argument to StmtPrinter to customize
printing of AST nodes.
Used new PrinterHelper interface to enhance printing and visualization
of CFGs. The CFGs now illustrate the semantic connectives between
statements and terminators, wheras in the previous printing certain
expressions would (visible) be printed multiple times to reflect which
expressions used the results of other expressions.
The end result is that the CFG is easier to read for flow of
expression values (following principles similar to the LLVM IR).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41651
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Fri, 31 Aug 2007 17:53:25 +0000 (17:53 +0000)]
Added #ifndef/#endif statements to protect the header from multiple inclusion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41648
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Fri, 31 Aug 2007 17:20:07 +0000 (17:20 +0000)]
Removed Sema::VerifyConstantArrayType(). With the new Array/ConstantArray/VariableArray nodes, this
routine was causing more trouble than it was worth. Anders/Chris noticed that it could return an error code
without emiting a diagnostic (which results in an silent invalid decl, which should *never* happen). In addition,
this routine didn't work well for typedefs and field decls. Lastly, it didn't consider that initializers aren't
in place yet.
Added Type::getAsConstantArrayType(), Type::getAsVariableArrayType(), Type::getAsVariablyModifiedType(),
and Type::isVariablyModifiedType();
Modified Sema::ParseDeclarator() and Sema::ParseField() to use the new predicates. Also added a FIXME for
the initializer omission. Also added a missing test for "static" @ file scope.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41647
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Fri, 31 Aug 2007 17:03:41 +0000 (17:03 +0000)]
Added support for __builtin_choose_expr (ChooseExpr) in CFGs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41646
91177308 -0d34-0410-b5e6-
96231b3b80d8
Fariborz Jahanian [Fri, 31 Aug 2007 16:11:31 +0000 (16:11 +0000)]
Author: F. Jahanian
Log:
Implement parsing of objective-c's new @property declaration.
Modified:
include/clang/Basic/DiagnosticKinds.def
include/clang/Parse/Parser.h
Parse/ParseObjc.cpp
Parse/Parser.cpp
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41644
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 05:01:50 +0000 (05:01 +0000)]
don't turn semantic errors into parse errors.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41638
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 04:58:34 +0000 (04:58 +0000)]
fix some memory leaks when recovering.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41637
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Fri, 31 Aug 2007 04:56:16 +0000 (04:56 +0000)]
Add InitListExpr class.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41636
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 04:53:24 +0000 (04:53 +0000)]
add actions for deleting expr/stmt nodes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41635
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 04:44:06 +0000 (04:44 +0000)]
Implement codegen support for lowering "library builtins" like __builtin_isinf
to their corresponding library routines (e.g. isinf). This allows us to handle
all the stuff in macos math.h, and other stuff as it's added to *Builtins.def.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41634
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 04:31:45 +0000 (04:31 +0000)]
add the ability to get the llvm function corresponding to a library builtin.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41633
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 31 Aug 2007 03:44:20 +0000 (03:44 +0000)]
add some accessors for querying attributes of builtins. Add the new 'F' attribute.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41631
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Fri, 31 Aug 2007 00:32:44 +0000 (00:32 +0000)]
Sema::ParseCastExpr() missing call to UsualUnaryConversions().
The following case now works...
void empty(void * a ) {}
void test()
{
unsigned char A[4];
empty( (void *) A);
}
Thanks to Patrick Flannery for finding this...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41630
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Thu, 30 Aug 2007 22:35:45 +0000 (22:35 +0000)]
Final phase of array cleanup (for now), removing a FIXME from yesterday.
Moved several array constraints checks from Sema::VerifyConstantArrayType() to
Sema::GetTypeForDeclarator(). VerifyConstantArrayType() is now very simple, and
could be removed eventually.
Now, we get the following (correct) messages for BlockVarDecls:-)
[dylan:~/llvm/tools/clang] admin% ../../Debug/bin/clang x.c -pedantic
x.c:4:20: error: size of array has non-integer type 'float'
int size_not_int[f];
^
x.c:5:21: error: array size is negative
int negative_size[1-2];
^~~
x.c:6:17: warning: zero size arrays are an extension
int zero_size[0];
^
3 diagnostics generated.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41624
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 30 Aug 2007 21:28:02 +0000 (21:28 +0000)]
Minor cleanups to pretty-printing for loops in CFGs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41623
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 30 Aug 2007 18:48:11 +0000 (18:48 +0000)]
Fixed a bug in constructing CFG blocks for case statement fall-through
introduced by moving "CaseStmt" pointers out of the list of statements
and into the explicit "label" associated with a CFGBlock. --This
line, and those below, will be ignored--
M AST/CFG.cpp
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41622
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Thu, 30 Aug 2007 18:45:57 +0000 (18:45 +0000)]
Diff is self small & self explanatory...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41621
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 30 Aug 2007 18:39:40 +0000 (18:39 +0000)]
Fixed bug in CFG construction where we failed to handle loop bodies with
no statements (or just full of ';' statements).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41620
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 30 Aug 2007 18:20:57 +0000 (18:20 +0000)]
Fixed bug in CFG construction involving use of labels and "empty"
blocks involving only ';' statements. We now correctly handle the following:
void empty_label() { l1: ; }
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41619
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Thu, 30 Aug 2007 18:14:25 +0000 (18:14 +0000)]
Fix a comment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41618
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 30 Aug 2007 18:13:31 +0000 (18:13 +0000)]
Fixed bug where the CFG would fail to build when an 'if' statement had
an empty then or else block (or contained only ';' statements).
For example, we now handle the following:
int empty_else() { if (0) { int a; } else ; }
int empty_then() { if (0) ; else { int a; } }
Thanks to Nico Weber for spotting this problem.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41617
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Thu, 30 Aug 2007 18:10:14 +0000 (18:10 +0000)]
Polish yesterday's Array/ConstantArray/VariableArray rewrite, removing a couple FIXME's.
Refactored Array/VariableArray, moving SizeModifier/IndexTypeQuals back up to Array. These
attributes are not specific to VLA's. Most of them are specific to array parameter types.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41616
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 17:59:59 +0000 (17:59 +0000)]
implement pretty printing of offsetof
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41615
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 17:51:09 +0000 (17:51 +0000)]
a new testcase
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41614
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 17:45:32 +0000 (17:45 +0000)]
implement initial sema support for __builtin_offsetof
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41613
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 17:08:45 +0000 (17:08 +0000)]
Pass the location of the type.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41612
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 17:08:17 +0000 (17:08 +0000)]
Fix 80 col violations.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41611
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 30 Aug 2007 16:50:46 +0000 (16:50 +0000)]
Fixed bug for CaseStmt where the child_begin/child_end methods were not
including the expressions in the case statement itself (not the body of
the case).
This required moving SubStmt out of SwitchCase into CaseStmt and DefaultStmt
respectively. getSubStmt() now is a virtual call for SwitchCase, but is
a direct (static) call for CaseStmt and DefaultStmt.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41609
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 15:52:49 +0000 (15:52 +0000)]
make sure to parse postfix expression suffixes after builtin
primary expressions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41607
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 15:51:11 +0000 (15:51 +0000)]
add an action callback for __builtin_offsetof
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41606
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 06:38:49 +0000 (06:38 +0000)]
-C mode doesn't return comments on "#" lines, so the diag checker doesn't pick them up.
Test this the hard way.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41605
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 06:34:23 +0000 (06:34 +0000)]
When relexing the file to find expected warnings/errors, make sure
to turn off all lexer-related warnings.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41604
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 06:19:11 +0000 (06:19 +0000)]
fix a bug that is causing CodeGen/complex.c to be grumpy.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41603
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 06:17:34 +0000 (06:17 +0000)]
Teach the stmtdumper to dump location/range info when a SourceMgr is available.
For example, -parse-ast-dump now prints:
static inline int __inline_isinff(float __x)
(CompoundStmt 0x2409a20
(ReturnStmt 0x2409a10
(BinaryOperator 0x24099f0 'int' <///usr/include/architecture/i386/math.h:183:63, col:102> '=='
(CallExpr 0x24098f0 'float' <col:63, col:82>
(ImplicitCastExpr 0x24098e0 'float (*)(float)' <col:63>
(DeclRefExpr 0x2409880 'float (float)' <col:63> Decl='__builtin_fabsf' 0x2409840))
(DeclRefExpr 0x24098a0 'float' <col:79> Decl='__x' 0x2409810))
(CallExpr 0x24099c0 'float' <col:87, col:102>
(ImplicitCastExpr 0x2409870 'float (*)(void)' <col:87>
(DeclRefExpr 0x2409980 'float (void)' <col:87> Decl='__builtin_inff' 0x2409940))))))
where it only prints filename/line# if it changes from the previous value. We
really need loc info on stmts though, like we have on exprs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41602
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 06:10:41 +0000 (06:10 +0000)]
Fix a regression on test/Sema/unused-expr.c by fixing the type predicates
to test for the right type class.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41601
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 05:59:30 +0000 (05:59 +0000)]
constify a method.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41600
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Thu, 30 Aug 2007 01:06:46 +0000 (01:06 +0000)]
Fix the following redefinition errors submitted by Keith Bauer...
[dylan:~/llvm/tools/clang] admin% cat tentative_decls.c
// incorrectly generates redefinition error
extern int array[3];
int array[3];
// incorrectly generates a redefinition error
extern void nup(int a[3]);
void nup(int a[3]) {}
It turns out that this exposed a fairly major flaw in the type system,
array types were never getting uniqued! This is because all array types
contained an expression, which aren't unique.
To solve this, we now have 2 array types, ConstantArrayType and
VariableArrayType. ConstantArrayType's are unique, VAT's aren't.
This is a fairly extensive set of fundamental changes. Fortunately,
all the tests pass. Nevertheless, there may be some collateral damage:-)
If so, let me know!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41592
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 01:00:35 +0000 (01:00 +0000)]
Previous commit should have been:
Use Ted's child walking interface to allow the dumper to walk the tree
in one place and only have node-specific callbacks worry about
formatting the nodes (instead of formatting the nodes plus walking the
tree).
This commit eliminates now default cases by letting them fall through with
the normal visitor stuff.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41591
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 00:53:54 +0000 (00:53 +0000)]
elimiante some virtual calls.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41589
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 30 Aug 2007 00:40:08 +0000 (00:40 +0000)]
Allow a SourceManager to optionally be passed into Stmt::dump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41588
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 29 Aug 2007 23:26:37 +0000 (23:26 +0000)]
Added comments about -dump-cfg and -view-cfg modes for the clang driver.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41586
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 29 Aug 2007 23:20:49 +0000 (23:20 +0000)]
Added an (optional) explicit "Label" statement to CFGBlock. If a
block begins with a label or case statement, CFGBlock::getLabel() will
return the corresponding LabelStmt/CaseStmt/DefaultStmt.
LabelStmts and SwitchCases no longer appear within the "executable"
statements of a CFGBlock.
More cleanups on visualization/pretty-printing of CFGs (less verbose).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41585
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 29 Aug 2007 22:54:08 +0000 (22:54 +0000)]
cleanup context-sensitive objc keyword recognition. Patch by Fariborz Jahanian.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41583
91177308 -0d34-0410-b5e6-
96231b3b80d8
Neil Booth [Wed, 29 Aug 2007 22:13:52 +0000 (22:13 +0000)]
Spaces not tabs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41582
91177308 -0d34-0410-b5e6-
96231b3b80d8
Neil Booth [Wed, 29 Aug 2007 22:00:19 +0000 (22:00 +0000)]
Ensure we diagnose long long literals in C90 mode.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41581
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 29 Aug 2007 21:56:09 +0000 (21:56 +0000)]
Added GraphTraits to source-level CFGs (CFG and CFGBlock) to allow
(LLVM-provided) graph algorithms such as DFS and graph visualization
to work effortless on source-level CFGs.
Further cleanup on pretty printing of CFGs. CFGBlock::dump and
CFGBlock::print now take the parent CFG as an argument. This allows
CFGBlocks to print their own appropriate label indicating whether or
not they are the Entry/Exit/IndirectGotoBlock without the CFG::print
routine doing it instead.
Added Graphviz visualization for CFGs: CFG::viewCFG. This employs the
GraphTraits just implemented.
Added "-view-cfg" mode the to clang driver. This is identical to
"-dump-cfg" except that it calls Graphviz to visualize the CFGs
instead of dumping them to the terminal.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41580
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 29 Aug 2007 18:06:12 +0000 (18:06 +0000)]
Added checking (during parsing) of comparison of floating point values using == or !=.
This is the same functionality gcc provides via --Wfloat-equal.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41574
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 29 Aug 2007 17:48:46 +0000 (17:48 +0000)]
Teach Type::is[un]SignedIntegerType about enum decls. This allows the code generator
to emit signed comparisons when needed for enum decl references. This implements
test/CodeGen/enum.c. I think enums should be good now.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41572
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 29 Aug 2007 17:31:48 +0000 (17:31 +0000)]
Implement GCC-compatible layout and typing of enum constants and enum decl.
A small bit of codegen work is still pending.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41571
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 29 Aug 2007 17:23:37 +0000 (17:23 +0000)]
add some accessors
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41570
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 29 Aug 2007 16:03:41 +0000 (16:03 +0000)]
Fix a null dereference Neil ran into
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41564
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 29 Aug 2007 06:38:44 +0000 (06:38 +0000)]
remove some ugly code now that implicit defs are being generated in this case, thanks Steve!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41560
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Wed, 29 Aug 2007 00:00:02 +0000 (00:00 +0000)]
Re-teach Expr::isNullPointerConstant() about ImplicitCastExpr:-)
This fixes the following bug submitted by Neil...
const char *f (void) { return 0; }
...which would incorrectly warn with -pedantic enabled.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41559
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Tue, 28 Aug 2007 23:30:39 +0000 (23:30 +0000)]
Implement default argument promotions (for old-style function calls and variable argument lists).
[dylan:~/llvm/tools/clang] admin% cat x.c
int printf(const char *, ...);
int oldschool();
void foo() {
float f;
short i;
printf("foo %f", 1.0f);
oldschool(f,i);
}
[dylan:~/llvm/tools/clang] admin% ../../Debug/bin/clang x.c -parse-ast-dump
int printf(char const *, ...);
int oldschool();
void foo()
(CompoundStmt 0x3105f00
(DeclStmt 0x3105ba0
0x3105ce0 "float f")
(DeclStmt 0x3105c90
0x3105d10 "short i")
(CallExpr 0x3105df0 'int'
(ImplicitCastExpr 0x3105dc0 'int (*)(char const *, ...)'
(DeclRefExpr 0x3105c20 'int (char const *, ...)' Decl='printf' 0x3105bd0))
(ImplicitCastExpr 0x3105dd0 'char const *'
(StringLiteral 0x3105d60 'char *' "foo %f"))
(ImplicitCastExpr 0x3105de0 'double'
(FloatingLiteral 0x3105d80 'float' 1.000000)))
(CallExpr 0x3105ed0 'int'
(ImplicitCastExpr 0x3105ea0 'int (*)()'
(DeclRefExpr 0x3105e20 'int ()' Decl='oldschool' 0x3105c40))
(ImplicitCastExpr 0x3105eb0 'double'
(DeclRefExpr 0x3105e40 'float' Decl='f' 0x3105ce0))
(ImplicitCastExpr 0x3105ec0 'int'
(DeclRefExpr 0x3105e60 'short' Decl='i' 0x3105d10))))
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41558
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Tue, 28 Aug 2007 21:20:34 +0000 (21:20 +0000)]
Teach Expr::isNullPointerConstant() about ImplicitCastExpr's.
This fixes the following (recent) regression noticed by Keith Bauer (thanks!).
void func(void *a);
main() {
void *p;
p = 0;
func(0);
}
...which now works as you would expect.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41557
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Tue, 28 Aug 2007 20:14:24 +0000 (20:14 +0000)]
Finish converting decls over to the new invalid decl API.
Also removed an old FIXME (FIXME: "auto func();" passes through...).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41555
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 28 Aug 2007 19:26:49 +0000 (19:26 +0000)]
Added support for indirect-gotos (GCC extension) in source-level CFGs.
This involves the construction of a specialized "dispatch" block that
all basic blocks containing indirect gotos unconditionally transfer
control-flow to. The successors of the dispatch block has as its successors
all of the blocks containing labels whose address was taken somewhere in
the function.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41554
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Tue, 28 Aug 2007 18:45:29 +0000 (18:45 +0000)]
Move the "invalid decl" idiom up to Decl (where we have some bits to steal:-)
Converted ParmVarDecl, FileVarDecl, BlockVarDecl, and Sema::ParseIdentifierExpr() to use the idiom.
Updated array-constraint.c to make sure we no longer get "undeclared identifier" errors:-)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41552
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 18:40:30 +0000 (18:40 +0000)]
Emit a slightly better warning for unused values for unary and binary operators:
t2.c:3:18: warning: expression result unused
x = ++x, ++y, y+2;
~~~~~~~~~~~~^ ~~~
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41551
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 18:36:55 +0000 (18:36 +0000)]
add a sourcelocation to binary operator to keep track of the location of the operator.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41550
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 28 Aug 2007 18:30:10 +0000 (18:30 +0000)]
Added support for GCC-style statement expressions in source-level CFGs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41549
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 18:24:31 +0000 (18:24 +0000)]
Change EnumDecl to store its corresponding integer type
directly in it. Remove TargetInfo::getEnumPolicy, as there is only
one policy that we support right now.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41548
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 28 Aug 2007 18:14:37 +0000 (18:14 +0000)]
Added support for comma expressions and DeclStmts which may have
arbitrarily complex control-flow in their subexpressions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41547
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 28 Aug 2007 17:02:55 +0000 (17:02 +0000)]
Fixed return-of-stack-address checker to correctly handle stack/global
variables that have a pointer type, or arrays that contain pointers.
This fixes a crash on the following code:
int *h[3];
int **foo(int i)
{
return &(h[i]);
}
This bug was reported by Keith Bauer (thanks!).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41546
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 16:54:00 +0000 (16:54 +0000)]
extwarn about VLAs in C89 mode.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41545
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 16:41:29 +0000 (16:41 +0000)]
c++'0x has long long also.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41544
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 16:40:32 +0000 (16:40 +0000)]
warn about long long when in c89 mode.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41543
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Tue, 28 Aug 2007 16:31:47 +0000 (16:31 +0000)]
Tweak declaration...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41542
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 16:20:14 +0000 (16:20 +0000)]
new testcase
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41541
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 28 Aug 2007 16:18:58 +0000 (16:18 +0000)]
Removed special-casing in CFG construction for ParenExprs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41540
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 06:17:15 +0000 (06:17 +0000)]
fix 80 col violation
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41533
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 06:15:15 +0000 (06:15 +0000)]
compute the required destination type for an enum, emitting various warnings.
TODO: update the types of the constants and the enum.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41532
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 05:56:37 +0000 (05:56 +0000)]
remove dead method.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41531
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 05:27:00 +0000 (05:27 +0000)]
add a diagnostic:
t.c:1:12: warning: ISO C restricts enumerator values to range of 'int' (
180388626432 is too large)
enum e {A, B = 42LL << 32, C = -4, D = 12456 };
^
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41530
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 28 Aug 2007 05:10:31 +0000 (05:10 +0000)]
move a todo
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41528
91177308 -0d34-0410-b5e6-
96231b3b80d8