NoQ added a comment.

Yay thanks!

I think some cornercases would need to be dealt with.



================
Comment at: lib/StaticAnalyzer/Core/RegionStore.cpp:1650
+
+            // If there is a list, but no init, it must be zero.
+            if (i >= InitList->getNumInits())
----------------
NoQ wrote:
> Would this work correctly if the element is not of an integral or enumeration 
> type? I think this needs an explicit check.
What if we have an out-of-bounds access to a variable-length array? I don't 
think it'd yield zero.


================
Comment at: lib/StaticAnalyzer/Core/RegionStore.cpp:1650-1652
+            // If there is a list, but no init, it must be zero.
+            if (i >= InitList->getNumInits())
+              return svalBuilder.makeZeroVal(R->getElementType());
----------------
Would this work correctly if the element is not of an integral or enumeration 
type? I think this needs an explicit check.


================
Comment at: lib/StaticAnalyzer/Core/RegionStore.cpp:1733
+          } else {
+            return svalBuilder.makeZeroVal(Ty);
+          }
----------------
Same: would this work correctly if the field is not of an integral or 
enumeration type?


================
Comment at: test/Analysis/initialization.c:3
+
+void clang_analyzer_dump(int);
 
----------------
We try to avoid using `dump()` on tests because it makes tests test the dump 
syntax, which isn't the point.

For checking constants, it's easier to do something like 
`clang_analyzer_eval(parr[i] == 2); // expected-warning{{TRUE}}`.

For finding undefined values, you can enable `core.uninitialized` checkers and 
receive warnings when the argument of `clang_analyzer_eval` is an uninitialized 
value. Or just increment the value.


Repository:
  rC Clang

https://reviews.llvm.org/D46823



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to