OSDN Git Service

* (REG_CLASS_FROM_CONSTRAINT): Only define if not already defined.
[pf3gnuchains/gcc-fork.git] / gcc / builtins.def
index 978b4a7..5f814bb 100644 (file)
@@ -1,6 +1,6 @@
 /* This file contains the definitions and documentation for the
    builtins used in the GNU compiler.
-   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -22,7 +22,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 /* Before including this file, you should define a macro:
 
      DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
-                  FALLBACK_P, NONANSI_P, ATTRS)
+                  FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT)
 
    This macro will be called once for each builtin function.  The
    ENUM will be of type `enum built_in_function', and will indicate
@@ -53,7 +53,14 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
    exist when compiling in ANSI conformant mode.
 
    ATTRs is an attribute list as defined in builtin-attrs.def that
-   describes the attributes of this builtin function.  */
+   describes the attributes of this builtin function.  
+
+   IMPLICIT specifies condition when the builtin can be produced by
+   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
+   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
@@ -61,7 +68,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #undef DEF_GCC_BUILTIN
 #define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS)               \
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,     \
-               false, false, false, ATTRS)
+               false, false, false, ATTRS, true)
 
 
 /* A fallback builtin is a builtin (like __builtin_puts) that falls
@@ -71,34 +78,27 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #undef DEF_FALLBACK_BUILTIN                            
 #define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS)  \
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,        \
-              false, true, false, ATTRS)
+              false, true, false, ATTRS, true)
 
 /* Like DEF_FALLBACK_BUILTIN, except that the function is not one that
    is specified by ANSI/ISO C.  So, when we're being fully conformant
    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)
+              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' version, we will create an ordinary version (e.g,
    `strchr') as well.  If we cannot compute the answer using the
    builtin function, we will fall back to the standard library
-   version. */
+   version.  */
 #undef DEF_LIB_BUILTIN                                 
 #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)       \
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,        \
-              true, true, false, ATTRS)
-
-/* Like DEF_LIB_BUILTIN, except that a call to the builtin should
-   never fall back to the library version.  */
-#undef DEF_LIB_ALWAYS_BUILTIN                          
-#define DEF_LIB_ALWAYS_BUILTIN(ENUM, NAME, TYPE)       \
-  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,        \
-              true, false, true, ATTR_CONST_NOTHROW_LIST)
+              true, true, false, ATTRS, true)
 
 /* Like DEF_LIB_BUILTIN, except that the function is not one that is
    specified by ANSI/ISO C.  So, when we're being fully conformant we
@@ -107,21 +107,29 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #undef DEF_EXT_LIB_BUILTIN                             
 #define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)   \
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,        \
-              true, true, true, ATTRS)
+              true, true, true, ATTRS, false)
 
 /* Like DEF_LIB_BUILTIN, except that the function is only a part of
    the standard in C99 or above.  */
 #undef DEF_C99_BUILTIN                                 
-#define DEF_C99_BUILTIN(ENUM, NAME, TYPE)              \
+#define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS)       \
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,        \
-              true, !flag_isoc99, true, ATTR_NOTHROW_LIST)
+              true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS)
+
+/* Builtin that is specified by C99 and C90 reserve the name for future use.
+   We can still recognize the builtin in C90 mode but we can't produce it
+   implicitly.  */
+#undef DEF_C99_C90RES_BUILTIN                                  
+#define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)        \
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE,        \
+              true, true, !flag_isoc99, ATTRS, TARGET_C99_FUNCTIONS)
 
 /* Like DEF_LIB_BUILTIN, except that the function is expanded in the
    front-end.  */
 #undef DEF_FRONT_END_LIB_BUILTIN                       
 #define DEF_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)     \
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE,      \
-              true, true, false, ATTRS)
+              true, true, false, ATTRS, true)
 
 /* Like DEF_FRONT_END_LIB_BUILTIN, except that the function is not one
    that is specified by ANSI/ISO C.  So, when we're being fully
@@ -130,13 +138,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #undef DEF_EXT_FRONT_END_LIB_BUILTIN                   
 #define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE,      \
-              true, true, true, ATTRS)
-
-/* A built-in that is not currently used.  */
-#undef DEF_UNUSED_BUILTIN                                      
-#define DEF_UNUSED_BUILTIN(X)                                  \
-  DEF_BUILTIN (X, (const char *) NULL, NOT_BUILT_IN, BT_LAST,  \
-              BT_LAST, false, false, false, ATTR_NOTHROW_LIST)
+              true, true, true, ATTRS, true)
 
 /* If SMALL_STACK is defined, then `alloca' is only defined in its
    `__builtin' form.  */
