(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
warn/
Warray-bounds-25.C
/* 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\\\)'" }

}