view gcc/testsuite/c-c++-common/builtins.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
line wrap: on
line source

/* 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);