[PATCH] D45241: [analyzer] Invalidate union regions properly. Don't hesitate to load the default binding later.
Phabricator via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri May 4 15:23:05 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rC331563: [analyzer] Invalidate union regions properly. Don't hesitate to load later. (authored by dergachev, committed by ).
Herald added a subscriber: baloghadamsoftware.
Repository:
rC Clang
https://reviews.llvm.org/D45241
Files:
lib/StaticAnalyzer/Core/RegionStore.cpp
test/Analysis/unions.cpp
Index: test/Analysis/unions.cpp
===================================================================
--- test/Analysis/unions.cpp
+++ test/Analysis/unions.cpp
@@ -79,8 +79,7 @@
IntOrString vv;
vv.i = 5;
uu = vv;
- // FIXME: Should be true.
- clang_analyzer_eval(uu.i == 5); // expected-warning{{UNKNOWN}}
+ clang_analyzer_eval(uu.i == 5); // expected-warning{{TRUE}}
}
void testInvalidation() {
@@ -106,3 +105,20 @@
clang_analyzer_eval(uu.s[0] == 'a'); // expected-warning{{UNKNOWN}}
}
}
+
+namespace assume_union_contents {
+union U {
+ int x;
+};
+
+U get();
+
+void test() {
+ U u = get();
+ int y = 0;
+ if (u.x)
+ y = 1;
+ if (u.x)
+ y = 1 / y; // no-warning
+}
+} // end namespace assume_union_contents
Index: lib/StaticAnalyzer/Core/RegionStore.cpp
===================================================================
--- lib/StaticAnalyzer/Core/RegionStore.cpp
+++ lib/StaticAnalyzer/Core/RegionStore.cpp
@@ -230,11 +230,6 @@
}
Optional<SVal> RegionBindingsRef::getDefaultBinding(const MemRegion *R) const {
- if (R->isBoundable())
- if (const TypedValueRegion *TR = dyn_cast<TypedValueRegion>(R))
- if (TR->getValueType()->isUnionType())
- return UnknownVal();
-
return Optional<SVal>::create(lookup(R, BindingKey::Default));
}
@@ -1099,7 +1094,7 @@
return;
}
- if (T->isStructureOrClassType()) {
+ if (T->isRecordType()) {
// Invalidate the region by setting its default value to
// conjured symbol. The type of the symbol is irrelevant.
DefinedOrUnknownSVal V = svalBuilder.conjureSymbolVal(baseR, Ex, LCtx,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45241.145310.patch
Type: text/x-patch
Size: 1622 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180504/25df9935/attachment-0001.bin>
More information about the cfe-commits
mailing list