https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97106
--- Comment #3 from Tom de Vries <vries at gcc dot gnu.org> --- With this additionally: ... diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index 1a89c1bc77f..2e1a2dad9fe 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -968,7 +968,8 @@ static void write_fn_proto_1 (std::stringstream &s, bool is_defn, const char *name, const_tree decl) { - write_fn_marker (s, is_defn, TREE_PUBLIC (decl), name); + if (lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) == NULL) + write_fn_marker (s, is_defn, TREE_PUBLIC (decl), name); /* PTX declaration. */ if (DECL_EXTERNAL (decl)) ... I get a simplified libgomp/testsuite/libgomp.c-c++-common/pr96390.c to work. That is, using only one level of alias indirection: ... #pragma omp target map(from:n) n = bar (); ... With the original, two level alias indirection I get: ... libgomp: Link error log ptxas fatal : Internal error: alias to unknown symbol ... That seems to be consistent with the ptx manual, which dictates: ... .alias fAlias, fAliasee; Identifier fAliasee is a function symbol which must be defined in the same module as .alias declaration. ...