This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Patch RFA: With -fnon-call-exceptions sync builtins may throw


On Mon, Nov 4, 2013 at 3:52 AM, Richard Biener
<richard.guenther@gmail.com> wrote:
> On Mon, Nov 4, 2013 at 7:01 AM, Ian Lance Taylor <iant@google.com> wrote:
>> The middle-end currently marks all the sync builtins as nothrow.  That
>> is incorrect for most of them when using -fnon-call-exceptions.  The
>> -fnon-call-exceptions option means that instructions that trap may throw
>> exceptions.  Most of the sync builtins access memory via pointers passed
>> by user code.  Therefore, they may trap.  (I noticed this because Go
>> uses -fnon-call-exceptions.)
>>
>> This patch fixes the problem by introducing a new internal function
>> attribute "nothrow call".  The new attribute is exactly like "nothrow",
>> except that it is ignored when using -fnon-call-exceptions.
>>
>> It is an internal attribute because there is no reason for a user to use
>> this.  The problem only arises when the middle-end sees a function call
>> that the backend turns into an instruction sequence that directly
>> references memory.  That can only happen for functions that are built in
>> to the compiler.
>>
>> This requires changes to the C family, LTO, and Ada frontends.  I think
>> I'm handling the option correctly for LTO, but it would be good if
>> somebody could check the logic for me.
>>
>> Bootstrapped and ran tests on x86_64-unknown-linux-gnu.  OK for
>> mainline?
>
> Hmm.  I think you can handle this in a simpler way by just
> doing sth similar to
>
> #define ATTR_MATHFN_FPROUNDING_ERRNO (flag_errno_math ? \
>         ATTR_NOTHROW_LEAF_LIST : ATTR_MATHFN_FPROUNDING)
>
> that is, conditionally drop the _NOTHROW part.

Good point.

> Btw, I also think
> that if it can throw then it isn't LEAF (it may return exceptionally
> into another function in the unit).

According to the docs, a "leaf" function is permitted to return by
throwing an exception.

> Also this whole conditional-on-a-flag thing doesn't work well with
> using -fnon-call-exceptions in the optimize attribute or with
> different -fnon-call-exceptions settings in different TUs we LTO
> together.  Because we only have a single builtin decl (so for
> "proper" operation you'd have to clone builtin decls based on
> the matrix of flags that generate different attributes and use the
> correct one depending on context).

Yes, but as you know this problem already exists with -fexceptions.
I'm not really making it worse.

> That said, I'd prefer a simpler approach for now, mimicing flag_errno_math
> handling.

Done.  Attached.  Bootstrapped on x86_64-unknown-linux-gnu, running
tests now.  OK for mainline if the tests pass?

Ian


gcc/ChangeLog:

2013-11-04  Ian Lance Taylor  <iant@google.com>

	* builtins.def (ATTR_NOTHROWCALL_LEAF_LIST): Define.
	* sync-builtins.def: Use ATTR_NOTHROWCALL_LEAF_LIST for all sync
	builtins that take pointers.
	* lto-opts.c (lto_write_options): Write -fnon-call-exceptions
	if set.
	* lto-wrapper.c (merge_and_complain): Collect
	OPT_fnon_call_exceptions.
	(run_gcc): Pass -fnon-call-exceptions.

gcc/testsuite/ChangeLog:

2013-11-03  Ian Lance Taylor  <iant@google.com>

	* g++.dg/ext/sync-4.C: New test.
