OSDN Git Service

PR lto/51698
authoraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 25 Jan 2012 20:32:57 +0000 (20:32 +0000)
committeraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 25 Jan 2012 20:32:57 +0000 (20:32 +0000)
        * builtin-types.def: (BT_CONST_DOUBLE_PTR): New.
        (BT_FN_VOID_PTR_CONST_PTR_SIZE): New.
        (BT_FN_VOID_PTR_INT_SIZE): New.
        (BT_FN_UINT_UINT_VAR): Remove.
        (BT_FN_UINT32_UINT32_VAR): New.
        (BT_FN_DOUBLE_VPTR): Remove.
        (BT_FN_DOUBLE_CONST_DOUBLE_PTR): New.
        * gtm-builtins.def (_ITM_abortTransaction): Set return type to
        void.
        (_ITM_changeTransactionMode): Same.
        (_ITM_memmoveRtWt): Change return type to void.
        (_ITM_memcpyRtWt): Same.
        (_ITM_memsetW): Same.
        (_ITM_RaRD): Change types to double.
        (_ITM_RD): Same.
        (_ITM_RaWD): Same.
        (_ITM_RfWD): Same.
        * builtins.def (DEF_TM_BUILTIN): Set BOTH_P to true.
testsuite/
        PR lto/51698
        * gcc.dg/lto/trans-mem-4_0.c: New.
        * gcc.dg/lto/trans-mem-4_1.c: New.
        * gcc.dg/lto/trans-mem-2_0.c: Provide correct argument types for
        TM builtins.
        * gcc.dg/lto/trans-mem-1_0.c: Require stdint_types.
        * gcc.dg/lto/trans-mem-1_1.c: Provide correct argument types for
        TM builtins.
        * gcc.dg/lto/trans-mem-3_0.c: Require stdint_types.
        * gcc.dg/lto/trans-mem-3_1.c: Provide correct argument types for
        TM builtins.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183537 138bc75d-0d04-0410-961f-82ee72b054a4

12 files changed:
gcc/ChangeLog
gcc/builtin-types.def
gcc/builtins.def
gcc/gtm-builtins.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/lto/trans-mem-1_0.c
gcc/testsuite/gcc.dg/lto/trans-mem-1_1.c
gcc/testsuite/gcc.dg/lto/trans-mem-2_0.c
gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c
gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c [new file with mode: 0644]

index 81ab217..a044b13 100644 (file)
        to effect no-op split.
 
 2012-01-24  Aldy Hernandez  <aldyh@redhat.com>
        to effect no-op split.
 
 2012-01-24  Aldy Hernandez  <aldyh@redhat.com>
+
+       PR lto/51698
+       * builtin-types.def: (BT_CONST_DOUBLE_PTR): New.
+       (BT_FN_VOID_PTR_CONST_PTR_SIZE): New.
+       (BT_FN_VOID_PTR_INT_SIZE): New.
+       (BT_FN_UINT_UINT_VAR): Remove.
+       (BT_FN_UINT32_UINT32_VAR): New.
+       (BT_FN_DOUBLE_VPTR): Remove.
+       (BT_FN_DOUBLE_CONST_DOUBLE_PTR): New.
+
+       * gtm-builtins.def (_ITM_abortTransaction): Set return type to
+       void.
+       (_ITM_changeTransactionMode): Same.
+       (_ITM_memmoveRtWt): Change return type to void.
+       (_ITM_memcpyRtWt): Same.
+       (_ITM_memsetW): Same.
+       (_ITM_RaRD): Change types to double.
+       (_ITM_RD): Same.
+       (_ITM_RaWD): Same.
+       (_ITM_RfWD): Same.
+
+       * builtins.def (DEF_TM_BUILTIN): Set BOTH_P to true.
+
+2012-01-24  Aldy Hernandez  <aldyh@redhat.com>
            Patrick Marlier  <patrick.marlier@gmail.com>
 
        * trans-mem.c (requires_barrier): Do not instrument thread local
            Patrick Marlier  <patrick.marlier@gmail.com>
 
        * trans-mem.c (requires_barrier): Do not instrument thread local
