| /* Test to verify that calls to common built-in functions declared |
| with no prototype do not cause an ICE. |
| { dg-do compile } |
| { dg-options "-O2 -Wall -Wextra" } |
| { dg-prune-output "warning" } |
| { dg-require-effective-target alloca } */ |
| |
| typedef __SIZE_TYPE__ size_t; |
| |
| #if __cplusplus |
| extern "C" { |
| |
| #define NO_PROTO ... |
| #else |
| #define NO_PROTO /* empty */ |
| #endif |
| |
| /* Character classification built-ins from <ctype.h>. */ |
| int isalpha (NO_PROTO); |
| int isalnum (NO_PROTO); |
| int isalpha (NO_PROTO); |
| int iscntrl (NO_PROTO); |
| int isdigit (NO_PROTO); |
| int isgraph (NO_PROTO); |
| int islower (NO_PROTO); |
| int isprint (NO_PROTO); |
| int ispunct (NO_PROTO); |
| int isspace (NO_PROTO); |
| int isupper (NO_PROTO); |
| int isxdigit (NO_PROTO); |
| int tolower (NO_PROTO); |
| int toupper (NO_PROTO); |
| |
| /* Memory allocation built-ins from <stdlib.h>. */ |
| void* alloca (NO_PROTO); |
| void* aligned_alloc (NO_PROTO); |
| void* calloc (NO_PROTO); |
| void* malloc (NO_PROTO); |
| void* realloc (NO_PROTO); |
| |
| /* Raw memory built-ins from <string.h>. */ |
| void* memcpy (NO_PROTO); |
| void* memchr (NO_PROTO); |
| void* memmove (NO_PROTO); |
| void* mempcpy (NO_PROTO); |
| void* memset (NO_PROTO); |
| |
| /* String built-ins from <string.h>. */ |
| char* stpcpy (NO_PROTO); |
| char* stpncpy (NO_PROTO); |
| |
| char* strcat (NO_PROTO); |
| char* strcpy (NO_PROTO); |
| |
| char* strdup (NO_PROTO); |
| char* strndup (NO_PROTO); |
| |
| char* strncat (NO_PROTO); |
| char* strncpy (NO_PROTO); |
| |
| size_t strlen (NO_PROTO); |
| size_t strnlen (NO_PROTO); |
| |
| char* strchr (NO_PROTO); |
| int strcmp (NO_PROTO); |
| int strncmp (NO_PROTO); |
| |
| /* Input/output functions from <stdio.h>. */ |
| int puts (NO_PROTO); |
| int fputs (NO_PROTO); |
| |
| int scanf (NO_PROTO); |
| int fscanf (NO_PROTO); |
| int sscanf (NO_PROTO); |
| int vfscanf (NO_PROTO); |
| int vsscanf (NO_PROTO); |
| |
| int printf (NO_PROTO); |
| int fprintf (NO_PROTO); |
| int sprintf (NO_PROTO); |
| |
| int snprintf (NO_PROTO); |
| |
| int vprintf (NO_PROTO); |
| int vfprintf (NO_PROTO); |
| int vsprintf (NO_PROTO); |
| |
| int vsnprintf (NO_PROTO); |
| |
| #if __cplusplus |
| } |
| #endif |
| |
| |
| #define CONCAT(a, b) a ## b |
| #define UNIQ_NAME(func, id) CONCAT (test_ ## func ## _, id) |
| |
| #define TEST_FUNC(func, arglist) \ |
| __typeof__ (func arglist) \ |
| UNIQ_NAME (func, __COUNTER__) (void) { \ |
| return func arglist; \ |
| } |
| |
| #define T1(func) \ |
| TEST_FUNC (func, ()); \ |
| TEST_FUNC (func, (1)); \ |
| TEST_FUNC (func, ("")); \ |
| TEST_FUNC (func, ((void*)1)); \ |
| TEST_FUNC (func, (iarr)); \ |
| TEST_FUNC (func, (function)) |
| |
| #define T2(func) \ |
| TEST_FUNC (func, (1, 1)); \ |
| TEST_FUNC (func, (1, "")); \ |
| TEST_FUNC (func, (1, (void*)1)); \ |
| TEST_FUNC (func, (1, iarr)); \ |
| TEST_FUNC (func, (1, function)) |
| |
| #define T3(func) \ |
| TEST_FUNC (func, (1, 1, 1)); \ |
| TEST_FUNC (func, (1, 1, "")); \ |
| TEST_FUNC (func, (1, 1, (void*)1)); \ |
| TEST_FUNC (func, (1, 1, iarr)); \ |
| TEST_FUNC (func, (1, 1, function)) |
| |
| extern int iarr[]; |
| extern void function (void); |
| |
| T1 (isalpha); |
| T1 (isalnum); |
| T1 (isalpha); |
| T1 (iscntrl); |
| T1 (isdigit); |
| T1 (isgraph); |
| T1 (islower); |
| T1 (isprint); |
| T1 (ispunct); |
| T1 (isspace); |
| T1 (isupper); |
| T1 (isxdigit); |
| T1 (tolower); |
| T1 (toupper); |
| |
| T1 (alloca); |
| T2 (aligned_alloc); |
| T2 (malloc); |
| T2 (calloc); |
| T2 (realloc); |
| |
| T3 (memcpy); |
| T3 (memmove); |
| T3 (mempcpy); |
| T3 (memset); |
| T3 (memchr); |
| |
| T2 (stpcpy); |
| T3 (stpncpy); |
| |
| T2 (strcat); |
| T2 (strcpy); |
| |
| T1 (strdup); |
| T2 (strndup); |
| |
| T3 (strncat); |
| T3 (strncpy); |
| |
| T2 (strchr); |
| T2 (strcmp); |
| T3 (strncmp); |
| |
| T1 (strlen); |
| T2 (strnlen); |
| |
| T1 (puts); |
| T2 (fputs); |
| |
| T1 (scanf); |
| T2 (fscanf); |
| T2 (sscanf); |
| T2 (vfscanf); |
| T2 (vsscanf); |
| |
| T2 (printf); |
| T3 (fprintf); |
| T3 (sprintf); |
| |
| T3 (snprintf); |
| |
| T2 (vprintf); |
| T2 (vfprintf); |
| T2 (vsprintf); |
| |
| T3 (vsnprintf); |