From: Bernd Edlinger Date: Thu, 21 Jul 2016 19:11:26 +0000 (+0000) Subject: 016-07-21 Bernd Edlinger X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cfd97da10d63e1eddd3b901a505056ab342ce46f;p=gcc.git 016-07-21 Bernd Edlinger PR middle-end/71876 * builtin-attrs.def (ATTR_RT_NOTHROW_LEAF_LIST): New return twice attribute. * builtins.def (BUILT_IN_SETJMP): Use ATTR_RT_NOTHROW_LEAF_LIST here. * calls.c (special_function_p): Remove the special handling of the "__builtin_" prefix. From-SVN: r238606 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b5b24a03127..5b86ead1d15 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2016-07-21 Bernd Edlinger + + PR middle-end/71876 + * builtin-attrs.def (ATTR_RT_NOTHROW_LEAF_LIST): New return twice + attribute. + * builtins.def (BUILT_IN_SETJMP): Use ATTR_RT_NOTHROW_LEAF_LIST here. + * calls.c (special_function_p): Remove the special handling of the + "__builtin_" prefix. + 2016-07-21 Bernd Edlinger PR middle-end/71876 diff --git a/gcc/builtin-attrs.def b/gcc/builtin-attrs.def index 99658883872..8dc59c9b726 100644 --- a/gcc/builtin-attrs.def +++ b/gcc/builtin-attrs.def @@ -131,6 +131,8 @@ DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LIST, ATTR_NORETURN, \ ATTR_NULL, ATTR_NOTHROW_LIST) DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LEAF_LIST, ATTR_NORETURN,\ ATTR_NULL, ATTR_NOTHROW_LEAF_LIST) +DEF_ATTR_TREE_LIST (ATTR_RT_NOTHROW_LEAF_LIST, ATTR_RETURNS_TWICE,\ + ATTR_NULL, ATTR_NOTHROW_LEAF_LIST) DEF_ATTR_TREE_LIST (ATTR_COLD_NOTHROW_LEAF_LIST, ATTR_COLD,\ ATTR_NULL, ATTR_NOTHROW_LEAF_LIST) DEF_ATTR_TREE_LIST (ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST, ATTR_COLD,\ diff --git a/gcc/builtins.def b/gcc/builtins.def index 33a7626b70a..1dd095f7847 100644 --- a/gcc/builtins.def +++ b/gcc/builtins.def @@ -837,7 +837,7 @@ DEF_LIB_BUILTIN (BUILT_IN_REALLOC, "realloc", BT_FN_PTR_PTR_SIZE, ATTR_NO DEF_GCC_BUILTIN (BUILT_IN_RETURN, "return", BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_RETURN_ADDRESS, "return_address", BT_FN_PTR_UINT, ATTR_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_SAVEREGS, "saveregs", BT_FN_PTR_VAR, ATTR_NULL) -DEF_GCC_BUILTIN (BUILT_IN_SETJMP, "setjmp", BT_FN_INT_PTR, ATTR_NOTHROW_LEAF_LIST) +DEF_GCC_BUILTIN (BUILT_IN_SETJMP, "setjmp", BT_FN_INT_PTR, ATTR_RT_NOTHROW_LEAF_LIST) DEF_EXT_LIB_BUILTIN (BUILT_IN_STRFMON, "strfmon", BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_STRFMON_NOTHROW_3_4) DEF_LIB_BUILTIN (BUILT_IN_STRFTIME, "strftime", BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR, ATTR_FORMAT_STRFTIME_NOTHROW_3_0) DEF_GCC_BUILTIN (BUILT_IN_TRAP, "trap", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LEAF_LIST) diff --git a/gcc/calls.c b/gcc/calls.c index bb954ef5b09..c04d00f7f44 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -514,14 +514,10 @@ special_function_p (const_tree fndecl, int flags) && ! strcmp (name, "alloca")) flags |= ECF_MAY_BE_ALLOCA; - /* Disregard prefix _, __, __x or __builtin_. */ + /* Disregard prefix _, __ or __x. */ if (name[0] == '_') { - if (name[1] == '_' - && name[2] == 'b' - && !strncmp (name + 3, "uiltin_", 7)) - tname += 10; - else if (name[1] == '_' && name[2] == 'x') + if (name[1] == '_' && name[2] == 'x') tname += 3; else if (name[1] == '_') tname += 2;