aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/CFG.cpp
AgeCommit message (Collapse)Author
2009-07-16Move the source-level CFG from libAST to libAnalysis.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76092 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-03Fix a horrible CFG bug reported in <rdar://problem/7027684>. The wrong successorTed Kremenek
block would get hooked up in some cases when processing empty compound statements. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74743 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-30Key decisions about 'bool' vs '_Bool' to be based on a new flag in langoptions.Chris Lattner
This is simple enough, but then I thought it would be nice to make PrintingPolicy get a LangOptions so that various things can key off "bool" and "C++" independently. This spiraled out of control. There are many fixme's, but I think things are slightly better than they were before. One thing that can be improved: CFG should probably have an ASTContext pointer in it, which would simplify its clients. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74493 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-24Remove unneeded #includes.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74131 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-24Update for LLVM API changes.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74085 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-29Create a new PrintingPolicy class, which we pass down through the ASTDouglas Gregor
printing logic to help customize the output. For now, we use this rather than a special flag to suppress the "struct" when printing "struct X" and to print the Boolean type as "bool" in C++ but "_Bool" in C. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72590 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-05source-level CFG: have the body for the @synchronized start with its own basicTed Kremenek
block. This makes it a little easier for diagnostics generation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71037 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-02Add CFG support for @synchronized. This fixes <rdar://problem/6848820>.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70620 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-02Fix crasher in CFG construction when not properly handling ASTs that containTed Kremenek
expressions not yet properly handled by the CFGBuilder. This failure resulted in a null CFGBlock* being used in rare cases (causing a crash). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70612 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-28CFG: Add "loop back" block for do...while statements.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70284 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-28CFG: 'WhileStmts' needs an extra block to indicate the "loop back" path.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70280 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-28CFG:Ted Kremenek
- Add 'LoopTarget' pointer field to CFGBlock. This records if the block is used as the 'loop back' path back to the head of a loop. - For ForStmt, encode the loop back target as the increment code. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70274 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-07CFG: when there is not continue or break target, mark the CFG as bad.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68533 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-07Remove hack support for @try...@finally in source-level CFGs. The current hackTed Kremenek
had too many false positives in the analyzer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68492 91177308-0d34-0410-b5e6-96231b3b80d8
2009-04-01CFG: For 'if(...) {}' (empty body) construct an empty CFGBlock so that we canTed Kremenek
distinguish between the true and false branches for path-sensitive analyses. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68185 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-30Add partial CFG support for Objective-C exception-handling blocks. We basicallyTed Kremenek
assume that @catch blocks are never executed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68072 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-28some random cleanupsChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67928 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-28rename some methods.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67923 91177308-0d34-0410-b5e6-96231b3b80d8
2009-02-26Fixup spacing.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65519 91177308-0d34-0410-b5e6-96231b3b80d8
2009-02-13Remove DeclGroupOwningRef, since we intend for declarations to be ownedDouglas Gregor
by DeclContexts (always) rather than by statements. DeclContext currently goes out of its way to avoid destroying any Decls that might be owned by a DeclGroupOwningRef. However, in an error-recovery situation, a failure in a declaration statement can cause all of the decls in a DeclGroupOwningRef to be destroyed after they've already be added into the DeclContext. Hence, DeclContext is left with already-destroyed declarations, and bad things happen. This problem was causing failures that showed up as assertions on x86 Linux in test/Parser/objc-forcollection-neg-2.m. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64474 91177308-0d34-0410-b5e6-96231b3b80d8
2009-01-20Remove ScopedDecl, collapsing all of its functionality into Decl, soDouglas Gregor
that every declaration lives inside a DeclContext. Moved several things that don't have names but were ScopedDecls (and, therefore, NamedDecls) to inherit from Decl rather than NamedDecl, including ObjCImplementationDecl and LinkageSpecDecl. Now, we don't store empty DeclarationNames for these things, nor do we try to insert them into DeclContext's lookup structure. The serialization tests are temporarily disabled. We'll re-enable them once we've sorted out the remaining ownership/serialiazation issues between DeclContexts and TranslationUnion, DeclGroups, etc. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62562 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-09Add preliminary CFG support for @throw. We basically treat it like a return ↵Ted Kremenek
statement. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60790 91177308-0d34-0410-b5e6-96231b3b80d8
2008-12-05Introduce basic support for dependent types, type-dependentDouglas Gregor
expressions, and value-dependent expressions. This permits us to parse some template definitions. This is not a complete solution; we're missing type- and value-dependent computations for most of the expression types, and we're missing checks for dependent types and type-dependent expressions throughout Sema. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60615 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-24Fix CFG bug where the 'increment' block for a 'for' statement would not beTed Kremenek
properly reversed once constructed. This fixes PR 3125: http://llvm.org/bugs/show_bug.cgi?id=3125 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59982 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-14Fix CFG construction for ObjCForCollectionStmt: 'element' expression can be ↵Ted Kremenek
anything that evaluates to an lvalue git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59289 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-13Hook up "BodyBlock", not "Block".Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59227 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-13Correctly connect 'continue' and 'break' statements in Objective-C fast ↵Ted Kremenek
enumeration for blocks to the appropriate basic blocks. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59226 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-13Fix bug where the body block of an ObjCForCollectionStmt would not properly ↵Ted Kremenek
get expanded as a series of basic blocks. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59197 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-12ObjCForCollectionStmts are block-level expressions.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59160 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-11Introduce a single AST node SizeOfAlignOfExpr for all sizeof and alignof ↵Sebastian Redl
expressions, both of values and types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59057 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-11Add CFG support for Objective-C 2.0 fast enumeration 'for' statement:Ted Kremenek
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_7_section_2.html#//apple_ref/doc/uid/TP30001163-CH18-SW3 Need to modify GRExprEngine, LiveVariables, and UninitializedValues to understand this construct. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59049 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-07Migrate DeclStmt over to using a DeclGroup instead of a pointer to a ↵Ted Kremenek
ScopedDecl*. This also removes the ugly hack needed in CFG.cpp for subclassing DeclStmt to create a DeclStmt with one Decl*. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57275 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06Use DeclStmt::decl_iterator to walk a group of Decl*'s instead of using the ↵Ted Kremenek
ScopedDecl chain. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57206 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-04Reverse the RHSBlock of LogicalOp && and ||Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57041 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-26Add CFG support for implicit-control flow for VLA size expressions within an ↵Ted Kremenek
SizeOfAlignOfTypeExpr. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56706 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-26Do not create CFGs for functions/methods using blocks (need to add ↵Ted Kremenek
control-flow). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56672 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-26Move VLA processing logic from LiveVariables to CFG construction. This way ↵Ted Kremenek
all dataflow analyses "see" the VLA size expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56655 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-16ProgramPoint now takes the space of two pointers instead of one. This change wasTed Kremenek
motivated because it became clear that the number of subclasses of ProgramPoint would expand and we ran out of bits to represent a pointer variant. As a plus of this change, BlockEdge program points can now be represented explicitly without using a cache of CFGBlock* pairs in CFG. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56245 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-13Patch by Csaba Hruska!Ted Kremenek
"Here is a patch what replaces std::ostream with llvm::raw_ostream. This patch covers the AST library, but ignores Analysis lib." git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56185 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-04Fix CFG construction bug:Ted Kremenek
- Within for loops, 'continue' should jump to a basic block containing the increment code git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55800 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-11More #include cleaningDaniel Dunbar
- Kill unnecessary #includes in .cpp files. This is an automatic sweep so some things removed are actually used, but happen to be included by a previous header. I tried to get rid of the obvious examples and this was the easiest way to trim the #includes in one fell swoop. - We now return to regularly scheduled development. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54632 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-06Cleanup some processing with DeclStmt, and gradually start using the ↵Ted Kremenek
internal BumpPtrAllocator to allocator more of CFG's data structures. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54433 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-06Always construct the BumpPtrAllocator used by CFG as an instance variable.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54429 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-04Nico Weber:Ted Kremenek
"the attached patch fixes some typos, 80 cols violations, etc. in comments." git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54328 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-29Fix one strict-aliasing warning.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51707 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-29- Move ObjC Expresssion AST's from Expr.h => ExprObjC.hSteve Naroff
- #include ExprObjC.h in many places git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51703 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-16Added CFGBlock::hasBinaryBranchTerminator().Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51190 91177308-0d34-0410-b5e6-96231b3b80d8
2008-04-28Bug fix in CFG::getBlockEdgeImpl(): Use a BumpPtrAllocator to allocateTed Kremenek
std::pair<CFGBlock*, CFGBlock*> that have an 8-byte alignment for use with ProgramPoint. This fixes a bug reported by Argiris where using std::set<> on Windows would result in a 4-byte alignment, not an 8-byte alignment. Fixes: <rdar://problem/5892265> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50364 91177308-0d34-0410-b5e6-96231b3b80d8
2008-04-16Added CFGBlock::getTerminatorCondition() to get the Expr* of the condition a ↵Ted Kremenek
block's terminator. Refactored LiveVariables to use getTerminatorCondition() in VisitTerminator(). Bug fix: CFG now computes Block-level expression numbers using information from block terminators. This fixes <rdar://problem/5868189>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49818 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-17Bug fix in CFG construction: VisitCompoundStmt should return the last ↵Ted Kremenek
created block. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48460 91177308-0d34-0410-b5e6-96231b3b80d8