re PR c/90760 (ICE on attributes section and alias in set_section, at symtab.c:1573)
authorJakub Jelinek <jakub@redhat.com>
Wed, 12 Jun 2019 07:14:08 +0000 (09:14 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 12 Jun 2019 07:14:08 +0000 (09:14 +0200)
PR c/90760
* symtab.c (symtab_node::set_section): Allow being called on aliases
as long as they aren't analyzed yet.

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

From-SVN: r272178

gcc/ChangeLog
gcc/symtab.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr90760.c [new file with mode: 0644]

index ba257665673f1b553a209f24d4275616a7f7d2fe..ea28e6c9f6ce9a6910754f5a3c80acd8355c4f4e 100644 (file)
@@ -1,3 +1,9 @@
+2019-06-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/90760
+       * symtab.c (symtab_node::set_section): Allow being called on aliases
+       as long as they aren't analyzed yet.
+
 2019-06-11  Faraz Shahbazker  <fshahbazker@wavecomp.com>
 
        * config/mips/mips.c (mips_final_postscan_insn): Modify call
index 905ca05e578b503e11ec7ff160df005ea7669e60..b1589ea8a40f4d2e6f34672140b296490132a8d8 100644 (file)
@@ -1583,7 +1583,7 @@ symtab_node::set_section (symtab_node *n, void *s)
 void
 symtab_node::set_section (const char *section)
 {
-  gcc_assert (!this->alias);
+  gcc_assert (!this->alias || !this->analyzed);
   call_for_symbol_and_aliases
     (symtab_node::set_section, const_cast<char *>(section), true);
 }
index 302ac15bbe969879cfbfb1717ccef75367a49fd3..27535710633f64cae1f9840cd0b473b74223939e 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/90760
+       * gcc.dg/pr90760.c: New test.
+
 2019-06-11  Faraz Shahbazker  <fshahbazker@wavecomp.com>
 
        * gcc.target/mips/data-sym-pool.c: Update expected output.
diff --git a/gcc/testsuite/gcc.dg/pr90760.c b/gcc/testsuite/gcc.dg/pr90760.c
new file mode 100644 (file)
index 0000000..525a21a
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR c/90760 */
+/* { dg-do compile } */
+/* { dg-require-named-sections "" } */
+
+void bar (void) {}
+void foo (void) __attribute__ ((alias ("bar")));       /* { dg-error "section of alias 'foo' must match section of its target" } */
+void foo (void) __attribute__ ((section ("baz")));
+void qux (void) __attribute__ ((alias ("bar"), section ("baz")));      /* { dg-error "section of alias 'qux' must match section of its target" } */