https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99857

--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Jan Hubicka from comment #6)
> Thanks for a testcase, it makes things easier to debug indeed :)
> The problem is that openmp uses declare_vairant_alt on symbols to make them
> special definitions, but the definition flag is not set.  That makes
> free_lang_data to call release_body and since the code depends on references
> things gets out of sync.
> 
> I am testing.
> 
> diff --git a/gcc/tree.c b/gcc/tree.c
> index 7c44c226a33..e4e74ac8afc 100644
> --- a/gcc/tree.c
> +++ b/gcc/tree.c
> @@ -5849,7 +5849,7 @@ free_lang_data_in_decl (tree decl, class
> free_lang_data_d *fld)
>        if (!(node = cgraph_node::get (decl))
>           || (!node->definition && !node->clones))
>         {
> -         if (node)
> +         if (node && !node->declare_variant_alt)
>             node->release_body ();
>           else
>             {

Or
-          || (!node->definition && !node->clones))
+          || (!node->definition && !node->clones &&
!node->declare_variant_alt))
?

Reply via email to