blob: 3f1ef115aedf5567576bdcb178093949c4b896b7 [file] [log] [blame]
/* 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);