On Tue, Jun 17, 2025 at 10:07:04AM +0200, Tobias Burnus wrote:
> --- a/gcc/omp-offload.cc
> +++ b/gcc/omp-offload.cc
> @@ -261,7 +261,8 @@ omp_discover_declare_target_tgt_fn_r (tree *tp, int 
> *walk_subtrees, void *data)
>                              DECL_ATTRIBUTES (decl)))
>       return NULL_TREE;
>  
> -      if (!DECL_EXTERNAL (decl) && DECL_SAVED_TREE (decl))
> +      if (DECL_SAVED_TREE (decl)
> +       && (!DECL_EXTERNAL (decl) || DECL_DECLARED_INLINE_P (decl)))
>       ((vec<tree> *) data)->safe_push (decl);
>        DECL_ATTRIBUTES (decl) = tree_cons (id, NULL_TREE,
>                                         DECL_ATTRIBUTES (decl));

This looks ok to me.

> diff --git a/libgomp/testsuite/libgomp.c++/declare_target-2.C 
> b/libgomp/testsuite/libgomp.c++/declare_target-2.C
> new file mode 100644
> index 00000000000..6d6c94c514d
> --- /dev/null
> +++ b/libgomp/testsuite/libgomp.c++/declare_target-2.C
> @@ -0,0 +1,30 @@
> +// { dg-do link }
> +
> +// Actually not needed: -fipa-cp is default with -O2:
> +// { dg-additional-options "-O2 -fipa-cp -foffload=amdgcn-amdhsa" }

But am not sure how this will work if amdgcn offloading is not configured.

> +// The code failed because 'std::endl' becoḿes implicitly 'declare target'
> +// but not the 'widen' function it calls.  While the linker had no issues
> +// (endl is never called, either because it is inlined or optimized away),
> +// the IPA-CP (enabled by -O2 and higher) failed as the definition for
> +// 'widen' did not exist on the offload side.
> +
> +// Nvptx fails because of PR libstdc++/120680
> +// { dg-bogus "_ZN9__gnu_cxx21zoneinfo_dir_overrideEv" "" { xfail 
> offload_target_nvptx } 0 }
> +// { dg-xfail-if "PR120680" { offload_target_nvptx } }

And why are the xfails needed for nvptx when -foffload is passed for some
other offload target.

        Jakub

Reply via email to