diff options
| author | Ted Kremenek <kremenek@apple.com> | 2010-03-30 18:24:54 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2010-03-30 18:24:54 +0000 |
| commit | 4be6a758840e24cabd0766aac573857127f23a0b (patch) | |
| tree | 008299eed4e60edbb2621be61c4bc5664cce8a6a | |
| parent | 5cab26d058d3181ebdf1dbb9411c33229d1842cf (diff) | |
| download | bcm5719-llvm-4be6a758840e24cabd0766aac573857127f23a0b.tar.gz bcm5719-llvm-4be6a758840e24cabd0766aac573857127f23a0b.zip | |
Change the analyzer to recognize (but ignore) assignments to isa. Fixes PR 6302.
llvm-svn: 99904
| -rw-r--r-- | clang/lib/Checker/GRExprEngine.cpp | 5 | ||||
| -rw-r--r-- | clang/test/Analysis/misc-ps-region-store.m | 10 |
2 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/Checker/GRExprEngine.cpp b/clang/lib/Checker/GRExprEngine.cpp index ae4c5fe3c12..1afe0917f1c 100644 --- a/clang/lib/Checker/GRExprEngine.cpp +++ b/clang/lib/Checker/GRExprEngine.cpp @@ -897,6 +897,11 @@ void GRExprEngine::VisitLValue(Expr* Ex, ExplodedNode* Pred, return; } + case Stmt::ObjCIsaExprClass: + // FIXME: Do something more intelligent with 'x->isa = ...'. + // For now, just ignore the assignment. + return; + case Stmt::ObjCPropertyRefExprClass: case Stmt::ObjCImplicitSetterGetterRefExprClass: // FIXME: Property assignments are lvalues, but not really "locations". diff --git a/clang/test/Analysis/misc-ps-region-store.m b/clang/test/Analysis/misc-ps-region-store.m index 898a33efe12..b95d82f7633 100644 --- a/clang/test/Analysis/misc-ps-region-store.m +++ b/clang/test/Analysis/misc-ps-region-store.m @@ -910,3 +910,13 @@ int rdar_7770737_pos(void) struct rdar_7770737_s f = { .p = (intptr_t)&x }; return x; // expected-warning{{Undefined or garbage value returned to caller}} } + +//===----------------------------------------------------------------------===// +// Test handling of the implicit 'isa' field. For now we don't do anything +// interesting. +//===----------------------------------------------------------------------===// + +void pr6302(id x, Class y) { + // This previously crashed the analyzer (reported in PR 6302) + x->isa = y; +} |

