| /* { dg-do compile } */ |
| /* { dg-options "-fgimple -O -Wmaybe-uninitialized" } */ |
| |
| unsigned int __GIMPLE (ssa,startwith("uninit1")) |
| foo (unsigned int v) |
| { |
| /* Uninit warning here would be bogus, because (16 & 3) == 0 and therefore |
| if v == 16, the uninit value is not used (the use is properly guarded). */ |
| unsigned int undef; /* { dg-bogus "may be used uninitialized" } */ |
| unsigned int _2; |
| unsigned int _9; |
| unsigned int _10; |
| unsigned pred; |
| |
| __BB(2): |
| if (v_4(D) != 16u) |
| goto __BB3; |
| else |
| goto __BB4; |
| |
| /* 'undef' is defined conditionally (under 'v != 16' predicate) */ |
| __BB(3): |
| undef_8 = 8u; |
| goto __BB4; |
| |
| /* An undef value flows into a phi. */ |
| __BB(4): |
| undef_1 = __PHI (__BB2: undef_5(D), __BB3: undef_8); |
| pred = v_4(D) & 3u; |
| if (pred != 0u) |
| goto __BB5; |
| else |
| goto __BB6; |
| |
| /* The phi value is used here (under 'v & 3' predicate). */ |
| __BB(5): |
| _9 = undef_1; |
| goto __BB7; |
| |
| __BB(6): |
| _10 = v_4(D); |
| goto __BB7; |
| |
| __BB(7): |
| _2 = __PHI (__BB5: _9, __BB6: _10); |
| return _2; |
| } |