index 3a05b3b..fd37c2c 100644 (file)
@@ -103,6 +103,10 @@ DEF_PRIMITIVE_TYPE (BT_PTRMODE, (*lang_hooks.types.type_for_mode)(ptr_mode, 0))
 DEF_PRIMITIVE_TYPE (BT_INT_PTR, integer_ptr_type_node)
 DEF_PRIMITIVE_TYPE (BT_FLOAT_PTR, float_ptr_type_node)
 DEF_PRIMITIVE_TYPE (BT_DOUBLE_PTR, double_ptr_type_node)
 DEF_PRIMITIVE_TYPE (BT_INT_PTR, integer_ptr_type_node)
 DEF_PRIMITIVE_TYPE (BT_FLOAT_PTR, float_ptr_type_node)
 DEF_PRIMITIVE_TYPE (BT_DOUBLE_PTR, double_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_CONST_DOUBLE_PTR,
+                   build_pointer_type
+                    (build_qualified_type (double_type_node,
+                                           TYPE_QUAL_CONST)))
 DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE_PTR, long_double_ptr_type_node)
 DEF_PRIMITIVE_TYPE (BT_PID, pid_type_node)
 DEF_PRIMITIVE_TYPE (BT_SIZE, size_type_node)
 DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE_PTR, long_double_ptr_type_node)
 DEF_PRIMITIVE_TYPE (BT_PID, pid_type_node)
 DEF_PRIMITIVE_TYPE (BT_SIZE, size_type_node)
@@ -342,10 +346,14 @@ DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
                     BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
                     BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
                     BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
                     BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_CONST_PTR_SIZE,
+                    BT_VOID, BT_PTR, BT_CONST_PTR, BT_SIZE)
 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
                     BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
                     BT_PTR, BT_PTR, BT_INT, BT_SIZE)
 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
                     BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
                     BT_PTR, BT_PTR, BT_INT, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_SIZE,
+                    BT_VOID, BT_PTR, BT_INT, BT_SIZE)
 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT,
                     BT_VOID, BT_PTR, BT_INT, BT_INT)
 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_CONST_PTR_PTR_SIZE,
 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT,
                     BT_VOID, BT_PTR, BT_INT, BT_INT)
 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_CONST_PTR_PTR_SIZE,
@@ -498,8 +506,8 @@ DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
                         BT_VOID, BT_CONST_PTR)
 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
                         BT_INT, BT_CONST_STRING)
                         BT_VOID, BT_CONST_PTR)
 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
                         BT_INT, BT_CONST_STRING)
-DEF_FUNCTION_TYPE_VAR_1 (BT_FN_UINT_UINT_VAR,
-                        BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_UINT32_UINT32_VAR,
+                        BT_UINT32, BT_UINT32)
 
 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_FILEPTR_CONST_STRING_VAR,
                         BT_INT, BT_FILEPTR, BT_CONST_STRING)
 
 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_FILEPTR_CONST_STRING_VAR,
                         BT_INT, BT_FILEPTR, BT_CONST_STRING)
@@ -539,7 +547,7 @@ DEF_FUNCTION_TYPE_1 (BT_FN_I2_VPTR, BT_I2, BT_VOLATILE_PTR)
 DEF_FUNCTION_TYPE_1 (BT_FN_I4_VPTR, BT_I4, BT_VOLATILE_PTR)
 DEF_FUNCTION_TYPE_1 (BT_FN_I8_VPTR, BT_I8, BT_VOLATILE_PTR)
 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_VPTR, BT_FLOAT, BT_VOLATILE_PTR)
 DEF_FUNCTION_TYPE_1 (BT_FN_I4_VPTR, BT_I4, BT_VOLATILE_PTR)
 DEF_FUNCTION_TYPE_1 (BT_FN_I8_VPTR, BT_I8, BT_VOLATILE_PTR)
 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_VPTR, BT_FLOAT, BT_VOLATILE_PTR)
-DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_VPTR, BT_DOUBLE, BT_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_CONST_DOUBLE_PTR, BT_DOUBLE, BT_DOUBLE_PTR)
 DEF_FUNCTION_TYPE_1 (BT_FN_LDOUBLE_VPTR, BT_LONGDOUBLE, BT_VOLATILE_PTR)
 
 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_I1, BT_VOID, BT_VOLATILE_PTR, BT_I1)
 DEF_FUNCTION_TYPE_1 (BT_FN_LDOUBLE_VPTR, BT_LONGDOUBLE, BT_VOLATILE_PTR)
 
 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_I1, BT_VOID, BT_VOLATILE_PTR, BT_I1)
index b5ddace..0fb9286 100644 (file)
@@ -147,7 +147,7 @@ along with GCC; see the file COPYING3.  If not see
 #undef DEF_TM_BUILTIN
 #define DEF_TM_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
 #undef DEF_TM_BUILTIN
 #define DEF_TM_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-              false, true, true, ATTRS, false, flag_tm)
+              true, true, true, ATTRS, false, flag_tm)
 
 /* Define an attribute list for math functions that are normally
    "impure" because some of them may write into global memory for
 
 /* Define an attribute list for math functions that are normally
    "impure" because some of them may write into global memory for
index 77b320c..171019e 100644 (file)
@@ -1,21 +1,21 @@
 DEF_TM_BUILTIN (BUILT_IN_TM_START, "_ITM_beginTransaction",
 DEF_TM_BUILTIN (BUILT_IN_TM_START, "_ITM_beginTransaction",
-               BT_FN_UINT_UINT_VAR, ATTR_TM_NOTHROW_RT_LIST)
+               BT_FN_UINT32_UINT32_VAR, ATTR_TM_NOTHROW_RT_LIST)
 
 DEF_TM_BUILTIN (BUILT_IN_TM_COMMIT, "_ITM_commitTransaction",
                BT_FN_VOID, ATTR_TM_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_COMMIT_EH, "_ITM_commitTransactionEH",
                BT_FN_VOID_PTR, ATTR_TM_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_ABORT, "_ITM_abortTransaction",
 
 DEF_TM_BUILTIN (BUILT_IN_TM_COMMIT, "_ITM_commitTransaction",
                BT_FN_VOID, ATTR_TM_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_COMMIT_EH, "_ITM_commitTransactionEH",
                BT_FN_VOID_PTR, ATTR_TM_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_ABORT, "_ITM_abortTransaction",
-               BT_FN_INT, ATTR_TM_NORETURN_NOTHROW_LIST)
+               BT_FN_VOID_INT, ATTR_TM_NORETURN_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_IRREVOCABLE, "_ITM_changeTransactionMode",
 DEF_TM_BUILTIN (BUILT_IN_TM_IRREVOCABLE, "_ITM_changeTransactionMode",
-               BT_FN_INT_INT, ATTR_TM_NOTHROW_LIST)
+               BT_FN_VOID_INT, ATTR_TM_NOTHROW_LIST)
 
 DEF_TM_BUILTIN (BUILT_IN_TM_MEMCPY, "_ITM_memcpyRtWt",
 
 DEF_TM_BUILTIN (BUILT_IN_TM_MEMCPY, "_ITM_memcpyRtWt",
-               BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+               BT_FN_VOID_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_MEMMOVE, "_ITM_memmoveRtWt",
 DEF_TM_BUILTIN (BUILT_IN_TM_MEMMOVE, "_ITM_memmoveRtWt",
-               BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+               BT_FN_VOID_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_MEMSET, "_ITM_memsetW",
 DEF_TM_BUILTIN (BUILT_IN_TM_MEMSET, "_ITM_memsetW",
-               BT_FN_PTR_PTR_INT_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+               BT_FN_VOID_PTR_INT_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
 
 DEF_TM_BUILTIN (BUILT_IN_TM_GETTMCLONE_IRR, "_ITM_getTMCloneOrIrrevocable",
                BT_FN_PTR_PTR, ATTR_TM_CONST_NOTHROW_LIST)
 
 DEF_TM_BUILTIN (BUILT_IN_TM_GETTMCLONE_IRR, "_ITM_getTMCloneOrIrrevocable",
                BT_FN_PTR_PTR, ATTR_TM_CONST_NOTHROW_LIST)
@@ -172,13 +172,13 @@ DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_FLOAT, "_ITM_RfWF",
                BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
 
 DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_DOUBLE, "_ITM_RD",
                BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
 
 DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_DOUBLE, "_ITM_RD",
-               BT_FN_DOUBLE_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+               BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_DOUBLE, "_ITM_RaRD",
 DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_DOUBLE, "_ITM_RaRD",
-               BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+               BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_DOUBLE, "_ITM_RaWD",
 DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_DOUBLE, "_ITM_RaWD",
-               BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+               BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
 DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_DOUBLE, "_ITM_RfWD",
 DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_DOUBLE, "_ITM_RfWD",
-               BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+               BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
 
 /* These stubs should get defined in the backend if applicable.  */
 DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_M64, "__builtin__ITM_RM64")
 
 /* These stubs should get defined in the backend if applicable.  */
 DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_M64, "__builtin__ITM_RM64")
