https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90760
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I wonder if we couldn't do: --- gcc/symtab.c.jj 2019-06-06 11:06:36.034399596 +0200 +++ gcc/symtab.c 2019-06-10 19:21:39.273909981 +0200 @@ -1583,7 +1583,7 @@ symtab_node::set_section (symtab_node *n 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); } i.e. allow setting the section name until the varpool node is actually analyzed. With that change void bar (void) {} void foo (void) __attribute__ ((alias ("bar"))); void foo (void) __attribute__ ((section ("baz"))); will no longer ICE, but will be rejected similarly to how void bar (void) {} void foo (void) __attribute__ ((alias ("bar"), section ("baz"))); is rejected (different section name for alias vs. what it aliases with). Honza, your thoughts?