| /* PR middle-end/101601 - [12 Regression] -Warray-bounds triggers error: |
| arrays of functions are not meaningful |
| { dg-do compile } |
| { dg-options "-O2 -Wall" } */ |
| |
| typedef void Fvv (void); |
| |
| extern Fvv* pf; // { dg-message "'pf'" } |
| |
| void f (...); |
| |
| void test_funptr (void) |
| { |
| f (&pf); |
| f (&pf + 1); |
| f (&pf + 2); // { dg-warning "subscript 2 is outside array bounds of 'void \\\(\\\* ?\\\[1]\\\)\\\(\\\)'" } |
| } |
| |
| typedef int Fii_ (int, ...); |
| |
| extern Fii_* pfa[3]; // { dg-message "'pfa'" } |
| |
| void test_funptr_array (void) |
| { |
| f (pfa); |
| f (pfa + 1); |
| f (pfa + 2); |
| f (pfa + 3); |
| f (pfa + 4); // { dg-warning "subscript 4 is outside array bounds of 'int \\\(\\\* ?\\\[3]\\\)\\\(int, ...\\\)'" } |
| } |
| |
| |
| struct A; |
| typedef void (A::*MFvv)(void); |
| |
| MFvv pmf; |
| |
| void test_memfunptr (void) |
| { |
| f (&pmf); |
| f (&pmf + 1); |
| f (&pmf + 2); // { dg-warning "subscript 2 is outside array bounds of 'void \\\(A::\\\* ?\\\[1]\\\)\\\(\\\)'" } |
| } |
| |
| |
| typedef int (A::*MFii)(int); |
| |
| MFii pmfa[4]; |
| |
| void test_memfunptr_array (void) |
| { |
| f (pmfa); |
| f (pmfa + 1); |
| f (pmfa + 2); |
| f (pmfa + 3); |
| f (pmfa + 4); |
| f (pmfa + 5); // { dg-warning "subscript 5 is outside array bounds of 'int \\\(A::\\\* ?\\\[4]\\\)\\\(int\\\)'" } |
| |
| } |