On 01/20/2017 12:49 PM, Martin Liška wrote: > Great, thanks a lot. I'm going to re-trigger asan-bootstrap with your patch. > I'm also adding gcc/testsuite/gcc.dg/asan/use-after-scope-10.c that is a valid > test-case for this issue.
Hi. Unfortunately this way would not work as clobber marks content of the memory as uninitialize is different behavior that just marking a memory can be used (and maybe already contains a value). This shows the problem: #include <string.h> char cc; char ptr[] = "sparta2"; void get(char **x) { *x = ptr; } int main() { char *here = &cc; for (;;) { next_line: if (here == NULL) __builtin_abort(); get (&here); if (strcmp (here, "sparta") == 0) goto next_line; else if (strcmp (here, "sparta2") == 0) break; } } With the patch, DSE would optimize out '*here = &cc;' and thus aborts. The problem is definitely related to goto magic, where we are more defensive in placement of ASAN_MARK(UNPOISON,...). Hope your optimization is still valid for situations w/o artificial ASAN_MARK(UNPOISON,...) placed due to goto magic. Do we still want to do it now, or postponing to GCC 8 would be better option? Thanks, Martin