[PATCH 2/2] GCN: Don't emit weak undefined symbols [PR119369]

Andrew Stubbs ams@baylibre.com
Mon Mar 31 16:29:42 GMT 2025


On 31/03/2025 10:48, Thomas Schwinge wrote:
> This resolves all instances of PR119369
> "GCN: weak undefined symbols -> execution test FAIL, 'HSA_STATUS_ERROR_VARIABLE_UNDEFINED'";
> for all affected test cases, the execution test status progresses FAIL -> PASS.
> 
> This however also causes a small number of (expected) regressions, very similar
> to GCC/nvptx:
> 
>      [-PASS:-]{+FAIL:+} g++.dg/abi/pure-virtual1.C  -std=c++17 (test for excess errors)
>      [-PASS:-]{+FAIL:+} g++.dg/abi/pure-virtual1.C  -std=c++26 (test for excess errors)
>      [-PASS:-]{+FAIL:+} g++.dg/abi/pure-virtual1.C  -std=c++98 (test for excess errors)
> 
>      [-PASS:-]{+FAIL:+} g++.dg/cpp0x/pr84497.C  -std=c++11  scan-assembler .weak[ \t]*_?_ZTH11derived_obj
>      [-PASS:-]{+FAIL:+} g++.dg/cpp0x/pr84497.C  -std=c++11  scan-assembler .weak[ \t]*_?_ZTH13container_obj
>      [-PASS:-]{+FAIL:+} g++.dg/cpp0x/pr84497.C  -std=c++11  scan-assembler .weak[ \t]*_?_ZTH8base_obj
>      PASS: g++.dg/cpp0x/pr84497.C  -std=c++11 (test for excess errors)
>      [-PASS:-]{+FAIL:+} g++.dg/cpp0x/pr84497.C  -std=c++17  scan-assembler .weak[ \t]*_?_ZTH11derived_obj
>      [-PASS:-]{+FAIL:+} g++.dg/cpp0x/pr84497.C  -std=c++17  scan-assembler .weak[ \t]*_?_ZTH13container_obj
>      [-PASS:-]{+FAIL:+} g++.dg/cpp0x/pr84497.C  -std=c++17  scan-assembler .weak[ \t]*_?_ZTH8base_obj
>      PASS: g++.dg/cpp0x/pr84497.C  -std=c++17 (test for excess errors)
>      [-PASS:-]{+FAIL:+} g++.dg/cpp0x/pr84497.C  -std=c++26  scan-assembler .weak[ \t]*_?_ZTH11derived_obj
>      [-PASS:-]{+FAIL:+} g++.dg/cpp0x/pr84497.C  -std=c++26  scan-assembler .weak[ \t]*_?_ZTH13container_obj
>      [-PASS:-]{+FAIL:+} g++.dg/cpp0x/pr84497.C  -std=c++26  scan-assembler .weak[ \t]*_?_ZTH8base_obj
>      PASS: g++.dg/cpp0x/pr84497.C  -std=c++26 (test for excess errors)
> 
>      [-PASS:-]{+FAIL:+} g++.dg/ext/weak2.C  -std=gnu++17  scan-assembler weak[^ \t]*[ \t]_?_Z3foov
>      PASS: g++.dg/ext/weak2.C  -std=gnu++17 (test for excess errors)
>      [-PASS:-]{+FAIL:+} g++.dg/ext/weak2.C  -std=gnu++26  scan-assembler weak[^ \t]*[ \t]_?_Z3foov
>      PASS: g++.dg/ext/weak2.C  -std=gnu++26 (test for excess errors)
>      [-PASS:-]{+FAIL:+} g++.dg/ext/weak2.C  -std=gnu++98  scan-assembler weak[^ \t]*[ \t]_?_Z3foov
>      PASS: g++.dg/ext/weak2.C  -std=gnu++98 (test for excess errors)
> 
>      [-PASS:-]{+FAIL:+} gcc.dg/attr-weakref-1.c (test for excess errors)
>      [-FAIL:-]{+UNRESOLVED:+} gcc.dg/attr-weakref-1.c [-execution test-]{+compilation failed to produce executable+}
> 
>      @@ -131211,25 +131211,25 @@ PASS: gcc.dg/weak/weak-1.c scan-assembler weak[^ \t]*[ \t]_?c
>      PASS: gcc.dg/weak/weak-1.c scan-assembler weak[^ \t]*[ \t]_?d
>      PASS: gcc.dg/weak/weak-1.c scan-assembler weak[^ \t]*[ \t]_?e
>      PASS: gcc.dg/weak/weak-1.c scan-assembler weak[^ \t]*[ \t]_?g
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-1.c scan-assembler weak[^ \t]*[ \t]_?j
>      PASS: gcc.dg/weak/weak-1.c scan-assembler-not weak[^ \t]*[ \t]_?i
> 
>      PASS: gcc.dg/weak/weak-12.c (test for excess errors)
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-12.c scan-assembler weak[^ \t]*[ \t]_?foo
> 
>      PASS: gcc.dg/weak/weak-15.c (test for excess errors)
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-15.c scan-assembler weak[^ \t]*[ \t]_?a
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-15.c scan-assembler weak[^ \t]*[ \t]_?c
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-15.c scan-assembler weak[^ \t]*[ \t]_?d
>      PASS: gcc.dg/weak/weak-15.c scan-assembler-not weak[^ \t]*[ \t]_?b
> 
>      PASS: gcc.dg/weak/weak-16.c (test for excess errors)
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-16.c scan-assembler weak[^ \t]*[ \t]_?kallsyms_token_index
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-16.c scan-assembler weak[^ \t]*[ \t]_?kallsyms_token_table
>      PASS: gcc.dg/weak/weak-2.c (test for excess errors)
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-2.c scan-assembler weak[^ \t]*[ \t]_?ffoo1a
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-2.c scan-assembler weak[^ \t]*[ \t]_?ffoo1b
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-2.c scan-assembler weak[^ \t]*[ \t]_?ffoo1c
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-2.c scan-assembler weak[^ \t]*[ \t]_?ffoo1e
>      PASS: gcc.dg/weak/weak-2.c scan-assembler-not weak[^ \t]*[ \t]_?ffoo1d
> 
>      PASS: gcc.dg/weak/weak-3.c  (test for warnings, line 58)
>      PASS: gcc.dg/weak/weak-3.c  (test for warnings, line 73)
>      PASS: gcc.dg/weak/weak-3.c (test for excess errors)
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-3.c scan-assembler weak[^ \t]*[ \t]_?ffoo1a
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-3.c scan-assembler weak[^ \t]*[ \t]_?ffoo1b
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-3.c scan-assembler weak[^ \t]*[ \t]_?ffoo1c
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-3.c scan-assembler weak[^ \t]*[ \t]_?ffoo1e
>      PASS: gcc.dg/weak/weak-3.c scan-assembler weak[^ \t]*[ \t]_?ffoo1f
>      PASS: gcc.dg/weak/weak-3.c scan-assembler weak[^ \t]*[ \t]_?ffoo1g
>      PASS: gcc.dg/weak/weak-3.c scan-assembler-not weak[^ \t]*[ \t]_?ffoo1d
> 
>      PASS: gcc.dg/weak/weak-4.c (test for excess errors)
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-4.c scan-assembler weak[^ \t]*[ \t]_?vfoo1a
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-4.c scan-assembler weak[^ \t]*[ \t]_?vfoo1b
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-4.c scan-assembler weak[^ \t]*[ \t]_?vfoo1c
>      PASS: gcc.dg/weak/weak-4.c scan-assembler weak[^ \t]*[ \t]_?vfoo1d
>      PASS: gcc.dg/weak/weak-4.c scan-assembler weak[^ \t]*[ \t]_?vfoo1e
>      PASS: gcc.dg/weak/weak-4.c scan-assembler weak[^ \t]*[ \t]_?vfoo1f
>      @@ -131267,16 +131267,16 @@ PASS: gcc.dg/weak/weak-4.c scan-assembler weak[^ \t]*[ \t]_?vfoo1i
>      PASS: gcc.dg/weak/weak-4.c scan-assembler weak[^ \t]*[ \t]_?vfoo1j
>      PASS: gcc.dg/weak/weak-4.c scan-assembler weak[^ \t]*[ \t]_?vfoo1k
> 
>      PASS: gcc.dg/weak/weak-5.c (test for excess errors)
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1a
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1b
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1c
>      PASS: gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1d
>      PASS: gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1e
>      PASS: gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1f
>      PASS: gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1g
>      PASS: gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1h
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1i
>      [-PASS:-]{+FAIL:+} gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1j
>      PASS: gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1k
>      PASS: gcc.dg/weak/weak-5.c scan-assembler weak[^ \t]*[ \t]_?vfoo1l
> 
> These get 'dg-xfail-if'ed or 'dg-skip-if'ed, (mostly) similar to GCC/nvptx.
> 
> 	PR target/119369
> 	gcc/
> 	* config/gcn/gcn-protos.h (gcn_asm_weaken_decl): Declare.
> 	* config/gcn/gcn.cc (gcn_asm_weaken_decl): New.
> 	* config/gcn/gcn-hsa.h (ASM_WEAKEN_DECL): '#define' to this.
> 	gcc/testsuite/
> 	* g++.dg/abi/pure-virtual1.C: 'dg-xfail-if' GCN.
> 	* g++.dg/cpp0x/pr84497.C: 'dg-skip-if' GCN.
> 	* g++.dg/ext/weak2.C: Likewise.
> 	* gcc.dg/attr-weakref-1.c: Likewise.
> 	* gcc.dg/weak/weak-1.c: Likewise.
> 	* gcc.dg/weak/weak-12.c: Likewise.
> 	* gcc.dg/weak/weak-15.c: Likewise.
> 	* gcc.dg/weak/weak-16.c: Likewise.
> 	* gcc.dg/weak/weak-2.c: Likewise.
> 	* gcc.dg/weak/weak-3.c: Likewise.
> 	* gcc.dg/weak/weak-4.c: Likewise.
> 	* gcc.dg/weak/weak-5.c: Likewise.
> ---
>   gcc/config/gcn/gcn-hsa.h                 |  4 ++++
>   gcc/config/gcn/gcn-protos.h              |  2 ++
>   gcc/config/gcn/gcn.cc                    | 14 ++++++++++++++
>   gcc/testsuite/g++.dg/abi/pure-virtual1.C |  1 +
>   gcc/testsuite/g++.dg/cpp0x/pr84497.C     |  1 +
>   gcc/testsuite/g++.dg/ext/weak2.C         |  1 +
>   gcc/testsuite/gcc.dg/attr-weakref-1.c    |  1 +
>   gcc/testsuite/gcc.dg/weak/weak-1.c       |  1 +
>   gcc/testsuite/gcc.dg/weak/weak-12.c      |  1 +
>   gcc/testsuite/gcc.dg/weak/weak-15.c      |  1 +
>   gcc/testsuite/gcc.dg/weak/weak-16.c      |  1 +
>   gcc/testsuite/gcc.dg/weak/weak-2.c       |  1 +
>   gcc/testsuite/gcc.dg/weak/weak-3.c       |  1 +
>   gcc/testsuite/gcc.dg/weak/weak-4.c       |  1 +
>   gcc/testsuite/gcc.dg/weak/weak-5.c       |  1 +
>   15 files changed, 32 insertions(+)
> 
> diff --git a/gcc/config/gcn/gcn-hsa.h b/gcc/config/gcn/gcn-hsa.h
> index 658deac5d70b..6904aaaa660f 100644
> --- a/gcc/config/gcn/gcn-hsa.h
> +++ b/gcc/config/gcn/gcn-hsa.h
> @@ -46,6 +46,10 @@
>   #define ASM_OUTPUT_LABEL(FILE,NAME) \
>     do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
>   
> +/* Used in lieu of '../elfos.h:ASM_WEAKEN_LABEL'.  */
> +#define ASM_WEAKEN_DECL(STREAM, DECL, NAME, VALUE) \
> +  gcn_asm_weaken_decl ((STREAM), (DECL), (NAME), (VALUE))
> +
>   #define ASM_OUTPUT_LABELREF(FILE, NAME) \
>     asm_fprintf (FILE, "%U%s", default_strip_name_encoding (NAME))
>   
> diff --git a/gcc/config/gcn/gcn-protos.h b/gcc/config/gcn/gcn-protos.h
> index 87d90921a82c..1e513ba009d1 100644
> --- a/gcc/config/gcn/gcn-protos.h
> +++ b/gcc/config/gcn/gcn-protos.h
> @@ -18,6 +18,8 @@
>   #define _GCN_PROTOS_
>   
>   extern void gcn_asm_output_symbol_ref (FILE *file, rtx x);
> +extern void gcn_asm_weaken_decl (FILE *stream, tree decl, const char *name,
> +				 const char *value);
>   extern tree gcn_builtin_decl (unsigned code, bool initialize_p);
>   extern bool gcn_can_split_p (machine_mode, rtx);
>   extern bool gcn_constant64_p (rtx);
> diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc
> index 48691c3d419a..d59e87bed466 100644
> --- a/gcc/config/gcn/gcn.cc
> +++ b/gcc/config/gcn/gcn.cc
> @@ -6927,6 +6927,20 @@ gcn_asm_output_symbol_ref (FILE *file, rtx x)
>       }
>   }
>   
> +void
> +gcn_asm_weaken_decl (FILE *stream, tree decl, const char *name,
> +		     const char *value)
> +{
> +  if (!value
> +      && DECL_EXTERNAL (decl))
> +    /* Don't emit weak undefined symbols; see PR119369.  */
> +    return;
> +  if (value)
> +    ASM_OUTPUT_WEAK_ALIAS (stream, name, value);
> +  else
> +    ASM_WEAKEN_LABEL (stream, name);
> +}
> +
>   /* Implement TARGET_CONSTANT_ALIGNMENT.
>   
>      Returns the alignment in bits of a constant that is being placed in memory.
> diff --git a/gcc/testsuite/g++.dg/abi/pure-virtual1.C b/gcc/testsuite/g++.dg/abi/pure-virtual1.C
> index 59eaf2256204..85ed8f6005de 100644
> --- a/gcc/testsuite/g++.dg/abi/pure-virtual1.C
> +++ b/gcc/testsuite/g++.dg/abi/pure-virtual1.C
> @@ -4,6 +4,7 @@
>   // { dg-additional-options "-fno-rtti -nostdlib++" }
>   // { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } }
>   // { dg-xfail-if "AIX weak" { powerpc-ibm-aix* } }
> +// { dg-xfail-if PR119369 { amdgcn-*-* } }
>   
>   struct A
>   {
> diff --git a/gcc/testsuite/g++.dg/cpp0x/pr84497.C b/gcc/testsuite/g++.dg/cpp0x/pr84497.C
> index be5a9d359ec5..8a9478b162e3 100644
> --- a/gcc/testsuite/g++.dg/cpp0x/pr84497.C
> +++ b/gcc/testsuite/g++.dg/cpp0x/pr84497.C
> @@ -3,6 +3,7 @@
>   // { dg-require-weak "" }
>   // { dg-require-alias "" }
>   // { dg-skip-if "No .weak" { { hppa*-*-hpux* } && { ! lp64 } } }
> +// { dg-skip-if PR119369 { amdgcn-*-* } }
>   
>   struct Base
>   {
> diff --git a/gcc/testsuite/g++.dg/ext/weak2.C b/gcc/testsuite/g++.dg/ext/weak2.C
> index 1bf2ddcb4d6e..e1665cf9feb4 100644
> --- a/gcc/testsuite/g++.dg/ext/weak2.C
> +++ b/gcc/testsuite/g++.dg/ext/weak2.C
> @@ -2,6 +2,7 @@
>   // { dg-do compile }
>   // { dg-require-weak "" }
>   // { dg-options "" }
> +// { dg-skip-if PR119369 { amdgcn-*-* } }
>   
>   // { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?_Z3foov" } }
>   
> diff --git a/gcc/testsuite/gcc.dg/attr-weakref-1.c b/gcc/testsuite/gcc.dg/attr-weakref-1.c
> index f13aee446ce6..1d25d9c2d417 100644
> --- a/gcc/testsuite/gcc.dg/attr-weakref-1.c
> +++ b/gcc/testsuite/gcc.dg/attr-weakref-1.c
> @@ -6,6 +6,7 @@
>   // is not available on the following targets.  The test is skipped rather than
>   // xfailed to suppress the warning that would otherwise arise.
>   // { dg-skip-if "" { "hppa*-*-hpux*" "*-*-aix*" "nvptx-*-*" } }
> +// { dg-skip-if PR119369 { amdgcn-*-* } }
>   
>   // For kernel modules and static RTPs, the loader treats undefined weak
>   // symbols in the same way as undefined strong symbols.  The test
> diff --git a/gcc/testsuite/gcc.dg/weak/weak-1.c b/gcc/testsuite/gcc.dg/weak/weak-1.c
> index 6bbc66906ac8..9566ee0c6f2e 100644
> --- a/gcc/testsuite/gcc.dg/weak/weak-1.c
> +++ b/gcc/testsuite/gcc.dg/weak/weak-1.c
> @@ -4,6 +4,7 @@
>   /* { dg-skip-if "" { *-*-mingw* } } */
>   /* NVPTX's definition of weak looks different to normal.  */
>   /* { dg-skip-if "" { nvptx-*-* } } */
> +/* { dg-skip-if PR119369 { amdgcn-*-* } } */
>   
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?a" } } */
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?b" } } */
> diff --git a/gcc/testsuite/gcc.dg/weak/weak-12.c b/gcc/testsuite/gcc.dg/weak/weak-12.c
> index d26fde6bab70..fd18e59a21ee 100644
> --- a/gcc/testsuite/gcc.dg/weak/weak-12.c
> +++ b/gcc/testsuite/gcc.dg/weak/weak-12.c
> @@ -4,6 +4,7 @@
>   /* { dg-options "" } */
>   /* NVPTX's weak is applied to the definition,  not declaration.  */
>   /* { dg-skip-if "" { nvptx-*-* } } */
> +/* { dg-skip-if PR119369 { amdgcn-*-* } } */
>   
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?foo" } } */
>   
> diff --git a/gcc/testsuite/gcc.dg/weak/weak-15.c b/gcc/testsuite/gcc.dg/weak/weak-15.c
> index 6364baff80af..425a70046cc2 100644
> --- a/gcc/testsuite/gcc.dg/weak/weak-15.c
> +++ b/gcc/testsuite/gcc.dg/weak/weak-15.c
> @@ -4,6 +4,7 @@
>   /* { dg-skip-if "" { x86_64-*-mingw* } } */
>   /* NVPTX's weak is applied to the definition,  not declaration.  */
>   /* { dg-skip-if "" { nvptx-*-* } } */
> +/* { dg-skip-if PR119369 { amdgcn-*-* } } */
>   
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?a" } } */
>   /* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?b" } } */
> diff --git a/gcc/testsuite/gcc.dg/weak/weak-16.c b/gcc/testsuite/gcc.dg/weak/weak-16.c
> index 2c58d659c0b1..44741c54c3db 100644
> --- a/gcc/testsuite/gcc.dg/weak/weak-16.c
> +++ b/gcc/testsuite/gcc.dg/weak/weak-16.c
> @@ -7,6 +7,7 @@
>   /* { dg-skip-if "" { x86_64-*-mingw* } } */
>   /* NVPTX's weak is applied to the definition,  not declaration.  */
>   /* { dg-skip-if "" { nvptx-*-* } } */
> +/* { dg-skip-if PR119369 { amdgcn-*-* } } */
>   
>   extern int kallsyms_token_index[] __attribute__((weak));
>   extern int kallsyms_token_table[] __attribute__((weak));
> diff --git a/gcc/testsuite/gcc.dg/weak/weak-2.c b/gcc/testsuite/gcc.dg/weak/weak-2.c
> index 67171cf742f4..f0f55f5360fd 100644
> --- a/gcc/testsuite/gcc.dg/weak/weak-2.c
> +++ b/gcc/testsuite/gcc.dg/weak/weak-2.c
> @@ -4,6 +4,7 @@
>   /* { dg-skip-if "" { x86_64-*-mingw* } } */
>   /* NVPTX's definition of weak looks different to normal.  */
>   /* { dg-skip-if "" { nvptx-*-* } } */
> +/* { dg-skip-if PR119369 { amdgcn-*-* } } */
>   
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1a" } } */
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1b" } } */
> diff --git a/gcc/testsuite/gcc.dg/weak/weak-3.c b/gcc/testsuite/gcc.dg/weak/weak-3.c
> index 5fdf029cf357..2046f1e4d0bf 100644
> --- a/gcc/testsuite/gcc.dg/weak/weak-3.c
> +++ b/gcc/testsuite/gcc.dg/weak/weak-3.c
> @@ -3,6 +3,7 @@
>   /* { dg-require-weak "" } */
>   /* { dg-options "-fno-common -Waddress" } */
>   /* { dg-skip-if "" { x86_64-*-mingw* } } */
> +/* { dg-skip-if PR119369 { amdgcn-*-* } } */
>   
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1a" } } */
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1b" } } */
> diff --git a/gcc/testsuite/gcc.dg/weak/weak-4.c b/gcc/testsuite/gcc.dg/weak/weak-4.c
> index d0f32836e000..70e63d229012 100644
> --- a/gcc/testsuite/gcc.dg/weak/weak-4.c
> +++ b/gcc/testsuite/gcc.dg/weak/weak-4.c
> @@ -4,6 +4,7 @@
>   /* { dg-skip-if "" { x86_64-*-mingw* } } */
>   /* NVPTX's definition of weak looks different to normal.  */
>   /* { dg-skip-if "" { nvptx-*-* } } */
> +/* { dg-skip-if PR119369 { amdgcn-*-* } } */
>   
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1a" } } */
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1b" } } */
> diff --git a/gcc/testsuite/gcc.dg/weak/weak-5.c b/gcc/testsuite/gcc.dg/weak/weak-5.c
> index 6f80bb050bba..3b239715e448 100644
> --- a/gcc/testsuite/gcc.dg/weak/weak-5.c
> +++ b/gcc/testsuite/gcc.dg/weak/weak-5.c
> @@ -3,6 +3,7 @@
>   /* { dg-require-alias "" } */
>   /* { dg-options "-fno-common" } */
>   /* { dg-skip-if "" { x86_64-*-mingw* } } */
> +/* { dg-skip-if PR119369 { amdgcn-*-* } } */
>   
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1a" } } */
>   /* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1b" } } */

Given the limitations from another project, this looks like a reasonable 
work-around. I do wonder if there will be unintended consequences for 
real-world code (given that kernels are fragments of a larger program).

OK for mainline.

Andrew


More information about the Libstdc++ mailing list