1  /* PR middle-end/100307 - spurious -Wplacement-new with negative pointer
       2     offset
       3     { dg-do compile }
       4     { dg-options "-O0 -Wall" } */
       5  
       6  extern int sprintf (char*, const char*, ...);
       7  
       8  char a[4];
       9  
      10  void nowarn_1m1 ()
      11  {
      12    char *p = a + 1;
      13    sprintf (p - 1, "%i", 123);   // { dg-bogus "-Wformat-overflow" }
      14  }
      15  
      16  void nowarn_4m3 ()
      17  {
      18    char *p = a + 4;
      19    sprintf (p - 3, "%i", 12);    // { dg-bogus "-Wformat-overflow" }
      20  }
      21  
      22  void warn_2m1 ()
      23  {
      24    char *p = a + 2;
      25    sprintf (p - 1, "%i", 123);   // { dg-warning "-Wformat-overflow" "pr100325" }
      26  }
      27  
      28  void warn_3m1 ()
      29  {
      30    char *p = a + 3;
      31    sprintf (p - 1, "%i", 12);    // { dg-warning "-Wformat-overflow" "pr100325" }
      32  }
      33  
      34  void warn_4m1 ()
      35  {
      36    char *p = a + 4;
      37    sprintf (p - 1, "%i", 1);     // { dg-warning "-Wformat-overflow" "pr100325" }
      38  }