(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Wstringop-overread-3.c
       1  /* Verify that calling strndup and strnlen with an unknown bound isn't
       2     diagnosed regardless of the size of the array and the type of the bound.
       3    { dg-do compile }
       4    { dg-options "-O -Wall" } */
       5  
       6  #define NOIPA __attribute__ ((noipa))
       7  
       8  typedef __SIZE_TYPE__ size_t;
       9  
      10  extern char* strndup (const char*, size_t);
      11  extern size_t strnlen (const char*, size_t);
      12  
      13  /* TO DO: Passing a zero-length array to any function is almost certainly
      14     a bug and should be diagnosed except perpaphs when the function also
      15     takes a bound and its value is known to be zero.  When this is
      16     implemented this test will need to be adjusted.  */
      17  extern char a0[0];
      18  
      19  extern char a1[1];
      20  
      21  NOIPA char* strndup_a0_si (short n)
      22  {
      23    return strndup (a0, n);
      24  }
      25  
      26  NOIPA char* strndup_a0_i (int n)
      27  {
      28    return strndup (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      29  }
      30  
      31  NOIPA char* strndup_a0_li (long n)
      32  {
      33    return strndup (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      34  }
      35  
      36  NOIPA char* strndup_a0_lli (long long n)
      37  {
      38    return strndup (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      39  }
      40  
      41  
      42  NOIPA char* strndup_a0_usi (unsigned short n)
      43  {
      44    return strndup (a0, n);
      45  }
      46  
      47  NOIPA char* strndup_a0_ui (unsigned n)
      48  {
      49    return strndup (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      50  }
      51  
      52  NOIPA char* strndup_a0_uli (unsigned long n)
      53  {
      54    return strndup (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      55  }
      56  
      57  NOIPA char* strndup_a0_ulli (unsigned long long n)
      58  {
      59    return strndup (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      60  }
      61  
      62  
      63  
      64  NOIPA char* strndup_a1_si (short n)
      65  {
      66    return strndup (a1, n);
      67  }
      68  
      69  NOIPA char* strndup_a1_i (int n)
      70  {
      71    return strndup (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      72  }
      73  
      74  NOIPA char* strndup_a1_li (long n)
      75  {
      76    return strndup (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      77  }
      78  
      79  NOIPA char* strndup_a1_lli (long long n)
      80  {
      81    return strndup (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      82  }
      83  
      84  
      85  NOIPA char* strndup_a1_usi (unsigned short n)
      86  {
      87    return strndup (a1, n);
      88  }
      89  
      90  NOIPA char* strndup_a1_ui (unsigned n)
      91  {
      92    return strndup (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      93  }
      94  
      95  NOIPA char* strndup_a1_uli (unsigned long n)
      96  {
      97    return strndup (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
      98  }
      99  
     100  NOIPA char* strndup_a1_ulli (unsigned long long n)
     101  {
     102    return strndup (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     103  }
     104  
     105  
     106  NOIPA size_t strnlen_a0_si (short n)
     107  {
     108    return strnlen (a0, n);
     109  }
     110  
     111  NOIPA size_t strnlen_a0_i (int n)
     112  {
     113    return strnlen (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     114  }
     115  
     116  NOIPA size_t strnlen_a0_li (long n)
     117  {
     118    return strnlen (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     119  }
     120  
     121  NOIPA size_t strnlen_a0_lli (long long n)
     122  {
     123    return strnlen (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     124  }
     125  
     126  
     127  NOIPA size_t strnlen_a0_usi (unsigned short n)
     128  {
     129    return strnlen (a0, n);
     130  }
     131  
     132  NOIPA size_t strnlen_a0_ui (unsigned n)
     133  {
     134    return strnlen (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     135  }
     136  
     137  NOIPA size_t strnlen_a0_uli (unsigned long n)
     138  {
     139    return strnlen (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     140  }
     141  
     142  NOIPA size_t strnlen_a0_ulli (unsigned long long n)
     143  {
     144    return strnlen (a0, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     145  }
     146  
     147  
     148  
     149  NOIPA size_t strnlen_a1_si (short n)
     150  {
     151    return strnlen (a1, n);
     152  }
     153  
     154  NOIPA size_t strnlen_a1_i (int n)
     155  {
     156    return strnlen (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     157  }
     158  
     159  NOIPA size_t strnlen_a1_li (long n)
     160  {
     161    return strnlen (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     162  }
     163  
     164  NOIPA size_t strnlen_a1_lli (long long n)
     165  {
     166    return strnlen (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     167  }
     168  
     169  
     170  NOIPA size_t strnlen_a1_usi (unsigned short n)
     171  {
     172    return strnlen (a1, n);
     173  }
     174  
     175  NOIPA size_t strnlen_a1_ui (unsigned n)
     176  {
     177    return strnlen (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     178  }
     179  
     180  NOIPA size_t strnlen_a1_uli (unsigned long n)
     181  {
     182    return strnlen (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     183  }
     184  
     185  NOIPA size_t strnlen_a1_ulli (unsigned long long n)
     186  {
     187    return strnlen (a1, n);     // { dg-bogus "\\\[-Wstringop-overread" }
     188  }