aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2021-02-10 19:52:37 +0100
committerJakub Jelinek <jakub@redhat.com>2021-02-10 19:52:37 +0100
commit0f39fb7b001df7cdba56cd5c572d0737667acd2c (patch)
tree719196d8ef46d0a5f89607a0580b07b51a0de05e /gcc/varasm.c
parent20482cfcc1d3b71e0aec57b5b48685bf0b5402ca (diff)
downloadgcc-0f39fb7b001df7cdba56cd5c572d0737667acd2c.zip
gcc-0f39fb7b001df7cdba56cd5c572d0737667acd2c.tar.gz
gcc-0f39fb7b001df7cdba56cd5c572d0737667acd2c.tar.bz2
varasm: Fix ICE with -fsyntax-only [PR99035]
My FE change from 2 years ago uses TREE_ASM_WRITTEN in -fsyntax-only mode more aggressively to avoid "expanding" functions multiple times. With -fsyntax-only nothing is really expanded, so I think it is acceptable to adjust the assert and allow declare_weak at any time, with -fsyntax-only we know it is during parsing only anyway. 2021-02-10 Jakub Jelinek <jakub@redhat.com> PR c++/99035 * varasm.c (declare_weak): For -fsyntax-only, allow even TREE_ASM_WRITTEN function decls. * g++.dg/ext/weak6.C: New test.
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 21be03a..29478ab 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -5927,7 +5927,12 @@ merge_weak (tree newdecl, tree olddecl)
void
declare_weak (tree decl)
{
- gcc_assert (TREE_CODE (decl) != FUNCTION_DECL || !TREE_ASM_WRITTEN (decl));
+ /* With -fsyntax-only, TREE_ASM_WRITTEN might be set on certain function
+ decls earlier than normally, but as with -fsyntax-only nothing is really
+ emitted, there is no harm in marking it weak later. */
+ gcc_assert (TREE_CODE (decl) != FUNCTION_DECL
+ || !TREE_ASM_WRITTEN (decl)
+ || flag_syntax_only);
if (! TREE_PUBLIC (decl))
{
error ("weak declaration of %q+D must be public", decl);