diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c index 7fb3a72ec55..590007b943c 100644 --- a/gcc/omp-offload.c +++ b/gcc/omp-offload.c @@ -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", diff --git a/gcc/testsuite/c-c++-common/gomp/pr97289.c b/gcc/testsuite/c-c++-common/gomp/pr97289.c new file mode 100644 index 00000000000..8331b95f81f --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr97289.c @@ -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 (); +}