[PATCH] D28602: [analyzer] Don't dereference the array bound to a reference.

Phabricator via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 12 10:11:03 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL291781: [analyzer] Don't dereference the array value when binding it to a reference. (authored by dergachev).

Changed prior to commit:
  https://reviews.llvm.org/D28602?vs=84097&id=84140#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D28602

Files:
  cfe/trunk/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp
  cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp


Index: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
===================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
@@ -515,8 +515,9 @@
           Init = ASE->getBase()->IgnoreImplicit();
 
         SVal LValue = State->getSVal(Init, stackFrame);
-        if (Optional<Loc> LValueLoc = LValue.getAs<Loc>())
-          InitVal = State->getSVal(*LValueLoc);
+        if (!Field->getType()->isReferenceType())
+          if (Optional<Loc> LValueLoc = LValue.getAs<Loc>())
+            InitVal = State->getSVal(*LValueLoc);
 
         // If we fail to get the value for some reason, use a symbolic value.
         if (InitVal.isUnknownOrUndef()) {
Index: cfe/trunk/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp
===================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp
@@ -253,12 +253,6 @@
   if (!TVR->getValueType()->isReferenceType())
     return;
 
-  // FIXME: This is a hotfix for https://llvm.org/bugs/show_bug.cgi?id=31592
-  // A proper fix is very much necessary. Otherwise we would never normally bind
-  // a NonLoc to a reference.
-  if (V.getAs<NonLoc>())
-    return;
-
   ProgramStateRef State = C.getState();
 
   ProgramStateRef StNonNull, StNull;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28602.84140.patch
Type: text/x-patch
Size: 1421 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170112/e3b040b4/attachment.bin>


More information about the cfe-commits mailing list