OSDN Git Service

PR middle-end/15486
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 18 Dec 2004 21:49:55 +0000 (21:49 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 18 Dec 2004 21:49:55 +0000 (21:49 +0000)
* varasm.c (asm_emit_uninitialised): Return early if
a custom section is requested.
(assemble_variable): Revert 2002-03-15 patch.

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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/fdata-sections-1.c [new file with mode: 0644]
gcc/varasm.c

index e6851c9..e72b847 100644 (file)
@@ -1,3 +1,10 @@
+2004-12-18  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       PR middle-end/15486
+       * varasm.c (asm_emit_uninitialised): Return early if
+       a custom section is requested.
+       (assemble_variable): Revert 2002-03-15 patch.
+
 2004-12-18  Richard Henderson  <rth@redhat.com>
 
        * stor-layout.c (layout_decl): Use unshare_expr, not unsave_expr.
index 5380e99..ab2a082 100644 (file)
@@ -1,3 +1,7 @@
+2004-12-18  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       * gcc.dg/fdata-sections-1.c: New test.
+
 2004-12-18  Roger Sayle  <roger@eyesopen.com>
 
        PR middle-end/18548
diff --git a/gcc/testsuite/gcc.dg/fdata-sections-1.c b/gcc/testsuite/gcc.dg/fdata-sections-1.c
new file mode 100644 (file)
index 0000000..d2b2b58
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR middle-end/15486 */
+/* Origin: Jonathan Larmour <jifl-bugzilla@jifvik.org> */
+
+/* { dg-do compile { target *-*-linux* } } */
+/* { dg-options "-fdata-sections" } */
+
+int x;
+
+/* { dg-final { scan-assembler "comm" } } */
index 078959f..e6d018c 100644 (file)
@@ -1442,9 +1442,16 @@ asm_emit_uninitialised (tree decl, const char *name,
        destination = asm_dest_common;
     }
 
+  if (destination != asm_dest_common)
+    {
+      resolve_unique_section (decl, 0, flag_data_sections);
+      /* Custom sections don't belong here.  */
+      if (DECL_SECTION_NAME (decl))
+        return false;
+    }
+
   if (destination == asm_dest_bss)
     globalize_decl (decl);
-  resolve_unique_section (decl, 0, flag_data_sections);
 
   if (flag_shared_data)
     {
@@ -1625,16 +1632,6 @@ assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED,
   if (DECL_PRESERVE_P (decl))
     targetm.asm_out.mark_decl_preserved (name);
 
-  /* Output any data that we will need to use the address of.  */
-  if (DECL_INITIAL (decl) == error_mark_node)
-    reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0;
-  else if (DECL_INITIAL (decl))
-    {
-      reloc = compute_reloc_for_constant (DECL_INITIAL (decl));
-      output_addressed_constants (DECL_INITIAL (decl));
-    }
-  resolve_unique_section (decl, reloc, flag_data_sections);
-
   /* Handle uninitialized definitions.  */
 
   /* If the decl has been given an explicit section name, then it
@@ -1688,7 +1685,17 @@ assemble_variable (tree decl, int top_level ATTRIBUTE_UNUSED,
   if (TREE_PUBLIC (decl) && DECL_NAME (decl))
     globalize_decl (decl);
 
+  /* Output any data that we will need to use the address of.  */
+  if (DECL_INITIAL (decl) == error_mark_node)
+    reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0;
+  else if (DECL_INITIAL (decl))
+    {
+      reloc = compute_reloc_for_constant (DECL_INITIAL (decl));
+      output_addressed_constants (DECL_INITIAL (decl));
+    }
+
   /* Switch to the appropriate section.  */
+  resolve_unique_section (decl, reloc, flag_data_sections);
   variable_section (decl, reloc);
 
   /* dbxout.c needs to know this.  */