- Aug 30, 2007
-
-
Ted Kremenek authored
llvm-svn: 41586
-
Ted Kremenek authored
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). llvm-svn: 41585
-
Chris Lattner authored
llvm-svn: 41583
-
Neil Booth authored
llvm-svn: 41582
-
Neil Booth authored
llvm-svn: 41581
-
- Aug 29, 2007
-
-
Ted Kremenek authored
(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. llvm-svn: 41580
-
Ted Kremenek authored
This is the same functionality gcc provides via --Wfloat-equal. llvm-svn: 41574
-
Chris Lattner authored
to emit signed comparisons when needed for enum decl references. This implements test/CodeGen/enum.c. I think enums should be good now. llvm-svn: 41572
-
Chris Lattner authored
A small bit of codegen work is still pending. llvm-svn: 41571
-
Chris Lattner authored
llvm-svn: 41570
-
Chris Lattner authored
llvm-svn: 41564
-
Chris Lattner authored
llvm-svn: 41560
-
Steve Naroff authored
This fixes the following bug submitted by Neil... const char *f (void) { return 0; } ...which would incorrectly warn with -pedantic enabled. llvm-svn: 41559
-
Steve Naroff authored
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)))) llvm-svn: 41558
-
- Aug 28, 2007
-
-
Steve Naroff authored
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. llvm-svn: 41557
-
Steve Naroff authored
Finish converting decls over to the new invalid decl API. Also removed an old FIXME (FIXME: "auto func();" passes through...). llvm-svn: 41555
-
Ted Kremenek authored
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. llvm-svn: 41554
-
Steve Naroff authored
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:-) llvm-svn: 41552
-
Chris Lattner authored
t2.c:3:18: warning: expression result unused x = ++x, ++y, y+2; ~~~~~~~~~~~~^ ~~~ llvm-svn: 41551
-
Chris Lattner authored
llvm-svn: 41550
-
Ted Kremenek authored
llvm-svn: 41549
-
Chris Lattner authored
directly in it. Remove TargetInfo::getEnumPolicy, as there is only one policy that we support right now. llvm-svn: 41548
-
Ted Kremenek authored
arbitrarily complex control-flow in their subexpressions. llvm-svn: 41547
-
Ted Kremenek authored
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!). llvm-svn: 41546
-
Chris Lattner authored
llvm-svn: 41545
-
Chris Lattner authored
llvm-svn: 41544
-
Chris Lattner authored
llvm-svn: 41543
-
Steve Naroff authored
llvm-svn: 41542
-
Chris Lattner authored
llvm-svn: 41541
-
Ted Kremenek authored
llvm-svn: 41540
-
Chris Lattner authored
llvm-svn: 41533
-
Chris Lattner authored
TODO: update the types of the constants and the enum. llvm-svn: 41532
-
Chris Lattner authored
llvm-svn: 41531
-
Chris Lattner authored
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 }; ^ llvm-svn: 41530
-
Chris Lattner authored
llvm-svn: 41528
-
Chris Lattner authored
Note the FIXME: we need some way to mark a decl erroneous :) llvm-svn: 41524
-
Chris Lattner authored
implicit cast gets linked back into the AST. llvm-svn: 41523
-
Steve Naroff authored
Implement more thoughful error recovery when dealing with bogus declarator types. For example, the following code was resulting in spurious warnings. This was the result of Sema::GetTypeForDeclarator() synthesizing a type to hand back to the caller (in this case, "int []", instead of "struct s[]", which is invalid). struct s; struct s* t (struct s z[]) { // expected-error {{array has incomplete element type}} return z; } Strategy: Flag the error in Declarator/DeclaratorChunk. This info is later stored in the ParmVarDecl. If the decl is referenced, Sema::ParseIdentifierExpr() will check if the type is invalid. If so, it quietly returns "true", without instantiating a DeclRefExpr. This seems to work nicely. If Chris is happy with the approach, I will generalize this to all VarDecls. llvm-svn: 41521
-
- Aug 27, 2007
-
-
Ted Kremenek authored
llvm-svn: 41520
-
Steve Naroff authored
llvm-svn: 41517
-