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)

Reply via email to