================
@@ -40,7 +42,19 @@ void testInlineAsmMemcpyUninit(void)
 {
     int a[10], b[10] = {}, c;
     MyMemcpy(&a[1], &b[1], sizeof(b) - sizeof(b[1]));
-    c = a[0]; // expected-warning{{Assigned value is garbage or undefined}}
+    c = a[0]; // FIXME: should be warning about uninitialized value, but 
invalidateRegions() also
----------------
steakhal wrote:

I suppose it all boils down to what the assembly block does. I don't think 
there is anything fundamentally preventing us refining what gets invalidated 
other than actually parsing and understanding the asm block.

Invalidating everything is a good default choice; however, frequently we can do 
better than that.
IDK how the `MyMemcpy` works in your test, but it could model the invalidation 
similar to how the StreamChecker goes smart about it in 
`tryToInvalidateFReadBufferByElements` 
[here](https://github.com/llvm/llvm-project/blob/2e3c7dbbcbfa37ae83251bb3da388df772680689/clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp#L1108-1147).

https://github.com/llvm/llvm-project/pull/109838
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to