@@ -152,160 +154,327 @@ DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA,
                    ATTR_MALLOC_NOTHROW_LIST)
 #endif
 
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS,
-                      "__builtin_abs",
-                      BT_FN_INT_INT)
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS,
-                      "__builtin_labs",
-                      BT_FN_LONG_LONG)
-
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS,
-                      "__builtin_fabs",
-                      BT_FN_DOUBLE_DOUBLE)
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF,
+DEF_LIB_BUILTIN(BUILT_IN_ABS,
+               "__builtin_abs",
+               BT_FN_INT_INT,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_LABS,
+               "__builtin_labs",
+               BT_FN_LONG_LONG,
+               ATTR_CONST_NOTHROW_LIST)
+
+DEF_LIB_BUILTIN(BUILT_IN_FABS,
+               "__builtin_fabs",
+               BT_FN_DOUBLE_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSF,
                       "__builtin_fabsf",
-                      BT_FN_FLOAT_FLOAT)
-DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL,
+                      BT_FN_FLOAT_FLOAT,
+                      ATTR_CONST_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_FABSL,
                       "__builtin_fabsl",
-                      BT_FN_LONG_DOUBLE_LONG_DOUBLE)
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+                      ATTR_CONST_NOTHROW_LIST)
+
+DEF_LIB_BUILTIN(BUILT_IN_FLOOR,
+                "__builtin_floor",
+                BT_FN_DOUBLE_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORF,
+                      "__builtin_floorf",
+                      BT_FN_FLOAT_FLOAT,
+                      ATTR_CONST_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_FLOORL,
+                      "__builtin_floorl",
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+                      ATTR_CONST_NOTHROW_LIST)
+
+DEF_LIB_BUILTIN(BUILT_IN_CEIL,
+                "__builtin_ceil",
+                BT_FN_DOUBLE_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILF,
+                      "__builtin_ceilf",
+                      BT_FN_FLOAT_FLOAT,
+                      ATTR_CONST_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_CEILL,
+                      "__builtin_ceill",
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+                      ATTR_CONST_NOTHROW_LIST)
+
+DEF_C99_BUILTIN(BUILT_IN_ROUND,
+               "__builtin_round",
+               BT_FN_DOUBLE_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_ROUNDF,
+               "__builtin_roundf",
+               BT_FN_FLOAT_FLOAT,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_ROUNDL,
+               "__builtin_roundl",
+               BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+
+DEF_C99_BUILTIN(BUILT_IN_TRUNC,
+               "__builtin_trunc",
+               BT_FN_DOUBLE_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_TRUNCF,
+               "__builtin_truncf",
+               BT_FN_FLOAT_FLOAT,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_TRUNCL,
+               "__builtin_truncl",
+               BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+
+DEF_C99_BUILTIN(BUILT_IN_NEARBYINT,
+               "__builtin_nearbyint",
+               BT_FN_DOUBLE_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_NEARBYINTF,
+               "__builtin_nearbyintf",
+               BT_FN_FLOAT_FLOAT,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_NEARBYINTL,
+               "__builtin_nearbyintl",
+               BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
 
 DEF_C99_BUILTIN(BUILT_IN_LLABS,
                "__builtin_llabs",
-               BT_FN_LONGLONG_LONGLONG)
+               BT_FN_LONGLONG_LONGLONG,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_IMAXABS,
                "__builtin_imaxabs",
-               BT_FN_INTMAX_INTMAX)
+               BT_FN_INTMAX_INTMAX,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_CONJ,
                "__builtin_conj",
-               BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE)
+               BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_CONJF,
                "__builtin_conjf",
-               BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT)
+               BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_CONJL,
                "__builtin_conjl",
-               BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE)
+               BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_CREAL,
                "__builtin_creal",
-               BT_FN_DOUBLE_COMPLEX_DOUBLE)
+               BT_FN_DOUBLE_COMPLEX_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_CREALF,
                "__builtin_crealf",
-               BT_FN_FLOAT_COMPLEX_FLOAT)
+               BT_FN_FLOAT_COMPLEX_FLOAT,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_CREALL,
                "__builtin_creall",
-               BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE)
+               BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_CIMAG,
                "__builtin_cimag",
