Hi! On 2024-09-05T14:39:46+0200, I wrote: > On 2024-09-05T14:36:54+0200, I wrote: >> On 2022-03-22T14:41:46+0100, Tom de Vries via Gcc-patches >> <gcc-patches@gcc.gnu.org> wrote: >>> [nvptx] Use .alias directive for mptx >= 6.3 >> >>> --- a/gcc/config/nvptx/nvptx.cc >>> +++ b/gcc/config/nvptx/nvptx.cc >> >>> @@ -968,7 +969,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); >> >> This non-emitting of DECL and DEF linker markers for aliases is >> problematic, as I'll discuss in the following. > > First, to show what currently is (not) happening, I've pushed to trunk > branch commit d0f02538494ded78cac12c63f5708a53f5a77bda > "Enhance 'gcc.target/nvptx/alias-*.c' assembler scanning", see attached.
Then, commit a1865fd33897bc6c6e0109df0a12ee73ce386315 "Add 'g++.target/nvptx/alias-g++.dg_init_dtor2-1.C'", see attached, as one representative example of C++ code where the current behavior is an actual problem. Grüße Thomas
>From a1865fd33897bc6c6e0109df0a12ee73ce386315 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwi...@baylibre.com> Date: Wed, 17 Jul 2024 18:02:50 +0200 Subject: [PATCH] Add 'g++.target/nvptx/alias-g++.dg_init_dtor2-1.C' ... as one minimized example for the issue that with nvptx '-malias' enabled (as implemented in commit f8b15e177155960017ac0c5daef8780d1127f91c "[nvptx] Use .alias directive for mptx >= 6.3"), there are hundreds of instances of link-time 'unresolved symbol [alias]' across the C++ test suite, which are regressions compared to a test run with (default) '-mno-alias'. PR target/104957 gcc/testsuite/ * g++.target/nvptx/alias-g++.dg_init_dtor2-1.C: Add. --- .../nvptx/alias-g++.dg_init_dtor2-1.C | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 gcc/testsuite/g++.target/nvptx/alias-g++.dg_init_dtor2-1.C diff --git a/gcc/testsuite/g++.target/nvptx/alias-g++.dg_init_dtor2-1.C b/gcc/testsuite/g++.target/nvptx/alias-g++.dg_init_dtor2-1.C new file mode 100644 index 00000000000..747656d51d6 --- /dev/null +++ b/gcc/testsuite/g++.target/nvptx/alias-g++.dg_init_dtor2-1.C @@ -0,0 +1,33 @@ +/* Reduced from 'g++.dg/init/dtor2.C'. */ + +/* { dg-do compile } */ +/* { dg-add-options nvptx_alias_ptx } */ +/* { dg-additional-options -save-temps } */ +/* Via the magic string "-std=*++" indicate that testing one (the default) C++ standard is sufficient. */ + +struct B +{ + ~B(); +}; + +B::~B () { +} + +int main() +{ + B b; + return 0; +} + +/* { dg-final { scan-assembler-times {(?n)^// BEGIN GLOBAL FUNCTION DECL: _ZN1BD2Ev$} 1 } } + { dg-final { scan-assembler-times {(?n)^\.visible \.func _ZN1BD2Ev \(\.param\.u64 %in_ar0\);$} 1 } } + { dg-final { scan-assembler-times {(?n)^// BEGIN GLOBAL FUNCTION DEF: _ZN1BD2Ev$} 1 } } + { dg-final { scan-assembler-times {(?n)^\.visible \.func _ZN1BD2Ev \(\.param\.u64 %in_ar0\)$} 1 } } */ + +/* { dg-final { scan-assembler-times {(?n)^// BEGIN GLOBAL FUNCTION DECL: _ZN1BD1Ev$} 1 } } + { dg-final { scan-assembler-times {(?n)^\.visible \.func _ZN1BD1Ev \(\.param\.u64 %in_ar0\);$} 1 } } + { dg-final { scan-assembler-times {(?n)^// BEGIN GLOBAL FUNCTION DEF: _ZN1BD1Ev$} 1 { xfail *-*-* } } } + { dg-final { scan-assembler-times {(?n)^\.alias _ZN1BD1Ev,_ZN1BD2Ev;$} 1 } } */ + +/* { dg-final { scan-assembler-times {(?n)\tcall _ZN1BD1Ev, \(} 1 } } + { dg-final { scan-assembler-times {(?n)\tcall _ZN1BD2Ev, \(} 0 } } */ -- 2.34.1