/* { dg-do compile } */ /* { dg-options "-O2 -Warray-bounds" } */ int foo(unsigned int state, unsigned char * p, unsigned int p_len) { static char const pattern[] = "abcd"; static unsigned const pattern_length = sizeof(pattern) - 1; if (p_len == 1) { return state; } if (state < pattern_length && p_len == (pattern_length - state) && (!__builtin_constant_p(p_len) ? __builtin_memcmp(p, pattern + state, p_len) : ((unsigned char*)p)[6] == ((unsigned char*)pattern + state)[6] /* { dg-bogus "array bounds" } */ )) { return 4; } return 1; }