(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
builtins.c
       1  /* Test to verify that calls to common built-in functions declared
       2     with no prototype do not cause an ICE.
       3    { dg-do compile }
       4    { dg-options "-O2 -Wall -Wextra" }
       5    { dg-prune-output "warning" }
       6    { dg-require-effective-target alloca }  */
       7  
       8  typedef __SIZE_TYPE__ size_t;
       9  
      10  #if __cplusplus
      11  extern "C" {
      12  
      13  #define NO_PROTO ...
      14  #else
      15  #define NO_PROTO /* empty */
      16  #endif
      17  
      18    /* Character classification built-ins from <ctype.h>.  */
      19    int isalpha (NO_PROTO);
      20    int isalnum (NO_PROTO);
      21    int isalpha (NO_PROTO);
      22    int iscntrl (NO_PROTO);
      23    int isdigit (NO_PROTO);
      24    int isgraph (NO_PROTO);
      25    int islower (NO_PROTO);
      26    int isprint (NO_PROTO);
      27    int ispunct (NO_PROTO);
      28    int isspace (NO_PROTO);
      29    int isupper (NO_PROTO);
      30    int isxdigit (NO_PROTO);
      31    int tolower (NO_PROTO);
      32    int toupper (NO_PROTO);
      33  
      34    /* Memory allocation built-ins from <stdlib.h>.  */
      35    void* alloca (NO_PROTO);
      36    void* aligned_alloc (NO_PROTO);
      37    void* calloc (NO_PROTO);
      38    void* malloc (NO_PROTO);
      39    void* realloc (NO_PROTO);
      40  
      41    /* Raw memory built-ins from <string.h>.  */
      42    void* memcpy (NO_PROTO);
      43    void* memchr (NO_PROTO);
      44    void* memmove (NO_PROTO);
      45    void* mempcpy (NO_PROTO);
      46    void* memset (NO_PROTO);
      47  
      48    /* String built-ins from <string.h>.  */
      49    char* stpcpy (NO_PROTO);
      50    char* stpncpy (NO_PROTO);
      51  
      52    char* strcat (NO_PROTO);
      53    char* strcpy (NO_PROTO);
      54  
      55    char* strdup (NO_PROTO);
      56    char* strndup (NO_PROTO);
      57  
      58    char* strncat (NO_PROTO);
      59    char* strncpy (NO_PROTO);
      60  
      61    size_t strlen (NO_PROTO);
      62    size_t strnlen (NO_PROTO);
      63  
      64    char* strchr (NO_PROTO);
      65    int strcmp (NO_PROTO);
      66    int strncmp (NO_PROTO);
      67  
      68    /* Input/output functions from <stdio.h>.  */
      69    int puts (NO_PROTO);
      70    int fputs (NO_PROTO);
      71  
      72    int scanf (NO_PROTO);
      73    int fscanf (NO_PROTO);
      74    int sscanf (NO_PROTO);
      75    int vfscanf (NO_PROTO);
      76    int vsscanf (NO_PROTO);
      77  
      78    int printf (NO_PROTO);
      79    int fprintf (NO_PROTO);
      80    int sprintf (NO_PROTO);
      81  
      82    int snprintf (NO_PROTO);
      83  
      84    int vprintf (NO_PROTO);
      85    int vfprintf (NO_PROTO);
      86    int vsprintf (NO_PROTO);
      87  
      88    int vsnprintf (NO_PROTO);
      89  
      90  #if __cplusplus
      91  }
      92  #endif
      93  
      94  
      95  #define CONCAT(a, b) a ## b
      96  #define UNIQ_NAME(func, id) CONCAT (test_ ## func ## _, id)
      97  
      98  #define TEST_FUNC(func, arglist)		\
      99    __typeof__ (func arglist)			\
     100    UNIQ_NAME (func, __COUNTER__) (void) {	\
     101      return func arglist;			\
     102    }
     103  
     104  #define T1(func)				\
     105    TEST_FUNC (func, ());				\
     106    TEST_FUNC (func, (1));			\
     107    TEST_FUNC (func, (""));			\
     108    TEST_FUNC (func, ((void*)1));			\
     109    TEST_FUNC (func, (iarr));			\
     110    TEST_FUNC (func, (function))
     111  
     112  #define T2(func)				\
     113    TEST_FUNC (func, (1, 1));			\
     114    TEST_FUNC (func, (1, ""));			\
     115    TEST_FUNC (func, (1, (void*)1));		\
     116    TEST_FUNC (func, (1, iarr));			\
     117    TEST_FUNC (func, (1, function))
     118  
     119  #define T3(func)				\
     120    TEST_FUNC (func, (1, 1, 1));			\
     121    TEST_FUNC (func, (1, 1, ""));			\
     122    TEST_FUNC (func, (1, 1, (void*)1));		\
     123    TEST_FUNC (func, (1, 1, iarr));		\
     124    TEST_FUNC (func, (1, 1, function))
     125  
     126  extern int iarr[];
     127  extern void function (void);
     128  
     129  T1 (isalpha);
     130  T1 (isalnum);
     131  T1 (isalpha);
     132  T1 (iscntrl);
     133  T1 (isdigit);
     134  T1 (isgraph);
     135  T1 (islower);
     136  T1 (isprint);
     137  T1 (ispunct);
     138  T1 (isspace);
     139  T1 (isupper);
     140  T1 (isxdigit);
     141  T1 (tolower);
     142  T1 (toupper);
     143  
     144  T1 (alloca);
     145  T2 (aligned_alloc);
     146  T2 (malloc);
     147  T2 (calloc);
     148  T2 (realloc);
     149  
     150  T3 (memcpy);
     151  T3 (memmove);
     152  T3 (mempcpy);
     153  T3 (memset);
     154  T3 (memchr);
     155  
     156  T2 (stpcpy);
     157  T3 (stpncpy);
     158  
     159  T2 (strcat);
     160  T2 (strcpy);
     161  
     162  T1 (strdup);
     163  T2 (strndup);
     164  
     165  T3 (strncat);
     166  T3 (strncpy);
     167  
     168  T2 (strchr);
     169  T2 (strcmp);
     170  T3 (strncmp);
     171  
     172  T1 (strlen);
     173  T2 (strnlen);
     174  
     175  T1 (puts);
     176  T2 (fputs);
     177  
     178  T1 (scanf);
     179  T2 (fscanf);
     180  T2 (sscanf);
     181  T2 (vfscanf);
     182  T2 (vsscanf);
     183  
     184  T2 (printf);
     185  T3 (fprintf);
     186  T3 (sprintf);
     187  
     188  T3 (snprintf);
     189  
     190  T2 (vprintf);
     191  T2 (vfprintf);
     192  T2 (vsprintf);
     193  
     194  T3 (vsnprintf);