[cfe-commits] r164875 - in /cfe/trunk: lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp test/Analysis/array-struct-region.cpp test/Analysis/ctor-inlining.mm

Jordan Rose jordan_rose at apple.com
Fri Sep 28 18:36:42 PDT 2012


Author: jrose
Date: Fri Sep 28 20:36:42 2012
New Revision: 164875

URL: http://llvm.org/viewvc/llvm-project?rev=164875&view=rev
Log:
Revert "[analyzer] Handle inlined constructors for rvalue temporaries correctly."

This reverts commit 580cd17f256259f39a382e967173f34d68e73859.

Modified:
    cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
    cfe/trunk/test/Analysis/array-struct-region.cpp
    cfe/trunk/test/Analysis/ctor-inlining.mm

Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp?rev=164875&r1=164874&r2=164875&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp Fri Sep 28 20:36:42 2012
@@ -160,14 +160,7 @@
         svalBuilder.getCXXThis(CCE->getConstructor()->getParent(), calleeCtx);
       SVal ThisV = state->getSVal(This);
 
-      // If the constructed object is a prvalue, get its bindings.
-      // Note that we have to be careful here because constructors embedded
-      // in DeclStmts are not marked as lvalues.
-      if (!CCE->isGLValue())
-        if (const MemRegion *MR = ThisV.getAsRegion())
-          if (isa<CXXTempObjectRegion>(MR))
-            ThisV = state->getSVal(cast<Loc>(ThisV));
-
+      // Always bind the region to the CXXConstructExpr.
       state = state->BindExpr(CCE, callerCtx, ThisV);
     }
   }

Modified: cfe/trunk/test/Analysis/array-struct-region.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/array-struct-region.cpp?rev=164875&r1=164874&r2=164875&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/array-struct-region.cpp (original)
+++ cfe/trunk/test/Analysis/array-struct-region.cpp Fri Sep 28 20:36:42 2012
@@ -61,6 +61,12 @@
 
 void testArgument() {
   clang_analyzer_eval(getConstrainedField(getS()) == 42); // expected-warning{{TRUE}}
+#if __cplusplus
+  // FIXME: Passing the struct by value seems to be confusing C++.
+  // Possibly related to <rdar://problem/12137950>.
+  // expected-warning at -4{{UNKNOWN}}
+#endif
+
   clang_analyzer_eval(getAssignedField(getS()) == 42); // expected-warning{{TRUE}}
 }
 

Modified: cfe/trunk/test/Analysis/ctor-inlining.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/ctor-inlining.mm?rev=164875&r1=164874&r2=164875&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/ctor-inlining.mm (original)
+++ cfe/trunk/test/Analysis/ctor-inlining.mm Fri Sep 28 20:36:42 2012
@@ -103,17 +103,3 @@
       return;
   }
 }
-
-
-namespace ConstructorUsedAsRValue {
-  using TemporaryConstructor::BoolWrapper;
-
-  bool extractValue(BoolWrapper b) {
-    return b.value;
-  }
-
-  void test() {
-    bool result = extractValue(BoolWrapper());
-    clang_analyzer_eval(result); // expected-warning{{TRUE}}
-  }
-}





More information about the cfe-commits mailing list