]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR bootstrap/34003 (gcc trunk unable to bootstrap itself; Unsatisfied symbols...
authorJakub Jelinek <jakub@redhat.com>
Fri, 21 Dec 2007 03:05:43 +0000 (04:05 +0100)
committerJohn David Anglin <danglin@gcc.gnu.org>
Fri, 21 Dec 2007 03:05:43 +0000 (03:05 +0000)
PR bootstrap/34003
* c-decl.c (merge_decls): Copy RTL from olddecl to newdecl.
* config/pa/pa.c (pa_encode_section_info): If !first, preserve
SYMBOL_FLAG_REFERENCED flag.
* gcc.dg/pr34003-1.c: New test.
* gcc.dg/pr34003-2.c: New.

From-SVN: r131114

gcc/ChangeLog
gcc/c-decl.c
gcc/config/pa/pa.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr34003-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr34003-2.c [new file with mode: 0644]

index 5032716fefc23ecc413ad38787a9ff55f7662726..e3fc045754187bdf8ed0b7124261501eeb0b1230 100644 (file)
@@ -1,3 +1,10 @@
+2007-12-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR bootstrap/34003
+       * c-decl.c (merge_decls): Copy RTL from olddecl to newdecl.
+       * config/pa/pa.c (pa_encode_section_info): If !first, preserve
+       SYMBOL_FLAG_REFERENCED flag.
+
 2007-12-19  Kaz Kylheku  <kaz@zeugmasystems.com>
 
        PR rtl-optimization/34456
index bb2bbb1878b98948d0ee8261ecd8bbb52f6cdb80..eb69acace4a0bdb8c4e286362ebc24c39ada95ff 100644 (file)
@@ -1644,6 +1644,9 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
          }
     }
 
+  /* Keep the old rtl since we can safely use it.  */
+  if (HAS_RTL_P (olddecl))
+    COPY_DECL_RTL (olddecl, newdecl);
 
   /* Merge the type qualifiers.  */
   if (TREE_READONLY (newdecl))
index 37b051315e86298d50ebccbaddb7d6371e37fab1..f31f34493795937940c8c699b576ce0a32ca26d5 100644 (file)
@@ -7545,6 +7545,12 @@ hppa_encode_label (rtx sym)
 static void
 pa_encode_section_info (tree decl, rtx rtl, int first)
 {
+  int old_referenced = 0;
+
+  if (!first && MEM_P (rtl) && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF)
+    old_referenced
+      = SYMBOL_REF_FLAGS (XEXP (rtl, 0)) & SYMBOL_FLAG_REFERENCED;
+
   default_encode_section_info (decl, rtl, first);
 
   if (first && TEXT_SPACE_P (decl))
@@ -7553,6 +7559,8 @@ pa_encode_section_info (tree decl, rtx rtl, int first)
       if (TREE_CODE (decl) == FUNCTION_DECL)
        hppa_encode_label (XEXP (rtl, 0));
     }
+  else if (old_referenced)
+    SYMBOL_REF_FLAGS (XEXP (rtl, 0)) |= old_referenced;
 }
 
 /* This is sort of inverse to pa_encode_section_info.  */
index ba211dfe0fc7ae6d5a502f9815dd9fc63be3f1f6..4c617a3fb26e330dbb6d5b174ba5087dd7625a48 100644 (file)
@@ -1,3 +1,9 @@
+2007-12-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR bootstrap/34003
+       * gcc.dg/pr34003-1.c: New test.
+       * gcc.dg/pr34003-2.c: New.
+
 2007-12-19  Richard Sandiford  <rsandifo@nildram.co.uk>
 
        PR rtl-optimization/34456
diff --git a/gcc/testsuite/gcc.dg/pr34003-1.c b/gcc/testsuite/gcc.dg/pr34003-1.c
new file mode 100644 (file)
index 0000000..ff97fe6
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR bootstrap/34003 */
+/* { dg-do link } */
+/* { dg-options "-O0" } */
+/* { dg-additional-sources "pr34003-2.c" } */
+
+extern void foo (void);
+int bar (void) { foo (); return 1; }
+extern void foo (void);
diff --git a/gcc/testsuite/gcc.dg/pr34003-2.c b/gcc/testsuite/gcc.dg/pr34003-2.c
new file mode 100644 (file)
index 0000000..a533056
--- /dev/null
@@ -0,0 +1,20 @@
+/* PR bootstrap/34003 */
+/* { dg-do compile } */
+/* { dg-options "-O0" } */
+
+extern void abort (void);
+
+int seen = 0;
+
+void foo (void)
+{
+  ++seen;
+}
+
+int main (void)
+{
+  extern int bar (void);
+  if (bar () != 1 || seen != 1)
+    abort ();
+  return 0;
+}