On Wed, 10 Feb 2021, Jakub Jelinek wrote: > Hi! > > 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. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
OK if you add a comment. Thanks, Richrd. > 2021-02-10 Jakub Jelinek <ja...@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. > > --- gcc/varasm.c.jj 2021-01-04 10:25:38.824233926 +0100 > +++ gcc/varasm.c 2021-02-10 13:18:29.278890110 +0100 > @@ -5927,7 +5927,9 @@ merge_weak (tree newdecl, tree olddecl) > void > declare_weak (tree decl) > { > - gcc_assert (TREE_CODE (decl) != FUNCTION_DECL || !TREE_ASM_WRITTEN (decl)); > + 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); > --- gcc/testsuite/g++.dg/ext/weak6.C.jj 2021-02-10 13:26:52.862203677 > +0100 > +++ gcc/testsuite/g++.dg/ext/weak6.C 2021-02-10 13:26:46.439276213 +0100 > @@ -0,0 +1,8 @@ > +// PR c++/99035 > +// { dg-do compile } > +// { dg-require-weak "" } > +// { dg-options "-fsyntax-only" } > + > +extern void * foo (void); > +void * foo (void) { return (void *)foo; } > +#pragma weak foo > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)