https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110228

--- Comment #13 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The big question is this code here:
```
unsigned a[4] = {1,1,1,1};


__attribute__((noipa))
void sink(int){}
__attribute__((noipa))
static void bug(unsigned & p, unsigned *t, int n) {
      bool LookupFlags ;

    for(int i = 0; i < n; i++) {
        unsigned v = t[i];
      if (v == 0)
        LookupFlags = 0;
     else {
        bool t = v == 1;

        LookupFlags = LookupFlags | t;
     }
     sink(LookupFlags);
       p = LookupFlags;
    }
}


int main() {
    unsigned r = 42;
    bug(r,a, sizeof(a)/sizeof(a[0]));
    __builtin_printf("%u\n", r);
    if (r != 1) __builtin_abort();
}
```
has undefined behavior in it? Right now we remove the whole `!= 0` if we use
with -O2.

Reply via email to