openmp: Fix ICE in omp_discover_declare_target_tgt_fn_r

This ICEs because node->alias_target is (not yet) a FUNCTION_DECL, but
IDENTIFIER_NODE.

I guess we should retry the discovery before LTO streaming out, the reason
to do it this early is that it can affect the gimplification and omp lowering.

2020-10-06  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/97289
	* omp-offload.c (omp_discover_declare_target_tgt_fn_r): Only follow
	node->alias_target if it is a FUNCTION_DECL.

	* c-c++-common/gomp/pr97289.c: New test.
This commit is contained in:
Jakub Jelinek 2020-10-06 09:25:00 +02:00
parent 3e8fb15a8c
commit 44e20dce59
2 changed files with 16 additions and 1 deletions

View file

@ -203,7 +203,8 @@ omp_discover_declare_target_tgt_fn_r (tree *tp, int *walk_subtrees, void *data)
symtab_node *node = symtab_node::get (*tp);
if (node != NULL)
{
while (node->alias_target)
while (node->alias_target
&& TREE_CODE (node->alias_target) == FUNCTION_DECL)
{
if (!omp_declare_target_fn_p (node->decl)
&& !lookup_attribute ("omp declare target host",

View file

@ -0,0 +1,14 @@
/* PR middle-end/97289 */
/* { dg-do compile } */
/* { dg-require-weak "" } */
/* { dg-skip-if "" { "hppa*-*-hpux*" "*-*-aix*" "nvptx-*-*" } } */
void foo (void);
static void bar (void) __attribute__ ((__weakref__ ("foo")));
void
baz (void)
{
#pragma omp target
bar ();
}