OSDN Git Service

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 acfd8a9..714bc44 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 7441548..e6b4279 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 d2eadb4..4d6acf0 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 afd9942..a1cddac 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;