diff options
author | Devin Coughlin <dcoughlin@apple.com> | 2016-04-12 00:53:26 +0000 |
---|---|---|
committer | Devin Coughlin <dcoughlin@apple.com> | 2016-04-12 00:53:26 +0000 |
commit | b40d14f3d56e9b0f1bc41f6123586d09ccd6d305 (patch) | |
tree | 872ed39b9b9e3e0fcf309a1b9ddb6df08dc5ea8f /clang | |
parent | 5933eb84d36dc6f5f85507da0d61423387d20b33 (diff) | |
download | bcm5719-llvm-b40d14f3d56e9b0f1bc41f6123586d09ccd6d305.tar.gz bcm5719-llvm-b40d14f3d56e9b0f1bc41f6123586d09ccd6d305.zip |
[analyzer] Fix assertion in ReturnVisitor for body-farm synthesized getters
Don't emit a path note marking the return site if the return statement does not
have a valid location. This fixes an assertion failure I introduced in r265839.
llvm-svn: 266031
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp | 3 | ||||
-rw-r--r-- | clang/test/Analysis/inlining/false-positive-suppression.m | 13 |
2 files changed, 16 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp index e0f014714f7..657d33fa7a3 100644 --- a/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp +++ b/clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp @@ -324,6 +324,9 @@ public: } PathDiagnosticLocation L(Ret, BRC.getSourceManager(), StackFrame); + if (!L.isValid() || !L.asLocation().isValid()) + return nullptr; + return new PathDiagnosticEventPiece(L, Out.str()); } diff --git a/clang/test/Analysis/inlining/false-positive-suppression.m b/clang/test/Analysis/inlining/false-positive-suppression.m index 7be1cb8472f..d9678206c7c 100644 --- a/clang/test/Analysis/inlining/false-positive-suppression.m +++ b/clang/test/Analysis/inlining/false-positive-suppression.m @@ -45,6 +45,8 @@ __attribute__((objc_root_class)) @property(readonly) int *propertyReturningNull; +@property(readonly) int *synthesizedProperty; + @end @implementation SomeClass @@ -72,3 +74,14 @@ void testPropertyReturningNull(SomeClass *sc) { // expected-warning@-2 {{Dereference of null pointer}} #endif } + +void testSynthesizedPropertyReturningNull(SomeClass *sc) { + if (sc.synthesizedProperty) + return; + + int *result = sc.synthesizedProperty; + *result = 1; +#ifndef SUPPRESSED + // expected-warning@-2 {{Dereference of null pointer}} +#endif +} |