[PATCH] D41478: [analyzer] Fix zero-initialization of stack VLAs under ARC.
Phabricator via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 21 10:44:01 PST 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rC321290: [analyzer] Fix zero-initialization of stack VLAs under ObjC ARC. (authored by dergachev, committed by ).
Repository:
rC Clang
https://reviews.llvm.org/D41478
Files:
lib/StaticAnalyzer/Core/RegionStore.cpp
test/Analysis/arc-zero-init.m
Index: test/Analysis/arc-zero-init.m
===================================================================
--- test/Analysis/arc-zero-init.m
+++ test/Analysis/arc-zero-init.m
@@ -0,0 +1,46 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s
+// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify -fobjc-arc %s
+
+#if __has_feature(objc_arc)
+// expected-no-diagnostics
+#endif
+
+ at interface SomeClass
+ at end
+
+void simpleStrongPointerValue() {
+ SomeClass *x;
+ if (x) {}
+#if !__has_feature(objc_arc)
+// expected-warning at -2{{Branch condition evaluates to a garbage value}}
+#endif
+}
+
+void simpleArray() {
+ SomeClass *vlaArray[5];
+
+ if (vlaArray[0]) {}
+#if !__has_feature(objc_arc)
+// expected-warning at -2{{Branch condition evaluates to a garbage value}}
+#endif
+}
+
+void variableLengthArray() {
+ int count = 1;
+ SomeClass * vlaArray[count];
+
+ if (vlaArray[0]) {}
+#if !__has_feature(objc_arc)
+ // expected-warning at -2{{Branch condition evaluates to a garbage value}}
+#endif
+}
+
+void variableLengthArrayWithExplicitStrongAttribute() {
+ int count = 1;
+ __attribute__((objc_ownership(strong))) SomeClass * vlaArray[count];
+
+ if (vlaArray[0]) {}
+#if !__has_feature(objc_arc)
+ // expected-warning at -2{{Branch condition evaluates to a garbage value}}
+#endif
+}
Index: lib/StaticAnalyzer/Core/RegionStore.cpp
===================================================================
--- lib/StaticAnalyzer/Core/RegionStore.cpp
+++ lib/StaticAnalyzer/Core/RegionStore.cpp
@@ -2132,9 +2132,10 @@
NewB = bind(NewB, loc::MemRegionVal(ER), *VI);
}
- // If the init list is shorter than the array length, set the
- // array default value.
- if (Size.hasValue() && i < Size.getValue())
+ // If the init list is shorter than the array length (or the array has
+ // variable length), set the array default value. Values that are already set
+ // are not overwritten.
+ if (!Size.hasValue() || i < Size.getValue())
NewB = setImplicitDefaultValue(NewB, R, ElementTy);
return NewB;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D41478.127913.patch
Type: text/x-patch
Size: 2043 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20171221/c19fc451/attachment.bin>
More information about the cfe-commits
mailing list