index c135376..60e392b 100644 (file)
@@ -1,3 +1,17 @@
+2012-01-25  Aldy Hernandez  <aldyh@redhat.com>
+
+       PR lto/51698
+       * gcc.dg/lto/trans-mem-4_0.c: New.
+       * gcc.dg/lto/trans-mem-4_1.c: New.
+       * gcc.dg/lto/trans-mem-2_0.c: Provide correct argument types for
+       TM builtins.
+       * gcc.dg/lto/trans-mem-1_0.c: Require stdint_types.
+       * gcc.dg/lto/trans-mem-1_1.c: Provide correct argument types for
+       TM builtins.
+       * gcc.dg/lto/trans-mem-3_0.c: Require stdint_types.
+       * gcc.dg/lto/trans-mem-3_1.c: Provide correct argument types for
+       TM builtins.
+
 2012-01-25    Georg-Johann Lay  <avr@gjlay.de>
 
        * gcc.target/avr/torture/int24-mul.c: Rename __pgm to __flash.
 2012-01-25    Georg-Johann Lay  <avr@gjlay.de>
 
        * gcc.target/avr/torture/int24-mul.c: Rename __pgm to __flash.
index 87060cc..556c99b 100644 (file)
@@ -1,5 +1,6 @@
 /* { dg-lto-options {{-flto -fgnu-tm}} } */
 /* { dg-lto-do link } */
 /* { dg-lto-options {{-flto -fgnu-tm}} } */
 /* { dg-lto-do link } */
+/* { dg-require-effective-target stdint_types } */
 
 int i;
 
 
 int i;
 
index cb80f32..6dba252 100644 (file)
@@ -1,9 +1,10 @@
-#define dummy(func) \
-  __attribute__((noinline,noclone,used)) void func() { asm (""); }
+#include <stdint.h>
 
 
-dummy(_ITM_beginTransaction)
-dummy(_ITM_commitTransaction)
-dummy(_ITM_WU4)
-dummy(_ITM_WU8)
-dummy(_ITM_registerTMCloneTable)
-dummy(_ITM_deregisterTMCloneTable)
+#define noinline __attribute__((noinline,noclone,used))
+
+noinline uint32_t _ITM_beginTransaction(uint32_t a, ...) { asm(""); }
+noinline void _ITM_commitTransaction (void) { asm(""); }
+noinline void _ITM_WU4 (void *a, uint32_t b) { asm(""); }
+noinline void _ITM_WU8 (void *a, uint64_t b) { asm(""); }
+noinline void _ITM_registerTMCloneTable (void) { asm(""); }
+noinline void _ITM_deregisterTMCloneTable (void) { asm(""); }
index 301a711..b99c5bf 100644 (file)
@@ -1,17 +1,19 @@
 /* { dg-lto-options {{-flto -fgnu-tm}} } */
 /* { dg-lto-do link } */
 /* { dg-lto-options {{-flto -fgnu-tm}} } */
 /* { dg-lto-do link } */
