re PR middle-end/47610 (cp-demangle.c:1970:1: error: cplus_demangle_builtin_types...
authorJakub Jelinek <jakub@redhat.com>
Sat, 5 Feb 2011 20:35:16 +0000 (21:35 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Sat, 5 Feb 2011 20:35:16 +0000 (21:35 +0100)
PR middle-end/47610
* varasm.c (default_section_type_flags): If decl is NULL,
and name is .data.rel.ro or .data.rel.ro.local, set SECTION_RELRO
bit.

* gcc.dg/pr47610.c: New test.

From-SVN: r169855

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

index de08bab..ecabe7c 100644 (file)
@@ -1,3 +1,10 @@
+2011-02-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/47610
+       * varasm.c (default_section_type_flags): If decl is NULL,
+       and name is .data.rel.ro or .data.rel.ro.local, set SECTION_RELRO
+       bit.
+
 2011-02-05  Jie Zhang  <jie@codesourcery.com>
 
        PR debug/42631
index 89053c2..61110da 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/47610
+       * gcc.dg/pr47610.c: New test.
+
 2011-02-05  Jie Zhang  <jie@codesourcery.com>
 
        PR debug/42631
diff --git a/gcc/testsuite/gcc.dg/pr47610.c b/gcc/testsuite/gcc.dg/pr47610.c
new file mode 100644 (file)
index 0000000..906af74
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR middle-end/47610 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fpic" { target fpic } } */
+struct S { const char *s; };
+const struct S s[] = { "s" };
+extern void foo (void (*) (void));
+static void bar (void) {}
+void baz () { foo (bar); }
index 3a9fbae..76675cd 100644 (file)
@@ -6060,7 +6060,12 @@ default_section_type_flags (tree decl, const char *name, int reloc)
        flags = SECTION_WRITE;
     }
   else
-    flags = SECTION_WRITE;
+    {
+      flags = SECTION_WRITE;
+      if (strcmp (name, ".data.rel.ro") == 0
+         || strcmp (name, ".data.rel.ro.local") == 0)
+       flags |= SECTION_RELRO;
+    }
 
   if (decl && DECL_ONE_ONLY (decl))
     flags |= SECTION_LINKONCE;