(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Warray-bounds-47.c
       1  /* PR middle-end/91830 - Bogus -Warray-bounds on strcpy into a member
       2     of a subobject compiling binutils
       3     { dg-do compile }
       4     { dg-options "-O2 -Wall -Wno-stringop-overflow -ftrack-macro-expansion=0" } */
       5  
       6  extern char* strcpy (char*, const char*);
       7  extern void sink (void*);
       8  
       9  #define S36 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      10  
      11  #define S(N)   (S36 + sizeof (S36) - N - 1)
      12  
      13  /* In the test macro, prevent the strcpy to memcpy transformation
      14     by using a local array initialized with the string literal.  Without
      15     it, GCC transforms the strcpy call with memcpy which (unfortunately)
      16     permits accesses that cross subobject boundaries.  */
      17  #define T(obj, mem, n)				\
      18    do {						\
      19      struct A *pa = &obj;			\
      20      const char a[] = S36;			\
      21      strcpy (pa->mem, a + sizeof a - n - 1);	\
      22      sink (&obj);				\
      23    } while (0)
      24  
      25  
      26  struct A { char a[3]; char b[5]; };
      27  struct B { char c[7]; struct A a; struct A a2[2]; };
      28  
      29  extern struct B b[];
      30  
      31  void array_nowarn (int i)
      32  {
      33    struct B *pb = b;
      34  
      35    T (pb[0].a, a, 0);          // { dg-bogus "\\\[-W" }
      36    T (pb[0].a, a, 1);          // { dg-bogus "\\\[-W" }
      37    T (pb[0].a, a, 2);          // { dg-bogus "\\\[-W" }
      38  
      39    T (pb[1].a, a, 0);          // { dg-bogus "\\\[-W" }
      40    T (pb[1].a, a, 1);          // { dg-bogus "\\\[-W" }
      41    T (pb[1].a, a, 2);          // { dg-bogus "\\\[-W" }
      42  
      43    T (pb[123].a, a, 0);        // { dg-bogus "\\\[-W" }
      44    T (pb[123].a, a, 1);        // { dg-bogus "\\\[-W" }
      45    T (pb[123].a, a, 2);        // { dg-bogus "\\\[-W" }
      46  
      47    T (pb[i].a, a, 0);
      48    T (pb[i].a, a, 1);
      49    T (pb[i].a, a, 2);
      50  
      51  
      52    T (pb[0].a, b, 0);          // { dg-bogus "\\\[-W" }
      53    T (pb[0].a, b, 1);          // { dg-bogus "\\\[-W" }
      54    T (pb[0].a, b, 2);          // { dg-bogus "\\\[-W" }
      55    T (pb[0].a, b, 3);          // { dg-bogus "\\\[-W" }
      56    T (pb[0].a, b, 4);          // { dg-bogus "\\\[-W" }
      57  
      58    T (pb[1].a, b, 0);          // { dg-bogus "\\\[-W" }
      59    T (pb[1].a, b, 1);          // { dg-bogus "\\\[-W" }
      60    T (pb[1].a, b, 2);          // { dg-bogus "\\\[-W" }
      61    T (pb[1].a, b, 3);          // { dg-bogus "\\\[-W" }
      62    T (pb[1].a, b, 4);          // { dg-bogus "\\\[-W" }
      63  
      64    T (pb[123].a, b, 0);        // { dg-bogus "\\\[-W" }
      65    T (pb[123].a, b, 1);        // { dg-bogus "\\\[-W" }
      66    T (pb[123].a, b, 2);        // { dg-bogus "\\\[-W" }
      67    T (pb[123].a, b, 3);        // { dg-bogus "\\\[-W" }
      68    T (pb[123].a, b, 4);        // { dg-bogus "\\\[-W" }
      69  
      70    T (pb[i].a, b, 0);
      71    T (pb[i].a, b, 1);
      72    T (pb[i].a, b, 2);
      73    T (pb[i].a, b, 3);
      74    T (pb[i].a, b, 4);
      75  
      76  
      77    T (pb[0].a2[0], b, 0);      // { dg-bogus "\\\[-W" }
      78    T (pb[0].a2[0], b, 1);      // { dg-bogus "\\\[-W" }
      79    T (pb[0].a2[0], b, 2);      // { dg-bogus "\\\[-W" }
      80    T (pb[0].a2[0], b, 3);      // { dg-bogus "\\\[-W" }
      81    T (pb[0].a2[0], b, 4);      // { dg-bogus "\\\[-W" }
      82  
      83    T (pb[1].a2[0], b, 0);      // { dg-bogus "\\\[-W" }
      84    T (pb[1].a2[0], b, 1);      // { dg-bogus "\\\[-W" }
      85    T (pb[1].a2[0], b, 2);      // { dg-bogus "\\\[-W" }
      86    T (pb[1].a2[0], b, 3);      // { dg-bogus "\\\[-W" }
      87    T (pb[1].a2[0], b, 4);      // { dg-bogus "\\\[-W" }
      88  
      89    T (pb[123].a2[0], b, 0);    // { dg-bogus "\\\[-W" }
      90    T (pb[123].a2[0], b, 1);    // { dg-bogus "\\\[-W" }
      91    T (pb[123].a2[0], b, 2);    // { dg-bogus "\\\[-W" }
      92    T (pb[123].a2[0], b, 3);    // { dg-bogus "\\\[-W" }
      93    T (pb[123].a2[0], b, 4);    // { dg-bogus "\\\[-W" }
      94  
      95    T (pb[123].a2[1], b, 0);    // { dg-bogus "\\\[-W" }
      96    T (pb[123].a2[1], b, 1);    // { dg-bogus "\\\[-W" }
      97    T (pb[123].a2[1], b, 2);    // { dg-bogus "\\\[-W" }
      98    T (pb[123].a2[1], b, 3);    // { dg-bogus "\\\[-W" }
      99    T (pb[123].a2[1], b, 4);    // { dg-bogus "\\\[-W" }
     100  
     101    T (pb[i].a2[0], b, 0);
     102    T (pb[i].a2[0], b, 1);
     103    T (pb[i].a2[0], b, 2);
     104    T (pb[i].a2[0], b, 3);
     105    T (pb[i].a2[0], b, 4);
     106  
     107    T (pb[i].a2[1], b, 0);
     108    T (pb[i].a2[1], b, 1);
     109    T (pb[i].a2[1], b, 2);
     110    T (pb[i].a2[1], b, 3);
     111    T (pb[i].a2[1], b, 4);
     112  }
     113  
     114  void array_warn (int i)
     115  {
     116    struct B *pb = b;
     117  
     118    T (pb[0].a, a, 3);          // { dg-warning "\\\[-Warray-bounds" }
     119    T (pb[0].a, a, 4);          // { dg-warning "\\\[-Warray-bounds" }
     120  
     121    T (pb[1].a, a, 5);          // { dg-warning "\\\[-Warray-bounds" }
     122    T (pb[1].a, a, 6);          // { dg-warning "\\\[-Warray-bounds" }
     123  
     124    T (pb[789].a, a, 5);        // { dg-warning "\\\[-Warray-bounds" }
     125    T (pb[789].a, a, 6);        // { dg-warning "\\\[-Warray-bounds" }
     126  
     127    T (pb[i].a, a, 7);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     128    T (pb[i].a, a, 8);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     129  
     130  
     131    T (pb[0].a, b, 5);          // { dg-warning "\\\[-Warray-bounds" }
     132    T (pb[0].a, b, 6);          // { dg-warning "\\\[-Warray-bounds" }
     133  
     134    T (pb[1].a, b, 5);          // { dg-warning "\\\[-Warray-bounds" }
     135    T (pb[1].a, b, 6);          // { dg-warning "\\\[-Warray-bounds" }
     136  
     137    T (pb[789].a, b, 5);        // { dg-warning "\\\[-Warray-bounds" }
     138    T (pb[789].a, b, 6);        // { dg-warning "\\\[-Warray-bounds" }
     139  
     140    T (pb[i].a, b, 5);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     141    T (pb[i].a, b, 6);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     142  
     143  
     144    T (pb[0].a2[0], b, 5);      // { dg-warning "\\\[-Warray-bounds" }
     145    T (pb[0].a2[0], b, 6);      // { dg-warning "\\\[-Warray-bounds" }
     146  
     147    T (pb[1].a2[0], b, 5);      // { dg-warning "\\\[-Warray-bounds" }
     148    T (pb[1].a2[0], b, 6);      // { dg-warning "\\\[-Warray-bounds" }
     149  
     150    T (pb[789].a2[0], b, 5);    // { dg-warning "\\\[-Warray-bounds" }
     151    T (pb[789].a2[0], b, 6);    // { dg-warning "\\\[-Warray-bounds" }
     152  
     153    T (pb[i].a2[0], b, 5);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     154    T (pb[i].a2[0], b, 6);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     155  
     156    T (pb[0].a2[1], b, 5);      // { dg-warning "\\\[-Warray-bounds" }
     157    T (pb[0].a2[1], b, 6);      // { dg-warning "\\\[-Warray-bounds" }
     158  
     159    T (pb[1].a2[1], b, 5);      // { dg-warning "\\\[-Warray-bounds" }
     160    T (pb[1].a2[1], b, 6);      // { dg-warning "\\\[-Warray-bounds" }
     161  
     162    T (pb[789].a2[1], b, 5);    // { dg-warning "\\\[-Warray-bounds" }
     163    T (pb[789].a2[1], b, 6);    // { dg-warning "\\\[-Warray-bounds" }
     164  
     165    T (pb[i].a2[1], b, 5);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     166    T (pb[i].a2[1], b, 6);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     167  }
     168  
     169  void ptr_nowarn (struct B *pb, int i)
     170  {
     171    T (pb[-123].a, a, 0);       // { dg-bogus "\\\[-W" }
     172    T (pb[-123].a, a, 1);       // { dg-bogus "\\\[-W" }
     173    T (pb[-123].a, a, 2);       // { dg-bogus "\\\[-W" }
     174  
     175    T (pb[-2].a, a, 0);         // { dg-bogus "\\\[-W" }
     176    T (pb[-2].a, a, 1);         // { dg-bogus "\\\[-W" }
     177    T (pb[-2].a, a, 2);         // { dg-bogus "\\\[-W" }
     178  
     179    T (pb[-1].a, a, 0);         // { dg-bogus "\\\[-W" }
     180    T (pb[-1].a, a, 1);         // { dg-bogus "\\\[-W" }
     181    T (pb[-1].a, a, 2);         // { dg-bogus "\\\[-W" }
     182  
     183    T (pb[0].a, a, 0);          // { dg-bogus "\\\[-W" }
     184    T (pb[0].a, a, 1);          // { dg-bogus "\\\[-W" }
     185    T (pb[0].a, a, 2);          // { dg-bogus "\\\[-W" }
     186  
     187    T (pb[1].a, a, 0);          // { dg-bogus "\\\[-W" }
     188    T (pb[1].a, a, 1);          // { dg-bogus "\\\[-W" }
     189    T (pb[1].a, a, 2);          // { dg-bogus "\\\[-W" }
     190  
     191    T (pb[123].a, a, 0);        // { dg-bogus "\\\[-W" }
     192    T (pb[123].a, a, 1);        // { dg-bogus "\\\[-W" }
     193    T (pb[123].a, a, 2);        // { dg-bogus "\\\[-W" }
     194  
     195    T (pb[i].a, a, 0);          // { dg-bogus "\\\[-W" }
     196    T (pb[i].a, a, 1);          // { dg-bogus "\\\[-W" }
     197    T (pb[i].a, a, 2);          // { dg-bogus "\\\[-W" }
     198  
     199  
     200    T (pb[-123].a, b, 0);       // { dg-bogus "\\\[-W" }
     201    T (pb[-123].a, b, 1);       // { dg-bogus "\\\[-W" }
     202    T (pb[-123].a, b, 2);       // { dg-bogus "\\\[-W" }
     203    T (pb[-123].a, b, 3);       // { dg-bogus "\\\[-W" }
     204    T (pb[-123].a, b, 4);       // { dg-bogus "\\\[-W" }
     205  
     206    T (pb[-2].a, b, 0);         // { dg-bogus "\\\[-W" }
     207    T (pb[-2].a, b, 1);         // { dg-bogus "\\\[-W" }
     208    T (pb[-2].a, b, 2);         // { dg-bogus "\\\[-W" }
     209    T (pb[-2].a, b, 3);         // { dg-bogus "\\\[-W" }
     210    T (pb[-2].a, b, 4);         // { dg-bogus "\\\[-W" }
     211  
     212    T (pb[-1].a, b, 0);         // { dg-bogus "\\\[-W" }
     213    T (pb[-1].a, b, 1);         // { dg-bogus "\\\[-W" }
     214    T (pb[-1].a, b, 2);         // { dg-bogus "\\\[-W" }
     215    T (pb[-1].a, b, 3);         // { dg-bogus "\\\[-W" }
     216    T (pb[-1].a, b, 4);         // { dg-bogus "\\\[-W" }
     217  
     218    T (pb[0].a, b, 0);          // { dg-bogus "\\\[-W" }
     219    T (pb[0].a, b, 1);          // { dg-bogus "\\\[-W" }
     220    T (pb[0].a, b, 2);          // { dg-bogus "\\\[-W" }
     221    T (pb[0].a, b, 3);          // { dg-bogus "\\\[-W" }
     222    T (pb[0].a, b, 4);          // { dg-bogus "\\\[-W" }
     223  
     224    T (pb[1].a, b, 0);          // { dg-bogus "\\\[-W" }
     225    T (pb[1].a, b, 1);          // { dg-bogus "\\\[-W" }
     226    T (pb[1].a, b, 2);          // { dg-bogus "\\\[-W" }
     227    T (pb[1].a, b, 3);          // { dg-bogus "\\\[-W" }
     228    T (pb[1].a, b, 4);          // { dg-bogus "\\\[-W" }
     229  
     230    T (pb[123].a, b, 0);        // { dg-bogus "\\\[-W" }
     231    T (pb[123].a, b, 1);        // { dg-bogus "\\\[-W" }
     232    T (pb[123].a, b, 2);        // { dg-bogus "\\\[-W" }
     233    T (pb[123].a, b, 3);        // { dg-bogus "\\\[-W" }
     234    T (pb[123].a, b, 4);        // { dg-bogus "\\\[-W" }
     235  
     236    T (pb[i].a, b, 0);
     237    T (pb[i].a, b, 1);
     238    T (pb[i].a, b, 2);
     239    T (pb[i].a, b, 3);
     240    T (pb[i].a, b, 4);
     241  
     242  
     243    T (pb[-123].a2[0], b, 0);   // { dg-bogus "\\\[-W" }
     244    T (pb[-123].a2[0], b, 1);   // { dg-bogus "\\\[-W" }
     245    T (pb[-123].a2[0], b, 2);   // { dg-bogus "\\\[-W" }
     246    T (pb[-123].a2[0], b, 3);   // { dg-bogus "\\\[-W" }
     247    T (pb[-123].a2[0], b, 4);   // { dg-bogus "\\\[-W" }
     248  
     249    T (pb[-2].a2[0], b, 0);     // { dg-bogus "\\\[-W" }
     250    T (pb[-2].a2[0], b, 1);     // { dg-bogus "\\\[-W" }
     251    T (pb[-2].a2[0], b, 2);     // { dg-bogus "\\\[-W" }
     252    T (pb[-2].a2[0], b, 3);     // { dg-bogus "\\\[-W" }
     253    T (pb[-2].a2[0], b, 4);     // { dg-bogus "\\\[-W" }
     254  
     255    T (pb[-1].a2[0], b, 0);     // { dg-bogus "\\\[-W" }
     256    T (pb[-1].a2[0], b, 1);     // { dg-bogus "\\\[-W" }
     257    T (pb[-1].a2[0], b, 2);     // { dg-bogus "\\\[-W" }
     258    T (pb[-1].a2[0], b, 3);     // { dg-bogus "\\\[-W" }
     259    T (pb[-1].a2[0], b, 4);     // { dg-bogus "\\\[-W" }
     260  
     261    T (pb[0].a2[0], b, 0);      // { dg-bogus "\\\[-W" }
     262    T (pb[0].a2[0], b, 1);      // { dg-bogus "\\\[-W" }
     263    T (pb[0].a2[0], b, 2);      // { dg-bogus "\\\[-W" }
     264    T (pb[0].a2[0], b, 3);      // { dg-bogus "\\\[-W" }
     265    T (pb[0].a2[0], b, 4);      // { dg-bogus "\\\[-W" }
     266  
     267    T (pb[1].a2[0], b, 0);      // { dg-bogus "\\\[-W" }
     268    T (pb[1].a2[0], b, 1);      // { dg-bogus "\\\[-W" }
     269    T (pb[1].a2[0], b, 2);      // { dg-bogus "\\\[-W" }
     270    T (pb[1].a2[0], b, 3);      // { dg-bogus "\\\[-W" }
     271    T (pb[1].a2[0], b, 4);      // { dg-bogus "\\\[-W" }
     272  
     273    T (pb[123].a2[0], b, 0);    // { dg-bogus "\\\[-W" }
     274    T (pb[123].a2[0], b, 1);    // { dg-bogus "\\\[-W" }
     275    T (pb[123].a2[0], b, 2);    // { dg-bogus "\\\[-W" }
     276    T (pb[123].a2[0], b, 3);    // { dg-bogus "\\\[-W" }
     277    T (pb[123].a2[0], b, 4);    // { dg-bogus "\\\[-W" }
     278  
     279    T (pb[i].a2[0], b, 0);
     280    T (pb[i].a2[0], b, 1);
     281    T (pb[i].a2[0], b, 2);
     282    T (pb[i].a2[0], b, 3);
     283    T (pb[i].a2[0], b, 4);
     284  
     285    T (pb[-123].a2[1], b, 0);   // { dg-bogus "\\\[-W" }
     286    T (pb[-123].a2[1], b, 1);   // { dg-bogus "\\\[-W" }
     287    T (pb[-123].a2[1], b, 2);   // { dg-bogus "\\\[-W" }
     288    T (pb[-123].a2[1], b, 3);   // { dg-bogus "\\\[-W" }
     289    T (pb[-123].a2[1], b, 4);   // { dg-bogus "\\\[-W" }
     290  
     291    T (pb[-2].a2[1], b, 0);     // { dg-bogus "\\\[-W" }
     292    T (pb[-2].a2[1], b, 1);     // { dg-bogus "\\\[-W" }
     293    T (pb[-2].a2[1], b, 2);     // { dg-bogus "\\\[-W" }
     294    T (pb[-2].a2[1], b, 3);     // { dg-bogus "\\\[-W" }
     295    T (pb[-2].a2[1], b, 4);     // { dg-bogus "\\\[-W" }
     296  
     297    T (pb[-1].a2[1], b, 0);     // { dg-bogus "\\\[-W" }
     298    T (pb[-1].a2[1], b, 1);     // { dg-bogus "\\\[-W" }
     299    T (pb[-1].a2[1], b, 2);     // { dg-bogus "\\\[-W" }
     300    T (pb[-1].a2[1], b, 3);     // { dg-bogus "\\\[-W" }
     301    T (pb[-1].a2[1], b, 4);     // { dg-bogus "\\\[-W" }
     302  
     303    T (pb[0].a2[1], b, 0);      // { dg-bogus "\\\[-W" }
     304    T (pb[0].a2[1], b, 1);      // { dg-bogus "\\\[-W" }
     305    T (pb[0].a2[1], b, 2);      // { dg-bogus "\\\[-W" }
     306    T (pb[0].a2[1], b, 3);      // { dg-bogus "\\\[-W" }
     307    T (pb[0].a2[1], b, 4);      // { dg-bogus "\\\[-W" }
     308  
     309    T (pb[1].a2[1], b, 0);      // { dg-bogus "\\\[-W" }
     310    T (pb[1].a2[1], b, 1);      // { dg-bogus "\\\[-W" }
     311    T (pb[1].a2[1], b, 2);      // { dg-bogus "\\\[-W" }
     312    T (pb[1].a2[1], b, 3);      // { dg-bogus "\\\[-W" }
     313    T (pb[1].a2[1], b, 4);      // { dg-bogus "\\\[-W" }
     314  
     315    T (pb[123].a2[1], b, 0);    // { dg-bogus "\\\[-W" }
     316    T (pb[123].a2[1], b, 1);    // { dg-bogus "\\\[-W" }
     317    T (pb[123].a2[1], b, 2);    // { dg-bogus "\\\[-W" }
     318    T (pb[123].a2[1], b, 3);    // { dg-bogus "\\\[-W" }
     319    T (pb[123].a2[1], b, 4);    // { dg-bogus "\\\[-W" }
     320  
     321    T (pb[i].a2[1], b, 0);
     322    T (pb[i].a2[1], b, 1);
     323    T (pb[i].a2[1], b, 2);
     324    T (pb[i].a2[1], b, 3);
     325    T (pb[i].a2[1], b, 4);
     326  
     327    T (pb[i].a2[i], b, 0);
     328    T (pb[i].a2[i], b, 1);
     329    T (pb[i].a2[i], b, 2);
     330    T (pb[i].a2[i], b, 3);
     331    T (pb[i].a2[i], b, 4);
     332  }
     333  
     334  void ptr_warn (struct B *pb, int i)
     335  {
     336    T (pb[-987].a, a, 8);       // { dg-warning "\\\[-Warray-bounds" }
     337    T (pb[-654].a, a, 7);       // { dg-warning "\\\[-Warray-bounds" }
     338  
     339    T (pb[-2].a, a, 6);         // { dg-warning "\\\[-Warray-bounds" }
     340    T (pb[-2].a, a, 5);         // { dg-warning "\\\[-Warray-bounds" }
     341  
     342    T (pb[-1].a, a, 3);         // { dg-warning "\\\[-Warray-bounds" }
     343    T (pb[-1].a, a, 4);         // { dg-warning "\\\[-Warray-bounds" }
     344  
     345    T (pb[0].a, a, 3);          // { dg-warning "\\\[-Warray-bounds" }
     346    T (pb[0].a, a, 4);          // { dg-warning "\\\[-Warray-bounds" }
     347  
     348    T (pb[1].a, a, 5);          // { dg-warning "\\\[-Warray-bounds" }
     349    T (pb[1].a, a, 6);          // { dg-warning "\\\[-Warray-bounds" }
     350  
     351    T (pb[789].a, a, 7);        // { dg-warning "\\\[-Warray-bounds" }
     352    T (pb[789].a, a, 8);        // { dg-warning "\\\[-Warray-bounds" }
     353  
     354    T (pb[i].a, a, 3);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     355    T (pb[i].a, a, 4);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     356    T (pb[i].a, a, 5);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     357  
     358  
     359    T (pb[-987].a, b, 10);      // { dg-warning "\\\[-Warray-bounds" }
     360    T (pb[-654].a, b, 9);       // { dg-warning "\\\[-Warray-bounds" }
     361  
     362    T (pb[-2].a, b, 8);         // { dg-warning "\\\[-Warray-bounds" }
     363    T (pb[-2].a, b, 7);         // { dg-warning "\\\[-Warray-bounds" }
     364  
     365    T (pb[-1].a, b, 6);         // { dg-warning "\\\[-Warray-bounds" }
     366    T (pb[-1].a, b, 5);         // { dg-warning "\\\[-Warray-bounds" }
     367  
     368    T (pb[0].a, b, 5);          // { dg-warning "\\\[-Warray-bounds" }
     369    T (pb[0].a, b, 6);          // { dg-warning "\\\[-Warray-bounds" }
     370  
     371    T (pb[1].a, b, 7);          // { dg-warning "\\\[-Warray-bounds" }
     372    T (pb[1].a, b, 8);          // { dg-warning "\\\[-Warray-bounds" }
     373  
     374    T (pb[789].a, b, 9);        // { dg-warning "\\\[-Warray-bounds" }
     375    T (pb[789].a, b, 10);       // { dg-warning "\\\[-Warray-bounds" }
     376  
     377    T (pb[i].a, b, 5);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     378    T (pb[i].a, b, 6);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     379    T (pb[i].a, b, 7);          // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     380  
     381  
     382    T (pb[-987].a2[0], b, 10);  // { dg-warning "\\\[-Warray-bounds" }
     383    T (pb[-654].a2[0], b, 9);   // { dg-warning "\\\[-Warray-bounds" }
     384  
     385    T (pb[-2].a2[0], b, 8);     // { dg-warning "\\\[-Warray-bounds" }
     386    T (pb[-2].a2[0], b, 7);     // { dg-warning "\\\[-Warray-bounds" }
     387  
     388    T (pb[-1].a2[0], b, 6);     // { dg-warning "\\\[-Warray-bounds" }
     389    T (pb[-1].a2[0], b, 5);     // { dg-warning "\\\[-Warray-bounds" }
     390  
     391    T (pb[0].a2[0], b, 5);      // { dg-warning "\\\[-Warray-bounds" }
     392    T (pb[0].a2[0], b, 6);      // { dg-warning "\\\[-Warray-bounds" }
     393  
     394    T (pb[1].a2[0], b, 7);      // { dg-warning "\\\[-Warray-bounds" }
     395    T (pb[1].a2[0], b, 8);      // { dg-warning "\\\[-Warray-bounds" }
     396  
     397    T (pb[789].a2[0], b, 9);    // { dg-warning "\\\[-Warray-bounds" }
     398    T (pb[789].a2[0], b, 10);   // { dg-warning "\\\[-Warray-bounds" }
     399  
     400    T (pb[i].a2[0], b, 5);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     401    T (pb[i].a2[0], b, 6);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     402    T (pb[i].a2[0], b, 7);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     403  
     404    T (pb[-987].a2[1], b, 10);  // { dg-warning "\\\[-Warray-bounds" }
     405    T (pb[-654].a2[1], b, 9);   // { dg-warning "\\\[-Warray-bounds" }
     406  
     407    T (pb[-2].a2[1], b, 8);     // { dg-warning "\\\[-Warray-bounds" }
     408    T (pb[-2].a2[1], b, 7);     // { dg-warning "\\\[-Warray-bounds" }
     409  
     410    T (pb[-1].a2[1], b, 6);     // { dg-warning "\\\[-Warray-bounds" }
     411    T (pb[-1].a2[1], b, 5);     // { dg-warning "\\\[-Warray-bounds" }
     412  
     413    T (pb[0].a2[1], b, 5);      // { dg-warning "\\\[-Warray-bounds" }
     414    T (pb[0].a2[1], b, 6);      // { dg-warning "\\\[-Warray-bounds" }
     415  
     416    T (pb[1].a2[1], b, 7);      // { dg-warning "\\\[-Warray-bounds" }
     417    T (pb[1].a2[1], b, 8);      // { dg-warning "\\\[-Warray-bounds" }
     418  
     419    T (pb[789].a2[1], b, 9);    // { dg-warning "\\\[-Warray-bounds" }
     420    T (pb[789].a2[1], b, 10);   // { dg-warning "\\\[-Warray-bounds" }
     421  
     422    T (pb[i].a2[1], b, 5);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     423    T (pb[i].a2[1], b, 6);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     424    T (pb[i].a2[1], b, 7);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     425  
     426    T (pb[i].a2[i], b, 5);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     427    T (pb[i].a2[i], b, 6);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     428    T (pb[i].a2[i], b, 7);      // { dg-warning "\\\[-Warray-bounds" "pr91848" { xfail *-*-* } }
     429  }