+/* { dg-require-effective-target stdint_types } */
+
+#include <stdint.h>
 
 extern void foobar() __attribute__((transaction_callable));
 
 
 extern void foobar() __attribute__((transaction_callable));
 
-#define dummy(func) \
-  __attribute__((noinline,noclone,used)) void func() { asm (""); }
+#define noinline __attribute__((noinline,noclone,used))
 
 
-dummy(_ITM_beginTransaction)
-dummy(_ITM_commitTransaction)
-dummy(_ITM_WU4)
-dummy(_ITM_WU8)
-dummy(_ITM_registerTMCloneTable)
-dummy(_ITM_deregisterTMCloneTable)
+noinline uint32_t _ITM_beginTransaction(uint32_t a, ...) { asm(""); }
+noinline void _ITM_commitTransaction (void) { asm(""); }
+noinline void _ITM_WU4 (void *a, uint32_t b) { asm(""); }
+noinline void _ITM_WU8 (void *a, uint64_t b) { asm(""); }
+noinline void _ITM_registerTMCloneTable (void) { asm(""); }
+noinline void _ITM_deregisterTMCloneTable (void) { asm(""); }
 
 main()
 {
 
 main()
 {
index dd57890..8a5ca75 100644 (file)
@@ -1,5 +1,6 @@
 /* { dg-lto-options {{-flto}} } */
 /* { dg-lto-do link } */
 /* { dg-lto-options {{-flto}} } */
 /* { dg-lto-do link } */
+/* { dg-require-effective-target stdint_types } */
 
 /* Test that we can build one object file with -fgnu-tm
    (trans-mem-3_1.c), but do the final link of all objects without
 
 /* Test that we can build one object file with -fgnu-tm
    (trans-mem-3_1.c), but do the final link of all objects without
index d907f68..6373ecc 100644 (file)
@@ -1,5 +1,7 @@
 /* { dg-options "-fgnu-tm" } */
 
 /* { dg-options "-fgnu-tm" } */
 
+#include <stdint.h>
+
 extern int i;
 
 main()
 extern int i;
 
 main()
@@ -7,12 +9,11 @@ main()
   __transaction_atomic { i = 0; }
 }
 
   __transaction_atomic { i = 0; }
 }
 
-#define dummy(func)                                                    \
-  __attribute__((noinline,noclone,used)) void func() { asm (""); }
+#define noinline __attribute__((noinline,noclone,used))
 
 
-dummy(_ITM_beginTransaction)
-dummy(_ITM_commitTransaction)
-dummy(_ITM_WU4)
-dummy(_ITM_WU8)
-dummy(_ITM_registerTMCloneTable)
-dummy(_ITM_deregisterTMCloneTable)
+noinline uint32_t _ITM_beginTransaction(uint32_t a, ...) { asm(""); }
+noinline void _ITM_commitTransaction (void) { asm(""); }
+noinline void _ITM_WU4 (void *a, uint32_t b) { asm(""); }
+noinline void _ITM_WU8 (void *a, uint64_t b) { asm(""); }
+noinline void _ITM_registerTMCloneTable (void) { asm(""); }
+noinline void _ITM_deregisterTMCloneTable (void) { asm(""); }
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c b/gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c
new file mode 100644 (file)
index 0000000..16332ee
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-lto-options {{-flto -fgnu-tm}} } */
+/* { dg-lto-do link } */
+/* { dg-require-effective-target stdint_types } */
+
+extern void foo() __attribute__((transaction_safe));
+
+int main()
+{
+  __transaction_atomic {
+      foo();
+  }
+}
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c b/gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c
new file mode 100644 (file)
index 0000000..a377e66
--- /dev/null
@@ -0,0 +1,14 @@
+#include <stdint.h>
+
+__attribute__((transaction_safe))
+void foo() 
+{
+}
+
+uint32_t _ITM_beginTransaction(uint32_t prop, ...)
+{
+}
+
+void __builtin__ITM_commitTransaction (void)
+{
+}