openmp: Fix up omp_declare_variant{s,_alt} htab handling
authorJakub Jelinek <jakub@redhat.com>
Wed, 27 May 2020 08:25:56 +0000 (10:25 +0200)
committerJakub Jelinek <jakub@redhat.com>
Wed, 27 May 2020 08:25:56 +0000 (10:25 +0200)
commitbaff22c48bdee9cb644b7336bf6f20f799531507
tree4f364b848f4423d8b072c1c08da38a0c0ef1e43b
parent79ea774f9a9d36d986152d93f9eae4a9ba36b37b
openmp: Fix up omp_declare_variant{s,_alt} htab handling

This patch fixes a GC ICE.  During debugging, I've found that during
gimplification we can actually call omp_resolve_declare_variant multiple
times and it would create a new magic declare_variant_alt FUNCTION_DECL
each time, which is undesirable, once we have such a decl, we should just
use that.  The other problem is that there was no cgraph node removal hook.
As the omp_declare_variants htab is used just early during gimplification,
we can just clear the whole htab, rather than trying to lookup and remove
a particular entry.  The other hash table is used later as well and that
one uses just DECL_UID as hash, so in that case the patch removes the elt.

2020-05-27  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/95315
* omp-general.c (omp_declare_variant_remove_hook): New function.
(omp_resolve_declare_variant): Always return base if it is already
declare_variant_alt magic decl itself.  Register
omp_declare_variant_remove_hook as cgraph node removal hook.

* gcc.dg/gomp/pr95315.c: New test.
gcc/omp-general.c
gcc/testsuite/gcc.dg/gomp/pr95315.c [new file with mode: 0644]