aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2012-01-19 13:57:04 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2012-01-19 13:57:04 +0000
commitaad038ca7c7322c6c050f68f8389fc1d2bd8a7da (patch)
tree0bff4647655980e1e4ad09a583414e68daa83969
parent01ddefeba765c4d86ea452b41179cb8508196c4e (diff)
downloadgcc-aad038ca7c7322c6c050f68f8389fc1d2bd8a7da.zip
gcc-aad038ca7c7322c6c050f68f8389fc1d2bd8a7da.tar.gz
gcc-aad038ca7c7322c6c050f68f8389fc1d2bd8a7da.tar.bz2
re PR lto/51280 (ICE when lto1 does not have -fgnu-tm and object file uses TM)
PR lto/51280 * lto-wrapper.c (run_gcc): Pass -fgnu_tm on. (merge_and_complain): Same. From-SVN: r183303
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/lto-wrapper.c2
-rw-r--r--gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c8
-rw-r--r--gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c18
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0dabe64..91b7f26 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-01-19 Aldy Hernandez <aldyh@redhat.com>
+
+ PR lto/51280
+ * lto-wrapper.c (run_gcc): Pass -fgnu_tm on.
+ (merge_and_complain): Same.
+
2012-01-19 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/50237
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index 1cc7bfb..6d262e8 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -403,6 +403,7 @@ merge_and_complain (struct cl_decoded_option **decoded_options,
case OPT_fpie:
case OPT_fcommon:
case OPT_fexceptions:
+ 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.
??? This doesn't make too much sense, but when it doesn't
@@ -555,6 +556,7 @@ run_gcc (unsigned argc, char *argv[])
case OPT_fpie:
case OPT_fcommon:
case OPT_fexceptions:
+ case OPT_fgnu_tm:
break;
default:
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c b/gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
new file mode 100644
index 0000000..dd57890
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
@@ -0,0 +1,8 @@
+/* { dg-lto-options {{-flto}} } */
+/* { dg-lto-do link } */
+
+/* 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
+ -fgnu-tm. */
+
+int i;
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c b/gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c
new file mode 100644
index 0000000..d907f68
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c
@@ -0,0 +1,18 @@
+/* { dg-options "-fgnu-tm" } */
+
+extern int i;
+
+main()
+{
+ __transaction_atomic { i = 0; }
+}
+
+#define dummy(func) \
+ __attribute__((noinline,noclone,used)) void func() { asm (""); }
+
+dummy(_ITM_beginTransaction)
+dummy(_ITM_commitTransaction)
+dummy(_ITM_WU4)
+dummy(_ITM_WU8)
+dummy(_ITM_registerTMCloneTable)
+dummy(_ITM_deregisterTMCloneTable)