aboutsummaryrefslogtreecommitdiff
path: root/AST
AgeCommit message (Collapse)Author
2007-08-23For gotos, breaks, and continues where we cannot find a target successorTed Kremenek
block (because we are creating a CFG from an incomplete AST) we now (gracefully) have a block ending with such statements not have any successors instead of firing an assertion. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41327 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-23Added support for do..while loops in CFG construction.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41325 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-23Renamed "CFG::BuildCFG" to "CFG::buildCFG" to have more consistent ↵Ted Kremenek
capitalization. Added explicit "Exit" CFGBlock pointer to the source-level CFG. Changed the construction of blocks with "return" statements to have the return statement appear both as a statement in the list of statements for a CFGBlock as well as appear as a control-flow terminator. Also removed the implicit linearization of "return" so that the return value and the return statement did not appear as separate statements in the block. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41323 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-22Fixed bugs in source-level CFG construction for "for" and "while" loopsTed Kremenek
where break targets weren't being set and restored properly. Also cleaned up CFGBuilder code for "for" and "while" to use less reliance on globals and to have clearer semantics. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41302 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-22Added support for "break" statements in source-level ASTs.Ted Kremenek
Some comment cleanups. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41299 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-22Added support for "continue" statements in source-level CFGsTed Kremenek
Cleaned up some code for "for" and "while" loops by making their implementations more symmetrical (and added a few comments). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41298 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-22Added preliminary support for while loops within source-level CFGs.Ted Kremenek
Adjusted printing of source-level CFGs to account that the entry block may not be the first block in the list of blocks a CFG object maintains. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41294 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-22Added CFG support for: for loopsTed Kremenek
In CFG dumper, refactored the code to print block terminators into a StmtVisitor. Added the method "FinishBlock" to CFGBuilder to do the reversal of statements in a block instead of calling "reverseStmts" for a block directly. This was necessary to fix a bug in how blocks with labels were being processed (some cases would cause the statements to be reversed twice). FinishBlock detects blocks that start with labels and doesn't do a second reversal. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41281 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-22Changed data structure recording the CFG blocks that need to be backpatchedTed Kremenek
to labeled blocks from a list to a vector. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41274 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-22Parse @encode expressions.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41273 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-21Added CFG support for gotos and labels.Ted Kremenek
Modified CFG so that getEntry(), getExit(), front() and back() return CFGBlock& instead of CFGBlock*. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41258 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-21Converted CFGBuilder to use StmtVisitor instead of doing a switchTed Kremenek
dispatch to walk the AST. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41254 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-21Added CFG infrastructure (CFG.cpp and CFG.h) for clang ASTs.Ted Kremenek
Added builder code to translate ASTs to CFGs. This currently supports if, return, and non-control flow statements. Added pretty-printer to debug CFGs. Added a "-dump-cfg" option to the clang driver to dump CFGs for code sent through the frontend. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41252 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-21Implement parsing and code generation of Objective-C string literals.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41238 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-21add getAsComplexType() for consistencyChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41229 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-21Switch StmtVisitor from using dynamic to static dispatch. This makes it Chris Lattner
significantly faster and actually reduces the amount of code in the system. This also allows for future visitor changes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41211 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-20Modified ArraySubscriptExpr to have accessors getLHS and getRHS in additionTed Kremenek
to getBase and getIdx. getBase and getIdx now return a "normalized" view of the expression (e.g., always "A[4]" instead of possibly "4[A]"). getLHS and getRHS return the expressions with syntactic fidelity to the original source code. Also modified client code of ArraySubscriptExpr, including the AST dumper and pretty printer, the return-stack value checker, and the LLVM code generator. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41180 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-17Add initial support for constant CFStrings.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41136 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-10make sure to add a newline at the end of the dumpChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41011 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-09implement dumper support for declstmt's. The dumper is now "done".Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40969 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-09implement dumper support for the rest of expressions.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40968 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-09move a switch to common code.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40967 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-09dump strings with escapes and other stuff in them nicely.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40964 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-09add dumping support for some new nodesChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40959 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-09Dump out types for expressions, and handle typedefs nicely. Chris Lattner
This allows us to dump: typedef short S; int test(S X, long long Y) { return X < ((100)); } as: typedef short S; int test(S X, long long Y) (CompoundStmt 0x2905d40 (ReturnStmt 0x2905d30 (BinaryOperator 0x2905d10 'int' '<' (ImplicitCastExpr 0x2905d00 'int' (DeclRefExpr 0x2905c80 'S':'short' Decl='X' 0x2905c20)) (ParenExpr 0x2905ce0 'int' (ParenExpr 0x2905cc0 'int' (IntegerLiteral 0x2905ca0 'int' 100)))))) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40956 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-08add a new AST dumper interface (E->dump()). This dumps outChris Lattner
the AST in a structural, non-pretty, form useful for understanding the AST. It isn't quite done yet, but is already somewhat useful. For this example: int test(short X, long long Y) { return X < ((100)); } we get (with -parse-ast-dump): int test(short X, long long Y) (CompoundStmt 0x2905ce0 (ReturnStmt 0x2905cd0 (BinaryOperator 0x2905cb0 '<' (ImplicitCastExpr 0x2905ca0 (DeclRefExpr 0x2905c20 Decl='X' 0x2905bb0)) (ParenExpr 0x2905c80 (ParenExpr 0x2905c60 (IntegerLiteral 0x2905c40 100)))))) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40954 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-08Finish implementing __builtin_classify_type()...Steve Naroff
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40951 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-08Add support for __builtin_classify_type(). This builtin function isn't ↵Steve Naroff
"public", however it is used by "tgmath.h" (so we need to support it). It might also come in handy when developing the overloaded function macros for OpenCU. Next check-in will make this an integer constant expression... git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40930 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-05Remove a space from "typeof" printing. It was causing the following error...Steve Naroff
[dylan:clang/test/Parser] admin% ../../../../Debug/bin/clang -parse-ast-check typeof.c Warnings expected but not seen: Line 21: incompatible types assigning 'typeof(*pi) const' to 'int *' Warnings seen but not expected: Line 21: incompatible types assigning 'typeof(*pi) const' to 'int *' Also corrected a typo from my previous commit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40832 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-04Implement codegen for __builtin_choose_expr. For example:Chris Lattner
struct X { int A; }; void foo() { struct X s; int i; i = __builtin_choose_expr(0, s, i); } compiles to: %tmp = load i32* %i ; <i32> [#uses=1] store i32 %tmp, i32* %i wow :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40801 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-03Implement __builtin_choose_expr.Steve Naroff
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40794 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-03Rename AddrLabel and OCUVectorComponent -> AddrLabelExpr and ↵Chris Lattner
OCUVectorElementExpr respectively. This is for consistency with other expr nodes end with *Expr. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40785 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-03add OCUVectorComponent::getNumComponents()Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40778 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-02Add support for encoding a OCUVectorComponent into a single integer.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40768 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-02rename some helpers, have them return the idx of the field being accessed.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40764 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-02Use static methods, which don't require an instance of OCUVectorTypeChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40763 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-02Minor comment improvements.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40760 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-02Tweak to Expr::isIntegerConstantExpr...make sure the result is appropriately ↵Steve Naroff
size for TypesCompatibleExpr's. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40716 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-02Hack Expr::isConstantExpr() to allow for __builtin_types_compatible_p.Steve Naroff
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40705 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-01- Finish hooking up support for __builtin_types_compatible_p().Steve Naroff
- Fix type printing code for recently added TypeOfExpr/TypeOfType. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40700 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-01Add AST/Sema support for __builtin_types_compatible_p (a GNU extension).Steve Naroff
Todo...still need to call the action from the parser... git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40693 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-01Add comments to getTypeOfExpr/getTypeOfType.Steve Naroff
Also add instances of TypeOfExpr/TypeOfType to the Types vector (so we can keep track of them). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40677 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-01Two typeof() related changes...Steve Naroff
- Changed the name of ASTContext::getTypeOfType(Expr*)->getTypeOfExpr(). - Remove FIXME for TypeOfExpr::getAsStringInternal(). This will work fine for printing the AST. It isn't ideal for error diagnostics (since it's more natural to display the expressions type). One "random" (or at least delayed:-) change... - Changed all "ext_typecheck_*" diagnostics from EXTENSION->WARNING. Reason: Since -pedantic is now off (by default), these diagnostics were never being emitted (which is bad). With this change, clang will emit the warning all the time. The only downside (wrt GCC compatibility) is -pedantic-errors will not turn this diagnostics into errors (a "feature" of making tagging them with EXTENSION). When/if this becomes an issue, we can revisit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40676 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-01Print floating point literal values better.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40659 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-31move trivial type predicates inline.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40651 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-31split the rest of the type predicates into pure predicates:Chris Lattner
there is now an isXXXType and a getAsXXXType git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40646 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-31rename isReferenceType to follow the new scheme.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40640 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-31make isPointerType() a pure predicate, rename theChris Lattner
existing one to getAsPointerType() git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40639 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-31Add parsing and AST support for GNU "typeof".Steve Naroff
Many small changes to lot's of files. Still some FIXME's, however the basic support is in place. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40631 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-30Finish up semantic analysis for vector components.Steve Naroff
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40584 91177308-0d34-0410-b5e6-96231b3b80d8