On Wed, Nov 02, 2016 at 11:10:53AM +0100, Jakub Jelinek wrote: > On Wed, Nov 02, 2016 at 10:59:26AM +0100, Jakub Jelinek wrote: > > > Which is gimplified as: > > > > > > int * ptr; > > > > > > switch (argc) <default: <D.2575>, case 1: <D.2573>> > > > { > > > int a; > > > > > > try > > > { > > > ASAN_MARK (2, &a, 4); > > > <D.2573>: > > > goto <D.2574>; > > > <D.2575>: > > > ptr = &a; > > > goto <D.2574>; > > > } > > > finally > > > { > > > ASAN_MARK (1, &a, 4); > > > } > > > Shouldn't there be also ASAN_MARK on the implicit gotos from the switch > > statement? Otherwise, consider this being done in a loop, after the first > > iteration you ASAN_MARK (1, &a, 4) (i.e. poison), then you iterate say with > > args 1 and have in case 1: a = 0;, won't that trigger runtime error? > > Wonder if for the variables declared inside of switch body, because we don't > care about uses before scope, it wouldn't be more efficient to arrange for > int *p, *q, *r; > switch (x) > { > int a; > case 1: > p = &a; > a = 5; > break; > int b; > case 2: > int c; > q = &b; > r = &c; > b = 3; > c = 4; > break; > } > to effectively ASAN_MARK (2, &a, 4); ASAN_MARK (2, &b, 4); ASAN_MARK (2, &c, > 4); > before the GIMPLE_SWITCH, instead of unpoisoning them on every case label > where they might be in scope. Though, of course, at least until lower pass > that is quite ugly, because it would refer to "not yet declared" variables. > Perhaps we'd need to move the ASAN_MARK and GIMPLE_SWITCH (but of course not > the expression evaluation of the switch control expression) inside of the > switches' GIMPLE_BIND.
So is there anything I should do wrt -Wswitch-unreachable? Marek