compiler. For instance C90 reserves floorf function, but does not
define it's meaning. When user uses floorf we may assume that the
floorf has the meaning we expect, but we can't produce floorf by
- simplifing floor((double)float) since runtime don't need to implement it. */
+ simplifying floor((double)float) since the runtime need not implement
+ it. */
/* A GCC builtin (like __builtin_saveregs) is provided by the
compiler, but does not correspond to a function in the standard
we ignore the version of these builtins that does not begin with
__builtin. */
#undef DEF_EXT_FALLBACK_BUILTIN
-#define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE) \
+#define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
- false, true, true, ATTR_NOTHROW_LIST, true)
+ false, true, true, ATTRS, true)
/* A library builtin (like __builtin_strchr) is a builtin equivalent
of an ANSI/ISO standard library function. In addition to the
"__builtin_cimagl",
BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_CABS,
+ "__builtin_cabs",
+ BT_FN_DOUBLE_COMPLEX_DOUBLE,
+ ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_CABSF,
+ "__builtin_cabsf",
+ BT_FN_FLOAT_COMPLEX_FLOAT,
+ ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_CABSL,
+ "__builtin_cabsl",
+ BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
+ ATTR_CONST_NOTHROW_LIST)
-/* The system prototypes for `bzero' and `bcmp' functions have many
- variations, so don't specify parameters to avoid conflicts. The
- expand_* functions check the argument types anyway. */
+/* The system prototypes for `bzero', 'bcopy' and `bcmp' functions
+ have many variations, so don't specify parameters to avoid
+ conflicts. The expand_* functions check the argument types anyway.
+ In addition, these functions have traditionally accepted NULL
+ pointers when the length parameter is zero, so don't apply
+ attribute "nonnull". */
DEF_BUILTIN (BUILT_IN_BZERO,
"__builtin_bzero",
BUILT_IN_NORMAL,
BT_FN_VOID_VAR,
true, true, true,
ATTR_NOTHROW_LIST, false)
+DEF_BUILTIN (BUILT_IN_BCOPY,
+ "__builtin_bcopy",
+ BUILT_IN_NORMAL,
+ BT_FN_VOID_CONST_PTR_PTR_SIZE,
+ BT_FN_VOID_VAR,
+ true, true, true,
+ ATTR_NOTHROW_LIST, false)
DEF_BUILTIN (BUILT_IN_BCMP,
"__builtin_bcmp",
BUILT_IN_NORMAL,
DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX,
"__builtin_index",
BT_FN_STRING_CONST_STRING_INT,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1)
DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX,
"__builtin_rindex",
BT_FN_STRING_CONST_STRING_INT,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1)
DEF_LIB_BUILTIN(BUILT_IN_MEMCPY,
"__builtin_memcpy",
BT_FN_PTR_PTR_CONST_PTR_SIZE,
- ATTR_NOTHROW_LIST)
+ ATTR_NOTHROW_NONNULL_1_2)
+DEF_LIB_BUILTIN(BUILT_IN_MEMMOVE,
+ "__builtin_memmove",
+ BT_FN_PTR_PTR_CONST_PTR_SIZE,
+ ATTR_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_MEMCMP,
"__builtin_memcmp",
BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_MEMSET,
"__builtin_memset",
BT_FN_PTR_PTR_INT_SIZE,
- ATTR_NOTHROW_LIST)
+ ATTR_NOTHROW_NONNULL_1)
+DEF_EXT_LIB_BUILTIN(BUILT_IN_MEMPCPY,
+ "__builtin_mempcpy",
+ BT_FN_PTR_PTR_CONST_PTR_SIZE,
+ ATTR_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRCAT,
"__builtin_strcat",
BT_FN_STRING_STRING_CONST_STRING,
- ATTR_NOTHROW_LIST)
+ ATTR_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRNCAT,
"__builtin_strncat",
BT_FN_STRING_STRING_CONST_STRING_SIZE,
- ATTR_NOTHROW_LIST)
+ ATTR_NOTHROW_NONNULL_1_2)
+DEF_EXT_LIB_BUILTIN(BUILT_IN_STPCPY,
+ "__builtin_stpcpy",
+ BT_FN_STRING_STRING_CONST_STRING,
+ ATTR_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRCPY,
"__builtin_strcpy",
BT_FN_STRING_STRING_CONST_STRING,
- ATTR_NOTHROW_LIST)
+ ATTR_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRNCPY,
"__builtin_strncpy",
BT_FN_STRING_STRING_CONST_STRING_SIZE,
- ATTR_NOTHROW_LIST)
+ ATTR_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRCMP,
"__builtin_strcmp",
BT_FN_INT_CONST_STRING_CONST_STRING,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRNCMP,
"__builtin_strncmp",
BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRLEN,
"__builtin_strlen",
BT_FN_SIZE_CONST_STRING,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1)
DEF_LIB_BUILTIN(BUILT_IN_STRSTR,
"__builtin_strstr",
BT_FN_STRING_CONST_STRING_CONST_STRING,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRPBRK,
"__builtin_strpbrk",
BT_FN_STRING_CONST_STRING_CONST_STRING,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRSPN,
"__builtin_strspn",
BT_FN_SIZE_CONST_STRING_CONST_STRING,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRCSPN,
"__builtin_strcspn",
BT_FN_SIZE_CONST_STRING_CONST_STRING,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1_2)
DEF_LIB_BUILTIN(BUILT_IN_STRCHR,
"__builtin_strchr",
BT_FN_STRING_CONST_STRING_INT,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1)
DEF_LIB_BUILTIN(BUILT_IN_STRRCHR,
"__builtin_strrchr",
BT_FN_STRING_CONST_STRING_INT,
- ATTR_PURE_NOTHROW_LIST)
+ ATTR_PURE_NOTHROW_NONNULL_1)
DEF_LIB_BUILTIN(BUILT_IN_SQRT,
"__builtin_sqrt",
: (flag_unsafe_math_optimizations
? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_TAN,
+ "__builtin_tan",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_ATAN,
+ "__builtin_atan",
+ BT_FN_DOUBLE_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
DEF_LIB_BUILTIN(BUILT_IN_POW,
"__builtin_pow",
BT_FN_DOUBLE_DOUBLE_DOUBLE,
: (flag_unsafe_math_optimizations
? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_TANF,
+ "__builtin_tanf",
+ BT_FN_FLOAT_FLOAT,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANF,
+ "__builtin_atanf",
+ BT_FN_FLOAT_FLOAT,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
DEF_C99_C90RES_BUILTIN(BUILT_IN_POWF,
"__builtin_powf",
BT_FN_FLOAT_FLOAT_FLOAT,
: (flag_unsafe_math_optimizations
? ATTR_CONST_NOTHROW_LIST
: ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_TANL,
+ "__builtin_tanl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANL,
+ "__builtin_atanl",
+ BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+ flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+ : ATTR_PURE_NOTHROW_LIST)
DEF_C99_C90RES_BUILTIN(BUILT_IN_POWL,
"__builtin_powl",
BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
DEF_LIB_BUILTIN(BUILT_IN_NAN,
"__builtin_nan",
BT_FN_DOUBLE_CONST_STRING,
- ATTR_CONST_NOTHROW_LIST)
+ ATTR_CONST_NOTHROW_NONNULL_1)
DEF_LIB_BUILTIN(BUILT_IN_NANF,
"__builtin_nanf",
BT_FN_FLOAT_CONST_STRING,
- ATTR_CONST_NOTHROW_LIST)
+ ATTR_CONST_NOTHROW_NONNULL_1)
DEF_LIB_BUILTIN(BUILT_IN_NANL,
"__builtin_nanl",
BT_FN_LONG_DOUBLE_CONST_STRING,
- ATTR_CONST_NOTHROW_LIST)
+ ATTR_CONST_NOTHROW_NONNULL_1)
DEF_LIB_BUILTIN(BUILT_IN_NANS,
"__builtin_nans",
BT_FN_DOUBLE_CONST_STRING,
- ATTR_CONST_NOTHROW_LIST)
+ ATTR_CONST_NOTHROW_NONNULL_1)
DEF_LIB_BUILTIN(BUILT_IN_NANSF,
"__builtin_nansf",
BT_FN_FLOAT_CONST_STRING,
- ATTR_CONST_NOTHROW_LIST)
+ ATTR_CONST_NOTHROW_NONNULL_1)
DEF_LIB_BUILTIN(BUILT_IN_NANSL,
"__builtin_nansl",
BT_FN_LONG_DOUBLE_CONST_STRING,
- ATTR_CONST_NOTHROW_LIST)
+ ATTR_CONST_NOTHROW_NONNULL_1)
DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
"__builtin_saveregs",
DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P,
"__builtin_constant_p",
BT_FN_INT_VAR,
- ATTR_NULL)
+ ATTR_CONST_NOTHROW_LIST)
DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS,
"__builtin_frame_address",
BT_FN_PTR_UNSIGNED,
BT_FN_VOID_CONST_PTR_VAR,
ATTR_NULL)
-/* Stdio builtins. */
-DEF_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR,
- "__builtin_putchar",
- BT_FN_INT_INT,
- ATTR_NOTHROW_LIST)
-DEF_FALLBACK_BUILTIN(BUILT_IN_PUTS,
- "__builtin_puts",
- BT_FN_INT_CONST_STRING,
- ATTR_NOTHROW_LIST)
+/* stdio.h builtins (without FILE *). */
+
DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF,
"__builtin_printf",
BT_FN_INT_CONST_STRING_VAR,
ATTR_FORMAT_PRINTF_1_2)
-DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
- "__builtin_fputc",
- BT_FN_INT_INT_PTR,
- ATTR_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR,
+ "__builtin_putchar",
+ BT_FN_INT_INT,
+ ATTR_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_PUTS,
+ "__builtin_puts",
+ BT_FN_INT_CONST_STRING,
+ ATTR_NOTHROW_NONNULL_1)
+DEF_C99_BUILTIN(BUILT_IN_SNPRINTF,
+ "__builtin_snprintf",
+ BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
+ ATTR_FORMAT_PRINTF_3_4)
+DEF_LIB_BUILTIN(BUILT_IN_SPRINTF,
+ "__builtin_sprintf",
+ BT_FN_INT_STRING_CONST_STRING_VAR,
+ ATTR_FORMAT_PRINTF_2_3)
+DEF_LIB_BUILTIN(BUILT_IN_SCANF,
+ "__builtin_scanf",
+ BT_FN_INT_CONST_STRING_VAR,
+ ATTR_FORMAT_SCANF_1_2)
+DEF_LIB_BUILTIN(BUILT_IN_SSCANF,
+ "__builtin_sscanf",
+ BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
+ ATTR_FORMAT_SCANF_2_3)
+DEF_LIB_BUILTIN(BUILT_IN_VPRINTF,
+ "__builtin_vprintf",
+ BT_FN_INT_CONST_STRING_VALIST_ARG,
+ ATTR_FORMAT_PRINTF_1_0)
+DEF_C99_BUILTIN(BUILT_IN_VSCANF,
+ "__builtin_vscanf",
+ BT_FN_INT_CONST_STRING_VALIST_ARG,
+ ATTR_FORMAT_SCANF_1_0)
+DEF_C99_BUILTIN(BUILT_IN_VSSCANF,
+ "__builtin_vsscanf",
+ BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
+ ATTR_FORMAT_SCANF_2_0)
+DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF,
+ "__builtin_vsnprintf",
+ BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
+ ATTR_FORMAT_PRINTF_3_0)
+DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF,
+ "__builtin_vsprintf",
+ BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
+ ATTR_FORMAT_PRINTF_2_0)
+
+
+/* stdio.h builtins (with FILE *). */
+
/* Declare the __builtin_ style with arguments and the regular style
without them. We rely on stdio.h to supply the arguments for the
regular style declaration since we had to use void* instead of
FILE* in the __builtin_ prototype supplied here. */
+
+DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC,
+ "__builtin_fputc",
+ BT_FN_INT_INT_PTR,
+ ATTR_NOTHROW_NONNULL_2)
DEF_BUILTIN (BUILT_IN_FPUTS,
"__builtin_fputs",
BUILT_IN_NORMAL,
BT_FN_INT_CONST_STRING_PTR,
BT_FN_INT_VAR,
- true, true, false, ATTR_NOTHROW_LIST, true)
+ true, true, false, ATTR_NOTHROW_NONNULL_1_2, true)
DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE,
"__builtin_fwrite",
BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
- ATTR_NOTHROW_LIST)
+ ATTR_NOTHROW_NONNULL_1_4)
DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF,
"__builtin_fprintf",
BT_FN_INT_PTR_CONST_STRING_VAR,
ATTR_FORMAT_PRINTF_2_3)
-/* Stdio unlocked builtins. */
+/* stdio unlocked builtins (without FILE *). */
DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED,
"__builtin_putchar_unlocked",
- BT_FN_INT_INT)
+ BT_FN_INT_INT, ATTR_NOTHROW_LIST)
DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED,
"__builtin_puts_unlocked",
- BT_FN_INT_CONST_STRING)
+ BT_FN_INT_CONST_STRING, ATTR_NOTHROW_NONNULL_1)
DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED,
"__builtin_printf_unlocked",
BT_FN_INT_CONST_STRING_VAR,
ATTR_FORMAT_PRINTF_1_2)
-DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
- "__builtin_fputc_unlocked",
- BT_FN_INT_INT_PTR)
+
+/* stdio unlocked builtins (with FILE *). */
+
/* Declare the __builtin_ style with arguments and the regular style
without them. We rely on stdio.h to supply the arguments for the
regular style declaration since we had to use void* instead of
FILE* in the __builtin_ prototype supplied here. */
+
+DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED,
+ "__builtin_fputc_unlocked",
+ BT_FN_INT_INT_PTR, ATTR_NOTHROW_NONNULL_2)
DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED,
"__builtin_fputs_unlocked",
BUILT_IN_NORMAL,
BT_FN_INT_CONST_STRING_PTR,
BT_FN_INT_VAR,
- true, true, true, ATTR_NOTHROW_LIST, true)
+ true, true, true, ATTR_NOTHROW_NONNULL_1_2, true)
DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED,
"__builtin_fwrite_unlocked",
- BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR)
+ BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, ATTR_NOTHROW_NONNULL_1_4)
DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED,
"__builtin_fprintf_unlocked",
BT_FN_INT_PTR_CONST_STRING_VAR,
"__builtin_dwarf_cfa",
BT_FN_PTR,
ATTR_NULL)
-DEF_GCC_BUILTIN(BUILT_IN_DWARF_FP_REGNUM,
- "__builtin_dwarf_fp_regnum",
+DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN,
+ "__builtin_dwarf_sp_column",
BT_FN_UNSIGNED,
ATTR_NULL)
DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES,
BT_FN_VOID_INT,
ATTR_NORETURN_NOTHROW_LIST)
+/* Declare malloc, calloc and strdup. */
+DEF_LIB_BUILTIN(BUILT_IN_MALLOC,
+ "__builtin_malloc",
+ BT_FN_PTR_SIZE,
+ ATTR_MALLOC_NOTHROW_LIST)
+
+DEF_LIB_BUILTIN(BUILT_IN_CALLOC,
+ "__builtin_calloc",
+ BT_FN_PTR_SIZE_SIZE,
+ ATTR_MALLOC_NOTHROW_LIST)
+
+DEF_EXT_LIB_BUILTIN(BUILT_IN_STRDUP,
+ "__builtin_strdup",
+ BT_FN_STRING_CONST_STRING,
+ ATTR_MALLOC_NOTHROW_NONNULL_1)
+