(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
attr-nonstring-4.c
       1  /* PR middle-end/83131 - c-c++/common/attr-nonstring-3 failure for strcmp
       2     tests on PowerPC
       3     { dg-do compile }
       4     { dg-options "-O2 -Wstringop-overflow -ftrack-macro-expansion=0" }  */
       5  
       6  #if __cplusplus
       7  extern "C" {
       8  #endif
       9  
      10  typedef __SIZE_TYPE__ size_t;
      11  
      12  extern int strcmp (const char*, const char*);
      13  extern int strncmp (const char*, const char*, size_t);
      14  
      15  #if __cplusplus
      16  }   /* extern "C" */
      17  #endif
      18  
      19  extern char arx[] __attribute__ ((nonstring));
      20  extern char ar5[5] __attribute__ ((nonstring));
      21  extern char str[];
      22  
      23  enum { N = sizeof ar5 };
      24  enum { X = sizeof ar5 + 1 };
      25  
      26  
      27  int warn_strcmp_cst_1 (void)
      28  {
      29    return strcmp ("bar", arx);       /* { dg-warning "argument 2 declared attribute .nonstring." } */
      30  }
      31  
      32  int warn_strcmp_cst_2 (void)
      33  {
      34    return strcmp (arx, "foo");       /* { dg-warning "argument 1 declared attribute .nonstring." } */
      35  }
      36  
      37  
      38  int warn_strncmp_cst_1 (void)
      39  {
      40    return strncmp ("12345", ar5, X);   /* { dg-warning "argument 2 declared attribute .nonstring." } */
      41  }
      42  
      43  int warn_strncmp_cst_2 (void)
      44  {
      45    return strncmp (ar5, "12345", X);   /* { dg-warning "argument 1 declared attribute .nonstring." } */
      46  }
      47  
      48  
      49  int nowarn_strncmp_cst_1 (void)
      50  {
      51    return strncmp ("12345", ar5, N);
      52  }
      53  
      54  int nowarn_strncmp_cst_2 (void)
      55  {
      56    return strncmp (ar5, "12345", N);
      57  }
      58  
      59  
      60  int warn_strncmp_var_1 (void)
      61  {
      62    return strncmp (str, ar5, X);     /* { dg-warning "argument 2 declared attribute .nonstring." } */
      63  }
      64  
      65  int warn_strncmp_var_2 (void)
      66  {
      67    return strncmp (ar5, str, X);     /* { dg-warning "argument 1 declared attribute .nonstring." } */
      68  }
      69  
      70  
      71  int nowarn_strncmp_var_1 (void)
      72  {
      73    return strncmp (str, ar5, N);
      74  }
      75  
      76  int nowarn_strncmp_var_2 (void)
      77  {
      78    return strncmp (ar5, str, N);
      79  }