-               BT_FN_DOUBLE_COMPLEX_DOUBLE)
+               BT_FN_DOUBLE_COMPLEX_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_CIMAGF,
                "__builtin_cimagf",
-               BT_FN_FLOAT_COMPLEX_FLOAT)
+               BT_FN_FLOAT_COMPLEX_FLOAT,
+               ATTR_CONST_NOTHROW_LIST)
 DEF_C99_BUILTIN(BUILT_IN_CIMAGL,
                "__builtin_cimagl",
-               BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE)
-
-DEF_UNUSED_BUILTIN(BUILT_IN_DIV)
-DEF_UNUSED_BUILTIN(BUILT_IN_LDIV)
-DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR)
-DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL)
-DEF_UNUSED_BUILTIN(BUILT_IN_FMOD)
-DEF_UNUSED_BUILTIN(BUILT_IN_FREM)
-
-/* 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.  */
+               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', '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_PTR_SIZE, 
             BT_FN_VOID_VAR,
             true, true, true,
-            ATTR_NOTHROW_LIST)
+            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,
             BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
             BT_FN_INT_VAR,
             true, true, true,
-            ATTR_PURE_NOTHROW_LIST)
+            ATTR_PURE_NOTHROW_LIST, false)
 
 DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS,
                    "__builtin_ffs",
                    BT_FN_INT_INT,
                    ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_CLZ,
+                   "__builtin_clz",
+                   BT_FN_INT_INT,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_CTZ,
+                   "__builtin_ctz",
+                   BT_FN_INT_INT,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_POPCOUNT,
+                   "__builtin_popcount",
+                   BT_FN_INT_INT,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_PARITY,
+                   "__builtin_parity",
+                   BT_FN_INT_INT,
+                   ATTR_CONST_NOTHROW_LIST)
+
+DEF_GCC_BUILTIN(BUILT_IN_FFSL,
+                   "__builtin_ffsl",
+                   BT_FN_INT_LONG,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_CLZL,
+                   "__builtin_clzl",
+                   BT_FN_INT_LONG,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_CTZL,
+                   "__builtin_ctzl",
+                   BT_FN_INT_LONG,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTL,
+                   "__builtin_popcountl",
+                   BT_FN_INT_LONG,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_PARITYL,
+                   "__builtin_parityl",
+                   BT_FN_INT_LONG,
+                   ATTR_CONST_NOTHROW_LIST)
+
+DEF_EXT_LIB_BUILTIN(BUILT_IN_FFSLL,
+                   "__builtin_ffsll",
+                   BT_FN_INT_LONGLONG,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_CLZLL,
+                   "__builtin_clzll",
+                   BT_FN_INT_LONGLONG,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_CTZLL,
+                   "__builtin_ctzll",
+                   BT_FN_INT_LONGLONG,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_POPCOUNTLL,
+                   "__builtin_popcountll",
+                   BT_FN_INT_LONGLONG,
+                   ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_PARITYLL,
+                   "__builtin_parityll",
+                   BT_FN_INT_LONGLONG,
+                   ATTR_CONST_NOTHROW_LIST)
+
 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",
@@ -338,71 +507,213 @@ DEF_LIB_BUILTIN(BUILT_IN_LOG,
                                : (flag_unsafe_math_optimizations
                                   ? ATTR_CONST_NOTHROW_LIST
                                   : ATTR_PURE_NOTHROW_LIST))
