1 /* PR tree-optimization/88800 - Spurious -Werror=array-bounds for non-taken 2 branch 3 { dg-do compile } 4 { dg-options "-O2 -Wall" } */ 5 6 extern void* memmove (void*, const void*, __SIZE_TYPE__); 7 8 struct A 9 { 10 const char *s; 11 int n; 12 }; 13 14 void f (void*); 15 16 struct B 17 { 18 char d[5]; 19 int n; 20 }; 21 22 __attribute__ ((always_inline)) inline void g(struct B * p,struct A a)23g (struct B *p, struct A a) 24 { 25 int i = a.n; 26 if (i <= 5) 27 p->n = i; 28 else { 29 p->n = -1; 30 f (p); 31 } 32 33 if (p->n >= 0) 34 memmove (p->d, a.s, a.n); /* { dg-bogus "\\\[-Warray-bounds" } */ 35 } 36 h(void)37void h (void) 38 { 39 char c[8] = ""; 40 41 struct A a; 42 a.s = c; 43 a.n = 8; 44 45 struct B b; 46 g (&b, a); 47 } 48