]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR target/42894
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Jan 2011 19:36:44 +0000 (19:36 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Jan 2011 19:36:44 +0000 (19:36 +0000)
* varasm.c (force_const_mem): Store copy of x in desc->constant
instead of x itself.
* expr.c (emit_move_insn): Add a copy of y_cst instead of y_cst
itself into REG_EQUAL note.

* gcc.dg/tls/pr42894.c: New test.

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

gcc/ChangeLog
gcc/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tls/pr42894.c [new file with mode: 0644]
gcc/varasm.c

index acfd8a94ee1026939dc71f47623122a674332efe..714bc44e34a054c0012528fca87f1f6016754464 100644 (file)
@@ -1,3 +1,11 @@
+2011-01-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/42894
+       * varasm.c (force_const_mem): Store copy of x in desc->constant
+       instead of x itself.
+       * expr.c (emit_move_insn): Add a copy of y_cst instead of y_cst
+       itself into REG_EQUAL note.
+
 2011-01-28  Joseph Myers  <joseph@codesourcery.com>
 
        * config/freebsd.opt (posix, rdynamic): New Driver options.
index 7441548884e4942cd39c9d1e94e6529c72e2f752..e6b42795b3a1b8c02733cfbd00e8f6867f4c6951 100644 (file)
@@ -3398,7 +3398,7 @@ emit_move_insn (rtx x, rtx y)
       && (set = single_set (last_insn)) != NULL_RTX
       && SET_DEST (set) == x
       && ! rtx_equal_p (y_cst, SET_SRC (set)))
-    set_unique_reg_note (last_insn, REG_EQUAL, y_cst);
+    set_unique_reg_note (last_insn, REG_EQUAL, copy_rtx (y_cst));
 
   return last_insn;
 }
index d2eadb419dbbb90fab00611bbb1c7f8d7a358f96..4d6acf0176f070d2b03ccc1fa81bd7bc5f5b0de0 100644 (file)
@@ -1,3 +1,8 @@
+2011-01-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/42894
+       * gcc.dg/tls/pr42894.c: New test.
+
 2011-01-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * gcc.dg/pr47276.c: Add dg-require-visibility.
diff --git a/gcc/testsuite/gcc.dg/tls/pr42894.c b/gcc/testsuite/gcc.dg/tls/pr42894.c
new file mode 100644 (file)
index 0000000..c3bd76c
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR target/42894 */
+/* { dg-do compile } */
+/* { dg-options "-march=armv5te -mthumb" { target arm*-*-* } } */
+/* { dg-require-effective-target tls } */
+
+extern __thread int t;
+
+void
+foo (int a)
+{
+  t = a;
+}
index afd9942c2955b65bb4629b91beeb6c77500e961e..a1cddac16c1ebe1e2e4fe65c9f2e37aea9b9fe99 100644 (file)
@@ -1,7 +1,7 @@
 /* Output variables, constants and external declarations, for GNU compiler.
    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
    1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010  Free Software Foundation, Inc.
+   2010, 2011  Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -3518,7 +3518,7 @@ force_const_mem (enum machine_mode mode, rtx x)
   pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
 
   desc->next = NULL;
-  desc->constant = tmp.constant;
+  desc->constant = copy_rtx (tmp.constant);
   desc->offset = pool->offset;
   desc->hash = hash;
   desc->mode = mode;