]> granicus.if.org Git - clang/commitdiff
do not bind temporaries to non-const references
authorGabor Greif <ggreif@gmail.com>
Thu, 9 Sep 2010 10:51:37 +0000 (10:51 +0000)
committerGabor Greif <ggreif@gmail.com>
Thu, 9 Sep 2010 10:51:37 +0000 (10:51 +0000)
this fixes all analyser test failures in my gcc34-based
environment

how the cast result could bind to the non-const ref is
somewhat mysterious and remains to be investigated; to
avoid similar miscompilations (by gcc34 only?)

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

lib/Checker/ArrayBoundChecker.cpp
lib/Checker/CStringChecker.cpp
lib/Checker/ReturnPointerRangeChecker.cpp

index 98345bd70375fc0693b892bb707bb1112019aa1a..cf2a2fcf62f3ef0337736276eee9003ed72b93ed 100644 (file)
@@ -51,7 +51,7 @@ void ArrayBoundChecker::VisitLocation(CheckerContext &C, const Stmt *S, SVal l){
     return;
 
   // Get the index of the accessed element.
-  DefinedOrUnknownSVal &Idx = cast<DefinedOrUnknownSVal>(ER->getIndex());
+  DefinedOrUnknownSVal Idx = cast<DefinedOrUnknownSVal>(ER->getIndex());
 
   const GRState *state = C.getState();
 
index 9ea572f90dfb6141271a7616b6edff47db02c3ab..d61fdd437d6edd69d52fd1eeced971d6a150eb52 100644 (file)
@@ -193,7 +193,7 @@ const GRState *CStringChecker::CheckLocation(CheckerContext &C,
   DefinedOrUnknownSVal Size = cast<DefinedOrUnknownSVal>(Extent);
 
   // Get the index of the accessed element.
-  DefinedOrUnknownSVal &Idx = cast<DefinedOrUnknownSVal>(ER->getIndex());
+  DefinedOrUnknownSVal Idx = cast<DefinedOrUnknownSVal>(ER->getIndex());
 
   const GRState *StInBound = state->AssumeInBound(Idx, Size, true);
   const GRState *StOutBound = state->AssumeInBound(Idx, Size, false);
index a9eb5ce1a700828328c82068aa59499a0129cd45..0e7a5cf9d171082ec94ee1374d536b7f6f597667 100644 (file)
@@ -59,7 +59,7 @@ void ReturnPointerRangeChecker::PreVisitReturnStmt(CheckerContext &C,
   if (!ER)
     return;
 
-  DefinedOrUnknownSVal &Idx = cast<DefinedOrUnknownSVal>(ER->getIndex());
+  DefinedOrUnknownSVal Idx = cast<DefinedOrUnknownSVal>(ER->getIndex());
 
   // FIXME: All of this out-of-bounds checking should eventually be refactored
   // into a common place.