aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2003-03-14 20:43:07 -0500
committerJason Merrill <jason@gcc.gnu.org>2003-03-14 20:43:07 -0500
commitaf75fb675d7e451df34a1114b236e2291ee5f638 (patch)
tree2f234f8733535067850f91645ed976b5228e1fdd
parentadf936a606445e0e6c0d1de74338a5e237d9217e (diff)
downloadgcc-af75fb675d7e451df34a1114b236e2291ee5f638.zip
gcc-af75fb675d7e451df34a1114b236e2291ee5f638.tar.gz
gcc-af75fb675d7e451df34a1114b236e2291ee5f638.tar.bz2
re PR rtl-optimization/6871 (const objects shouldn't be moved to .bss)
PR optimization/6871 * varasm.c (assemble_variable): Leave constant zeroes in .rodata. From-SVN: r64387
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/section1.c5
-rw-r--r--gcc/varasm.c2
3 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d715d97..146eb18 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2003-03-14 Jason Merrill <jason@redhat.com>
+
+ PR optimization/6871
+ * varasm.c (assemble_variable): Leave constant zeroes in .rodata.
+
2003-03-14 Neil Booth <neil@daikokuya.co.uk>
* c-opts.c (finish_options): New.
diff --git a/gcc/testsuite/gcc.dg/section1.c b/gcc/testsuite/gcc.dg/section1.c
new file mode 100644
index 0000000..e907f19
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/section1.c
@@ -0,0 +1,5 @@
+/* PR optimization/6871 */
+/* Constant variables belong in .rodata, not .bss. */
+/* { dg-final { scan-assembler-not "\.bss" } } */
+
+const int i = 0;
diff --git a/gcc/varasm.c b/gcc/varasm.c
index dea352a..42775dc 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1551,6 +1551,8 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
else if (DECL_INITIAL (decl) == 0
|| DECL_INITIAL (decl) == error_mark_node
|| (flag_zero_initialized_in_bss
+ /* Leave constant zeroes in .rodata so they can be shared. */
+ && !TREE_READONLY (decl)
&& initializer_zerop (DECL_INITIAL (decl))))
{
unsigned HOST_WIDE_INT size = tree_low_cst (DECL_SIZE_UNIT (decl), 1);