]> granicus.if.org Git - clang/commitdiff
[analyzer] Fix another use of the address of a temporary, like r163402.
authorJordan Rose <jordan_rose@apple.com>
Wed, 12 Sep 2012 22:48:08 +0000 (22:48 +0000)
committerJordan Rose <jordan_rose@apple.com>
Wed, 12 Sep 2012 22:48:08 +0000 (22:48 +0000)
Again, GCC is more aggressive about reusing temporary space than we are,
leading to Release build crashes for this undefined behavior.

PR13710 (though it may not be the only problem there)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163747 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Core/BugReporter.cpp

index 46acea78a8e430982ae2879dd52cccd2c26d5edf..6cbed952c9f7009953a26e219b2ce7abc4d402c8 100644 (file)
@@ -1280,7 +1280,8 @@ static void GenerateExtensivePathDiagnostic(PathDiagnostic& PD,
       }
 
       if (const BlockEntrance *BE = dyn_cast<BlockEntrance>(&P)) {
-        if (const CFGStmt *S = BE->getFirstElement().getAs<CFGStmt>()) {
+        CFGElement First = BE->getFirstElement();
+        if (const CFGStmt *S = First.getAs<CFGStmt>()) {
           const Stmt *stmt = S->getStmt();
           if (IsControlFlowExpr(stmt)) {
             // Add the proper context for '&&', '||', and '?'.