diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-12-16 07:46:53 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-12-16 07:46:53 +0000 |
commit | 8219b821259e6b3d6980d87760db589b54996579 (patch) | |
tree | ce1c9e66472f4ca6b2a27c6a7097a97df33357aa /clang/lib/Analysis/AnalysisContext.cpp | |
parent | 2115a3f0337a4d731191ed91cbdd06bbcca18a77 (diff) | |
download | bcm5719-llvm-8219b821259e6b3d6980d87760db589b54996579.tar.gz bcm5719-llvm-8219b821259e6b3d6980d87760db589b54996579.zip |
Start migration of static analyzer to using the
implicit lvalue-to-rvalue casts that John McCall
recently introduced. This causes a whole bunch
of logic in the analyzer for handling lvalues
to vanish. It does, however, raise a few issues
in the analyzer w.r.t to modeling various constructs
(e.g., field accesses to compound literals).
The .c/.m analysis test cases that fail are
due to a missing lvalue-to-rvalue cast that
will get introduced into the AST. The .cpp
failures were more than I could investigate in
one go, and the patch was already getting huge.
I have XFAILED some of these tests, and they
should obviously be further investigated.
Some highlights of this patch include:
- CFG no longer requires an lvalue bit for
CFGElements
- StackFrameContext doesn't need an 'asLValue'
flag
- The "VisitLValue" path from GRExprEngine has
been eliminated.
Besides the test case failures (XFAILed), there
are surely other bugs that are fallout from
this change.
llvm-svn: 121960
Diffstat (limited to 'clang/lib/Analysis/AnalysisContext.cpp')
-rw-r--r-- | clang/lib/Analysis/AnalysisContext.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/clang/lib/Analysis/AnalysisContext.cpp b/clang/lib/Analysis/AnalysisContext.cpp index 5307074dce6..4305507c9cb 100644 --- a/clang/lib/Analysis/AnalysisContext.cpp +++ b/clang/lib/Analysis/AnalysisContext.cpp @@ -152,8 +152,7 @@ void LocationContext::ProfileCommon(llvm::FoldingSetNodeID &ID, } void StackFrameContext::Profile(llvm::FoldingSetNodeID &ID) { - Profile(ID, getAnalysisContext(), getParent(), CallSite.getPointer(), - CallSite.getInt(), Block, Index); + Profile(ID, getAnalysisContext(), getParent(), CallSite, Block, Index); } void ScopeContext::Profile(llvm::FoldingSetNodeID &ID) { @@ -189,15 +188,15 @@ LocationContextManager::getLocationContext(AnalysisContext *ctx, const StackFrameContext* LocationContextManager::getStackFrame(AnalysisContext *ctx, const LocationContext *parent, - const Stmt *s, bool asLValue, + const Stmt *s, const CFGBlock *blk, unsigned idx) { llvm::FoldingSetNodeID ID; - StackFrameContext::Profile(ID, ctx, parent, s, asLValue, blk, idx); + StackFrameContext::Profile(ID, ctx, parent, s, blk, idx); void *InsertPos; StackFrameContext *L = cast_or_null<StackFrameContext>(Contexts.FindNodeOrInsertPos(ID, InsertPos)); if (!L) { - L = new StackFrameContext(ctx, parent, s, asLValue, blk, idx); + L = new StackFrameContext(ctx, parent, s, blk, idx); Contexts.InsertNode(L, InsertPos); } return L; |