-DEF_LIB_BUILTIN(BUILT_IN_SQRTF,
-               "__builtin_sqrtf",
-               BT_FN_FLOAT_FLOAT,
-               flag_errno_math ? ATTR_NOTHROW_LIST
-                               : (flag_unsafe_math_optimizations
-                                  ? ATTR_CONST_NOTHROW_LIST
-                                  : ATTR_PURE_NOTHROW_LIST))
-DEF_LIB_BUILTIN(BUILT_IN_SINF,
-               "__builtin_sinf",
-               BT_FN_FLOAT_FLOAT,
+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_COSF,
-               "__builtin_cosf",
-               BT_FN_FLOAT_FLOAT,
+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_EXPF,
-               "__builtin_expf",
-               BT_FN_FLOAT_FLOAT,
+DEF_LIB_BUILTIN(BUILT_IN_POW,
+               "__builtin_pow",
+               BT_FN_DOUBLE_DOUBLE_DOUBLE,
                flag_errno_math ? ATTR_NOTHROW_LIST
                                : (flag_unsafe_math_optimizations
                                   ? ATTR_CONST_NOTHROW_LIST
                                   : ATTR_PURE_NOTHROW_LIST))
-DEF_LIB_BUILTIN(BUILT_IN_LOGF,
-               "__builtin_logf",
-               BT_FN_FLOAT_FLOAT,
+DEF_LIB_BUILTIN(BUILT_IN_ATAN2,
+               "__builtin_atan2",
+               BT_FN_DOUBLE_DOUBLE_DOUBLE,
                flag_errno_math ? ATTR_NOTHROW_LIST
                                : (flag_unsafe_math_optimizations
                                   ? ATTR_CONST_NOTHROW_LIST
                                   : ATTR_PURE_NOTHROW_LIST))
-DEF_LIB_BUILTIN(BUILT_IN_SQRTL,
-               "__builtin_sqrtl",
-               BT_FN_LONG_DOUBLE_LONG_DOUBLE,
-               flag_errno_math ? ATTR_NOTHROW_LIST
-                               : (flag_unsafe_math_optimizations
-                                  ? ATTR_CONST_NOTHROW_LIST
-                                  : ATTR_PURE_NOTHROW_LIST))
-DEF_LIB_BUILTIN(BUILT_IN_SINL,
-               "__builtin_sinl",
-               BT_FN_LONG_DOUBLE_LONG_DOUBLE,
-               flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
-                                              : ATTR_PURE_NOTHROW_LIST)
-DEF_LIB_BUILTIN(BUILT_IN_COSL,
-               "__builtin_cosl",
-               BT_FN_LONG_DOUBLE_LONG_DOUBLE,
-               flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
-                                              : ATTR_PURE_NOTHROW_LIST)
-DEF_LIB_BUILTIN(BUILT_IN_EXPL,
-               "__builtin_expl",
-               BT_FN_LONG_DOUBLE_LONG_DOUBLE,
-               flag_errno_math ? ATTR_NOTHROW_LIST
-                               : (flag_unsafe_math_optimizations
-                                  ? ATTR_CONST_NOTHROW_LIST
-                                  : ATTR_PURE_NOTHROW_LIST))
-DEF_LIB_BUILTIN(BUILT_IN_LOGL,
-               "__builtin_logl",
-               BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+DEF_LIB_BUILTIN(BUILT_IN_FMOD,
+               "__builtin_fmod",
+               BT_FN_DOUBLE_DOUBLE_DOUBLE,
                flag_errno_math ? ATTR_NOTHROW_LIST
                                : (flag_unsafe_math_optimizations
                                   ? ATTR_CONST_NOTHROW_LIST
                                   : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF,
+                      "__builtin_sqrtf",
+                      BT_FN_FLOAT_FLOAT,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_SINF,
+                      "__builtin_sinf",
+                      BT_FN_FLOAT_FLOAT,
+                      flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+                                                     : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF,
+                      "__builtin_cosf",
+                      BT_FN_FLOAT_FLOAT,
+                      flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+                                                     : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF,
+                      "__builtin_expf",
+                      BT_FN_FLOAT_FLOAT,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGF,
+                      "__builtin_logf",
+                      BT_FN_FLOAT_FLOAT,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (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_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2F,
+                      "__builtin_atan2f",
+                      BT_FN_FLOAT_FLOAT_FLOAT,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODF,
+                      "__builtin_fmodf",
+                      BT_FN_FLOAT_FLOAT_FLOAT,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTL,
+                      "__builtin_sqrtl",
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_SINL,
+                      "__builtin_sinl",
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+                      flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+                                                     : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_COSL,
+                      "__builtin_cosl",
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+                      flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+                                                     : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPL,
+                      "__builtin_expl",
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGL,
+                      "__builtin_logl",
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (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,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ATAN2L,
+                      "__builtin_atan2l",
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_FMODL,
+                      "__builtin_fmodl",
+                      BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
+                      flag_errno_math ? ATTR_NOTHROW_LIST
+                                      : (flag_unsafe_math_optimizations
+                                         ? ATTR_CONST_NOTHROW_LIST
+                                         : ATTR_PURE_NOTHROW_LIST))
+
+DEF_GCC_BUILTIN(BUILT_IN_INF,
+               "__builtin_inf",
+               BT_FN_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_INFF,
+               "__builtin_inff",
+               BT_FN_FLOAT,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_INFL,
+               "__builtin_infl",
+               BT_FN_LONG_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+
+DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL,
+               "__builtin_huge_val",
+               BT_FN_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF,
+               "__builtin_huge_valf",
+               BT_FN_FLOAT,
+               ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL,
+               "__builtin_huge_vall",
+               BT_FN_LONG_DOUBLE,
+               ATTR_CONST_NOTHROW_LIST)
 
-DEF_UNUSED_BUILTIN(BUILT_IN_GETEXP)
-DEF_UNUSED_BUILTIN(BUILT_IN_GETMAN)
+DEF_LIB_BUILTIN(BUILT_IN_NAN,
+               "__builtin_nan",
+               BT_FN_DOUBLE_CONST_STRING,
+               ATTR_CONST_NOTHROW_NONNULL_1)
+DEF_LIB_BUILTIN(BUILT_IN_NANF,
+               "__builtin_nanf",
+               BT_FN_FLOAT_CONST_STRING,
+               ATTR_CONST_NOTHROW_NONNULL_1)
+DEF_LIB_BUILTIN(BUILT_IN_NANL,
+               "__builtin_nanl",
+               BT_FN_LONG_DOUBLE_CONST_STRING,
+               ATTR_CONST_NOTHROW_NONNULL_1)
+
+DEF_LIB_BUILTIN(BUILT_IN_NANS,
+               "__builtin_nans",
+               BT_FN_DOUBLE_CONST_STRING,
+               ATTR_CONST_NOTHROW_NONNULL_1)
+DEF_LIB_BUILTIN(BUILT_IN_NANSF,
+               "__builtin_nansf",
+               BT_FN_FLOAT_CONST_STRING,
+               ATTR_CONST_NOTHROW_NONNULL_1)
+DEF_LIB_BUILTIN(BUILT_IN_NANSL,
+               "__builtin_nansl",
+               BT_FN_LONG_DOUBLE_CONST_STRING,
+               ATTR_CONST_NOTHROW_NONNULL_1)
 
 DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS,
                "__builtin_saveregs",
@@ -423,7 +734,7 @@ DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO,
 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,
@@ -465,70 +776,116 @@ DEF_GCC_BUILTIN(BUILT_IN_PREFETCH,
                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, 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, 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,
@@ -569,8 +926,8 @@ DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA,
                "__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,
@@ -617,42 +974,37 @@ DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
                BT_FN_LONG_LONG_LONG,
                ATTR_NULL)
 
-/* C++ extensions */
-DEF_UNUSED_BUILTIN(BUILT_IN_NEW)
-DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW)
-DEF_UNUSED_BUILTIN(BUILT_IN_DELETE)
-DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE)
-
 /* Declare abort, exit, _exit and _Exit */
-DEF_BUILTIN (BUILT_IN_ABORT,
-            "__builtin_abort",
-            NOT_BUILT_IN,
-            BT_FN_VOID,
-            BT_FN_VOID,
-            1, 0, 0,
-            ATTR_NORETURN_NOTHROW_LIST)
-
-DEF_BUILTIN (BUILT_IN_EXIT,
-            "__builtin_exit",
-            NOT_BUILT_IN,
-            BT_FN_VOID_INT,
-            BT_FN_VOID_INT,
-            1, 0, 0,
-            ATTR_NORETURN_NOTHROW_LIST)
-
-DEF_BUILTIN (BUILT_IN__EXIT,
-            "__builtin__exit",
-            NOT_BUILT_IN,
-            BT_FN_VOID_INT,
-            BT_FN_VOID_INT,
-            1, 0, 1,
-            ATTR_NORETURN_NOTHROW_LIST)
-
-DEF_BUILTIN (BUILT_IN__EXIT2,
-            "__builtin__Exit",
-            NOT_BUILT_IN,
-            BT_FN_VOID_INT,
-            BT_FN_VOID_INT,
-            1, 0, !flag_isoc99,
-            ATTR_NORETURN_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_ABORT,
+                "__builtin_abort",
+               BT_FN_VOID,
+               ATTR_NORETURN_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_EXIT,
+               "__builtin_exit",
+               BT_FN_VOID_INT,
+               ATTR_NORETURN_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN(BUILT_IN__EXIT,
+                   "__builtin__exit",
+                   BT_FN_VOID_INT,
+                   ATTR_NORETURN_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN__EXIT2,
+               "__builtin__Exit",
+               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)