Index: lto-wrapper.c
===================================================================
--- lto-wrapper.c	(revision 204343)
+++ lto-wrapper.c	(working copy)
@@ -409,6 +409,7 @@ merge_and_complain (struct cl_decoded_op
 	case OPT_fpie:
 	case OPT_fcommon:
 	case OPT_fexceptions:
+	case OPT_fnon_call_exceptions:
 	case OPT_fgnu_tm:
 	  /* Do what the old LTO code did - collect exactly one option
 	     setting per OPT code, we pick the first we encounter.
@@ -573,6 +574,7 @@ run_gcc (unsigned argc, char *argv[])
 	case OPT_fpie:
 	case OPT_fcommon:
 	case OPT_fexceptions:
+	case OPT_fnon_call_exceptions:
 	case OPT_fgnu_tm:
 	case OPT_freg_struct_return:
 	case OPT_fpcc_struct_return:
Index: testsuite/g++.dg/ext/sync-4.C
===================================================================
--- testsuite/g++.dg/ext/sync-4.C	(revision 0)
+++ testsuite/g++.dg/ext/sync-4.C	(revision 0)
@@ -0,0 +1,121 @@
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
+
+/* Verify that the builtin functions are correctly marked as trapping
+   when using -fnon-call-exceptions.  */
+
+#include <stdlib.h>
+#include <signal.h>
+
+typedef int int32_t __attribute__ ((mode (SI)));
+typedef int int64_t __attribute__ ((mode (DI)));
+
+#define FN(IDX, RET, CALL)					\
+static RET f ## IDX (void *p) __attribute__ ((noinline));	\
+static RET							\
+f ## IDX (void *p)						\
+{								\
+  return CALL;							\
+}								\
+static void							\
+t ## IDX ()							\
+{								\
+  try								\
+    {								\
+      f ## IDX(0);						\
+    }								\
+  catch (...)							\
+    {								\
+      return;							\
+    }								\
+  abort();							\
+}
+
+FN(1, int64_t, (__sync_fetch_and_add((int64_t*)p, 1)))
+FN(2, int64_t, (__sync_fetch_and_sub((int64_t*)p, 1)))
+FN(3, int64_t, (__sync_fetch_and_or((int64_t*)p, 1)))
+FN(4, int64_t, (__sync_fetch_and_and((int64_t*)p, 1)))
+FN(5, int64_t, (__sync_fetch_and_xor((int64_t*)p, 1)))
+FN(6, int64_t, (__sync_fetch_and_nand((int64_t*)p, 1)))
+
+FN( 7, int64_t, (__sync_add_and_fetch((int64_t*)p, 1)))
+FN( 8, int64_t, (__sync_sub_and_fetch((int64_t*)p, 1)))
+FN( 9, int64_t, (__sync_or_and_fetch((int64_t*)p, 1)))
+FN(10, int64_t, (__sync_and_and_fetch((int64_t*)p, 1)))
+FN(11, int64_t, (__sync_xor_and_fetch((int64_t*)p, 1)))
+FN(12, int64_t, (__sync_nand_and_fetch((int64_t*)p, 1)))
+
+FN(13, bool, (__sync_bool_compare_and_swap((int64_t*)p, 1, 2)))
+FN(14, int64_t, (__sync_val_compare_and_swap((int64_t*)p, 1, 2)))
+
+FN(15, int64_t, (__sync_lock_test_and_set((int64_t*)p, 1)))
+FN(16, void, (__sync_lock_release((int64_t*)p)))
+
+FN(17, bool, (__atomic_test_and_set((int64_t*)p, __ATOMIC_SEQ_CST)))
+FN(18, void, (__atomic_clear((int64_t*)p, __ATOMIC_SEQ_CST)))
+
+FN(19, void, (__atomic_exchange((int64_t*)p, (int64_t*)0, (int64_t*)0, __ATOMIC_SEQ_CST)))
+FN(20, int64_t, (__atomic_exchange_n((int64_t*)p, 1, 2)))
+
+FN(21, void, (__atomic_load((int64_t*)p, (int64_t*)0, __ATOMIC_SEQ_CST)))
+FN(22, int64_t, (__atomic_load_n((int64_t*)p, __ATOMIC_SEQ_CST)))
+
+FN(23, bool, (__atomic_compare_exchange((int64_t*)p, (int64_t*)0, (int64_t*)0, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)))
+FN(24, bool, (__atomic_compare_exchange_n((int64_t*)p, (int64_t*)0, 1, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)))
+
+FN(25, void, (__atomic_store((int64_t*)p, (int64_t*)0, __ATOMIC_SEQ_CST)))
+FN(26, void, (__atomic_store_n((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+
+FN(27, int64_t, (__atomic_add_fetch((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(28, int64_t, (__atomic_sub_fetch((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(29, int64_t, (__atomic_and_fetch((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(30, int64_t, (__atomic_nand_fetch((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(31, int64_t, (__atomic_xor_fetch((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(32, int64_t, (__atomic_or_fetch((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+
+FN(33, int64_t, (__atomic_fetch_add((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(34, int64_t, (__atomic_fetch_sub((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(35, int64_t, (__atomic_fetch_and((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(36, int64_t, (__atomic_fetch_nand((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(37, int64_t, (__atomic_fetch_xor((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+FN(38, int64_t, (__atomic_fetch_or((int64_t*)p, 1, __ATOMIC_SEQ_CST)))
+
+static void
+handler(int)
+{
+  sigset_t clear;
+
+  sigfillset (&clear);
+  sigprocmask (SIG_UNBLOCK, &clear, NULL);
+  throw 0;
+}
+
+int
+main ()
+{
+  signal (SIGSEGV, handler);
+  signal (SIGBUS, handler);
+
+  t1();
+  t2();
+  t3();
+  t4();
+  t5();
+  t6();
+  t7();
+  t8();
+  t9();
+  t10();
+  t11();
+  t12();
+  t13();
+  t14();
+  t15();
+  t16();
+  t17();
+  t18();
+  t19();
+  t20();
+
+  exit(0);
+}
Index: builtins.def
===================================================================
--- builtins.def	(revision 204343)
+++ builtins.def	(working copy)
@@ -213,6 +213,12 @@ along with GCC; see the file COPYING3.
 #undef ATTR_MATHFN_FPROUNDING_STORE
 #define ATTR_MATHFN_FPROUNDING_STORE ATTR_NOTHROW_LEAF_LIST
 
+/* Define an attribute list for leaf functions that do not throw
+   exceptions normally, but may throw exceptions when using
+   -fnon-call-exceptions.  */
+#define ATTR_NOTHROWCALL_LEAF_LIST (flag_non_call_exceptions ? \
+	ATTR_LEAF_LIST : ATTR_NOTHROW_LEAF_LIST)
+
 /* Make sure 0 is not a legitimate builtin.  */
 DEF_BUILTIN_STUB(BUILT_IN_NONE, (const char *)0)
 
Index: sync-builtins.def
===================================================================
--- sync-builtins.def	(revision 204343)
+++ sync-builtins.def	(working copy)
@@ -29,559 +29,565 @@ along with GCC; see the file COPYING3.
    "_1" through "_16" versions, plus some extra casts.  */
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_N, "__sync_fetch_and_add",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_1, "__sync_fetch_and_add_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_2, "__sync_fetch_and_add_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_4, "__sync_fetch_and_add_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_8, "__sync_fetch_and_add_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_16, "__sync_fetch_and_add_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_N, "__sync_fetch_and_sub",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_16, "__sync_fetch_and_sub_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_N, "__sync_fetch_and_or",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_1, "__sync_fetch_and_or_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_2, "__sync_fetch_and_or_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_4, "__sync_fetch_and_or_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_8, "__sync_fetch_and_or_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_16, "__sync_fetch_and_or_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_N, "__sync_fetch_and_and",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_1, "__sync_fetch_and_and_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_2, "__sync_fetch_and_and_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_4, "__sync_fetch_and_and_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_8, "__sync_fetch_and_and_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_16, "__sync_fetch_and_and_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_N, "__sync_fetch_and_xor",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_16, "__sync_fetch_and_xor_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_N, "__sync_fetch_and_nand",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_16, "__sync_fetch_and_nand_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_N, "__sync_add_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_1, "__sync_add_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_2, "__sync_add_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_4, "__sync_add_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_8, "__sync_add_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_16, "__sync_add_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_N, "__sync_sub_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_16, "__sync_sub_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_N, "__sync_or_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_1, "__sync_or_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_2, "__sync_or_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_4, "__sync_or_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_8, "__sync_or_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_16, "__sync_or_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_N, "__sync_and_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_1, "__sync_and_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_2, "__sync_and_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_4, "__sync_and_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_8, "__sync_and_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_16, "__sync_and_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_N, "__sync_xor_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_16, "__sync_xor_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_N, "__sync_nand_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_16, "__sync_nand_and_fetch_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N,
 		  "__sync_bool_compare_and_swap",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1,
 		  "__sync_bool_compare_and_swap_1",
-		  BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2,
 		  "__sync_bool_compare_and_swap_2",
-		  BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4,
 		  "__sync_bool_compare_and_swap_4",
-		  BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8,
 		  "__sync_bool_compare_and_swap_8",
-		  BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16,
 		  "__sync_bool_compare_and_swap_16",
-		  BT_FN_BOOL_VPTR_I16_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_N,
 		  "__sync_val_compare_and_swap",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1,
 		  "__sync_val_compare_and_swap_1",
-		  BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2,
 		  "__sync_val_compare_and_swap_2",
-		  BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4,
 		  "__sync_val_compare_and_swap_4",
-		  BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8,
 		  "__sync_val_compare_and_swap_8",
-		  BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16,
 		  "__sync_val_compare_and_swap_16",
-		  BT_FN_I16_VPTR_I16_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_N,
 		  "__sync_lock_test_and_set",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_1,
 		  "__sync_lock_test_and_set_1",
-		  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_2,
 		  "__sync_lock_test_and_set_2",
-		  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_4,
 		  "__sync_lock_test_and_set_4",
-		  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_8,
 		  "__sync_lock_test_and_set_8",
-		  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_16,
 		  "__sync_lock_test_and_set_16",
-		  BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_N, "__sync_lock_release",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_1, "__sync_lock_release_1",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_2, "__sync_lock_release_2",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_4, "__sync_lock_release_4",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_8, "__sync_lock_release_8",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_16, "__sync_lock_release_16",
-		  BT_FN_VOID_VPTR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SYNCHRONIZE, "__sync_synchronize",
-		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID, ATTR_NOTHROWCALL_LEAF_LIST)
 
 /* __sync* builtins for the C++ memory model.  */
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_TEST_AND_SET, "__atomic_test_and_set",
-		  BT_FN_BOOL_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_CLEAR, "__atomic_clear", BT_FN_VOID_VPTR_INT,
-		  ATTR_NOTHROW_LEAF_LIST)
+		  ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE,
 		  "__atomic_exchange",
-		  BT_FN_VOID_SIZE_VPTR_PTR_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_SIZE_VPTR_PTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_N,
 		  "__atomic_exchange_n",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_1,
 		  "__atomic_exchange_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_2,
 		  "__atomic_exchange_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_4,
 		  "__atomic_exchange_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_8,
 		  "__atomic_exchange_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_16,
 		  "__atomic_exchange_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD,
 		  "__atomic_load",
-		  BT_FN_VOID_SIZE_CONST_VPTR_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_SIZE_CONST_VPTR_PTR_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_N,
 		  "__atomic_load_n",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_1,
 		  "__atomic_load_1",
-		  BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_2,
 		  "__atomic_load_2",
-		  BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_4,
 		  "__atomic_load_4",
-		  BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_8,
 		  "__atomic_load_8",
-		  BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_16,
 		  "__atomic_load_16",
-		  BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE,
 		  "__atomic_compare_exchange",
 		  BT_FN_BOOL_SIZE_VPTR_PTR_PTR_INT_INT,
-		  ATTR_NOTHROW_LEAF_LIST)
+		  ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N,
 		  "__atomic_compare_exchange_n",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1,
 		  "__atomic_compare_exchange_1",
-		  BT_FN_BOOL_VPTR_PTR_I1_BOOL_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_PTR_I1_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2,
 		  "__atomic_compare_exchange_2",
-		  BT_FN_BOOL_VPTR_PTR_I2_BOOL_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_PTR_I2_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4,
 		  "__atomic_compare_exchange_4",
-		  BT_FN_BOOL_VPTR_PTR_I4_BOOL_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_PTR_I4_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8,
 		  "__atomic_compare_exchange_8",
-		  BT_FN_BOOL_VPTR_PTR_I8_BOOL_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_PTR_I8_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16,
 		  "__atomic_compare_exchange_16",
-		  BT_FN_BOOL_VPTR_PTR_I16_BOOL_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_BOOL_VPTR_PTR_I16_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE,
 		  "__atomic_store",
-		  BT_FN_VOID_SIZE_VPTR_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_SIZE_VPTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_N,
 		  "__atomic_store_n",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_1,
 		  "__atomic_store_1",
-		  BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_2,
 		  "__atomic_store_2",
-		  BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_4,
 		  "__atomic_store_4",
-		  BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_8,
 		  "__atomic_store_8",
-		  BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_16,
 		  "__atomic_store_16",
-		  BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_N,
 		  "__atomic_add_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_1,
 		  "__atomic_add_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_2,
 		  "__atomic_add_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_4,
 		  "__atomic_add_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_8,
 		  "__atomic_add_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_16,
 		  "__atomic_add_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_N,
 		  "__atomic_sub_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_1,
 		  "__atomic_sub_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_2,
 		  "__atomic_sub_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_4,
 		  "__atomic_sub_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_8,
 		  "__atomic_sub_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_16,
 		  "__atomic_sub_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_N,
 		  "__atomic_and_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_1,
 		  "__atomic_and_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_2,
 		  "__atomic_and_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_4,
 		  "__atomic_and_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_8,
 		  "__atomic_and_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_16,
 		  "__atomic_and_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_N,
 		  "__atomic_nand_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_1,
 		  "__atomic_nand_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_2,
 		  "__atomic_nand_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_4,
 		  "__atomic_nand_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_8,
 		  "__atomic_nand_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_16,
 		  "__atomic_nand_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_N,
 		  "__atomic_xor_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_1,
 		  "__atomic_xor_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_2,
 		  "__atomic_xor_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_4,
 		  "__atomic_xor_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_8,
 		  "__atomic_xor_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_16,
 		  "__atomic_xor_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_N,
 		  "__atomic_or_fetch",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_1,
 		  "__atomic_or_fetch_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_2,
 		  "__atomic_or_fetch_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_4,
 		  "__atomic_or_fetch_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_8,
 		  "__atomic_or_fetch_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_16,
 		  "__atomic_or_fetch_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_N,
 		  "__atomic_fetch_add",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_1,
 		  "__atomic_fetch_add_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_2,
 		  "__atomic_fetch_add_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_4,
 		  "__atomic_fetch_add_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_8,
 		  "__atomic_fetch_add_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_16,
 		  "__atomic_fetch_add_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_N,
 		  "__atomic_fetch_sub",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_1,
 		  "__atomic_fetch_sub_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_2,
 		  "__atomic_fetch_sub_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_4,
 		  "__atomic_fetch_sub_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_8,
 		  "__atomic_fetch_sub_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_16,
 		  "__atomic_fetch_sub_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_N,
 		  "__atomic_fetch_and",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_1,
 		  "__atomic_fetch_and_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_2,
 		  "__atomic_fetch_and_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_4,
 		  "__atomic_fetch_and_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_8,
 		  "__atomic_fetch_and_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_16,
 		  "__atomic_fetch_and_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_N,
 		  "__atomic_fetch_nand",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_1,
 		  "__atomic_fetch_nand_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_2,
 		  "__atomic_fetch_nand_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_4,
 		  "__atomic_fetch_nand_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_8,
 		  "__atomic_fetch_nand_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_16,
 		  "__atomic_fetch_nand_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_N,
 		  "__atomic_fetch_xor",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_1,
 		  "__atomic_fetch_xor_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_2,
 		  "__atomic_fetch_xor_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_4,
 		  "__atomic_fetch_xor_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_8,
 		  "__atomic_fetch_xor_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_16,
 		  "__atomic_fetch_xor_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_N,
 		  "__atomic_fetch_or",
-		  BT_FN_VOID_VAR, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_1,
 		  "__atomic_fetch_or_1",
-		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_2,
 		  "__atomic_fetch_or_2",
-		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_4,
 		  "__atomic_fetch_or_4",
-		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_8,
 		  "__atomic_fetch_or_8",
-		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_16,
 		  "__atomic_fetch_or_16",
-		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
 
 DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE,
 		  "__atomic_always_lock_free",
Index: lto-opts.c
===================================================================
--- lto-opts.c	(revision 204343)
+++ lto-opts.c	(working copy)
@@ -77,7 +77,7 @@ lto_write_options (void)
 
   obstack_init (&temporary_obstack);
 
-  /* Output options that affect GIMPLE IL semantics and are implicitely
+  /* Output options that affect GIMPLE IL semantics and are implicitly
      enabled by the frontend.
      This for now includes an explicit set of options that we also handle
      explicitly in lto-wrapper.c.  In the end the effects on GIMPLE IL
@@ -88,8 +88,13 @@ lto_write_options (void)
   if (global_options.x_flag_exceptions)
     append_to_collect_gcc_options (&temporary_obstack, &first_p,
 				   "-fexceptions");
+  /* -fnon-call-exceptions changes the generation of exception
+      regions.  It is enabled implicitly by the Go frontend.  */
+  if (global_options.x_flag_non_call_exceptions)
+    append_to_collect_gcc_options (&temporary_obstack, &first_p,
+				   "-fnon-call-exceptions");
 
-  /* Output explicitely passed options.  */
+  /* Output explicitly passed options.  */
   for (i = 1; i < save_decoded_options_count; ++i)
     {
       struct cl_decoded_option *option = &save_decoded_options[i];

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]