(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Wstringop-overflow-9.c
       1  /* PR middle-end/88771 - Misleading -Werror=array-bounds error
       2     Verify that the warning issued for calls to "bounded" string
       3     functions is -Wstringop-overflow with the right wording.
       4     { dg-do compile }
       5     { dg-options "-O2 -Wall" } */
       6  
       7  #define PTRDIFF_MAX   __PTRDIFF_MAX__
       8  #define SIZE_MAX      __SIZE_MAX__
       9  
      10  typedef __SIZE_TYPE__ size_t;
      11  
      12  extern void* memcpy (void*, const void*, size_t);
      13  extern void* memmove (void*, const void*, size_t);
      14  extern void* memset (void*, int, size_t);
      15  
      16  extern char* stpncpy (char*, const char*, size_t);
      17  
      18  extern char* strncat (char*, const char*, size_t);
      19  extern char* strncpy (char*, const char*, size_t);
      20  
      21  extern char* strndup (const char*, size_t);
      22  
      23  extern int strncmp (const char*, const char*, size_t);
      24  extern int strncasecmp (const char*, const char*, size_t);
      25  
      26  extern size_t strnlen (const char*, size_t);
      27  
      28  extern char *d;
      29  extern const char *s;
      30  
      31  
      32  void test_memcpy (void)
      33  {
      34    memcpy (d, s, SIZE_MAX);        /* { dg-warning ".memcpy. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
      35  }
      36  
      37  void test_memmove (void)
      38  {
      39    memmove (d, s, SIZE_MAX - 1);   /* { dg-warning ".memmove. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
      40  }
      41  
      42  void test_memset (void)
      43  {
      44    memset (d, 0, SIZE_MAX - 2);    /* { dg-warning ".memset. specified \(bound|size\) \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
      45  }
      46  
      47  
      48  char* test_stpncpy (void)
      49  {
      50    return stpncpy (d, s, SIZE_MAX - 4);   /* { dg-warning ".stpncpy. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
      51  }
      52  
      53  
      54  void test_strncat (void)
      55  {
      56    strncat (d, s, SIZE_MAX - 3);   /* { dg-warning ".strncat. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
      57  }
      58  
      59  void test_strncpy (void)
      60  {
      61    strncpy (d, s, SIZE_MAX - 4);   /* { dg-warning ".strncpy. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overflow=\\\]" } */
      62  }
      63  
      64  char* test_strndup (void)
      65  {
      66    return strndup (s, SIZE_MAX - 5);   /* { dg-warning ".strndup. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overread" } */
      67  }
      68  
      69  size_t test_strnlen (void)
      70  {
      71    return strnlen (s, SIZE_MAX - 6);   /* { dg-warning ".strnlen. specified bound \[0-9\]+ exceeds maximum object size \[0-9\]+ \\\[-Wstringop-overread" } */
      72  }