[PATCH] D28602: [analyzer] Don't dereference the array bound to a reference.
Artem Dergachev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 12 03:20:35 PST 2017
NoQ created this revision.
NoQ added reviewers: zaks.anna, dcoughlin, xazax.hun, a.sidorin.
NoQ added a subscriber: cfe-commits.
An attempt to fix pr31592 (https://llvm.org/bugs/show_bug.cgi?id=31592), more sensible than what i did in the hot pre-4.0-release fix in r291754 (http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20170109/182399.html), which this patch reverts.
That's the place where we model member array initializers, and i'm adding a special case for reference-to-array initializers.
https://reviews.llvm.org/D28602
Files:
lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp
lib/StaticAnalyzer/Core/ExprEngine.cpp
Index: lib/StaticAnalyzer/Core/ExprEngine.cpp
===================================================================
--- lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ 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: lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp
===================================================================
--- lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp
+++ 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.84097.patch
Type: text/x-patch
Size: 1361 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170112/5ad4cc3a/attachment.bin>
More information about the cfe-commits
mailing list