testsuite: Clean up the weak declaration scanning

Add scan-weak function to testsuite, which would work like scan-hidden,
and allow for format-specific regexes

gcc/testsuite/ChangeLog:

	* gcc.dg/weak/weak-1.c: Use a function to scan
	for weak symbols instead of a regex.
	* gcc.dg/weak/weak-10.c: Likewise.
	* gcc.dg/weak/weak-11.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.dg/weak/weak-9.c: Likewise.
	* lib/scanasm.exp: Implement the weak-scanning function.
This commit is contained in:
feedable
2026-02-24 02:36:49 +02:00
committed by Andrew Pinski
parent f09f411b6e
commit a0d6c3f23c
12 changed files with 103 additions and 56 deletions

View File

@@ -6,14 +6,14 @@
/* { 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" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?c" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?d" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?e" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?g" } } */
/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?i" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?j" } } */
/* { dg-final { scan-weak "a" } } */
/* { dg-final { scan-weak "b" } } */
/* { dg-final { scan-weak "c" } } */
/* { dg-final { scan-weak "d" } } */
/* { dg-final { scan-weak "e" } } */
/* { dg-final { scan-weak "g" } } */
/* { dg-final { scan-not-weak "i" } } */
/* { dg-final { scan-weak "j" } } */
#pragma weak a
int a;

View File

@@ -7,7 +7,7 @@
/* { dg-require-alias "" } */
/* { dg-options "-fno-common" } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?bar1" } } */
/* { dg-final { scan-weak "bar1" } } */
#pragma weak bar1 = foo1
void foo1 (void) {}

View File

@@ -4,7 +4,7 @@
/* { dg-require-alias "" } */
/* { dg-options "-funit-at-a-time" } */
/* { dg-final { scan-assembler "xyzzy" } } */
/* { dg-final { scan-weak "xyzzy" } } */
static const int local = 1;
#pragma weak xyzzy = local

View File

@@ -6,7 +6,7 @@
/* { dg-skip-if "" { nvptx-*-* } } */
/* { dg-skip-if PR119369 { amdgcn-*-* } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?foo" } } */
/* { dg-final { scan-weak "foo" } } */
#pragma weak foo

View File

@@ -6,10 +6,10 @@
/* { 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" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?c" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?d" } } */
/* { dg-final { scan-weak "a" } } */
/* { dg-final { scan-not-weak "b" } } */
/* { dg-final { scan-weak "c" } } */
/* { dg-final { scan-weak "d" } } */
#pragma weak a
extern char a[];

View File

@@ -2,8 +2,8 @@
/* { dg-do compile } */
/* { dg-require-weak "" } */
/* { dg-options "-fno-common -Os" } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?kallsyms_token_index" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?kallsyms_token_table" } } */
/* { dg-final { scan-weak "kallsyms_token_index" } } */
/* { dg-final { scan-weak "kallsyms_token_table" } } */
/* { dg-skip-if "" { x86_64-*-mingw* } } */
/* NVPTX's weak is applied to the definition, not declaration. */
/* { dg-skip-if "" { nvptx-*-* } } */

View File

@@ -6,11 +6,11 @@
/* { 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" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1c" } } */
/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?ffoo1d" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1e" } } */
/* { dg-final { scan-weak "ffoo1a" } } */
/* { dg-final { scan-weak "ffoo1b" } } */
/* { dg-final { scan-weak "ffoo1c" } } */
/* { dg-final { scan-not-weak "ffoo1d" } } */
/* { dg-final { scan-weak "ffoo1e" } } */
/* test function addresses with #pragma weak */

View File

@@ -5,13 +5,13 @@
/* { 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" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1c" } } */
/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?ffoo1d" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1e" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1f" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1g" } } */
/* { dg-final { scan-weak "ffoo1a" } } */
/* { dg-final { scan-weak "ffoo1b" } } */
/* { dg-final { scan-weak "ffoo1c" } } */
/* { dg-final { scan-not-weak "ffoo1d" } } */
/* { dg-final { scan-weak "ffoo1e" } } */
/* { dg-final { scan-weak "ffoo1f" } } */
/* { dg-final { scan-weak "ffoo1g" } } */
/* test function addresses with __attribute__((weak)) */

View File

@@ -6,17 +6,17 @@
/* { 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" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1c" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1d" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1e" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1f" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1g" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1h" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1i" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1j" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1k" } } */
/* { dg-final { scan-weak "vfoo1a" } } */
/* { dg-final { scan-weak "vfoo1b" } } */
/* { dg-final { scan-weak "vfoo1c" } } */
/* { dg-final { scan-weak "vfoo1d" } } */
/* { dg-final { scan-weak "vfoo1e" } } */
/* { dg-final { scan-weak "vfoo1f" } } */
/* { dg-final { scan-weak "vfoo1g" } } */
/* { dg-final { scan-weak "vfoo1h" } } */
/* { dg-final { scan-weak "vfoo1i" } } */
/* { dg-final { scan-weak "vfoo1j" } } */
/* { dg-final { scan-weak "vfoo1k" } } */
/* test variable addresses with #pragma weak */

View File

@@ -5,18 +5,18 @@
/* { 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" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1c" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1d" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1e" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1f" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1g" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1h" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1i" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1j" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1k" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1l" } } */
/* { dg-final { scan-weak "vfoo1a" } } */
/* { dg-final { scan-weak "vfoo1b" } } */
/* { dg-final { scan-weak "vfoo1c" } } */
/* { dg-final { scan-weak "vfoo1d" } } */
/* { dg-final { scan-weak "vfoo1e" } } */
/* { dg-final { scan-weak "vfoo1f" } } */
/* { dg-final { scan-weak "vfoo1g" } } */
/* { dg-final { scan-weak "vfoo1h" } } */
/* { dg-final { scan-weak "vfoo1i" } } */
/* { dg-final { scan-weak "vfoo1j" } } */
/* { dg-final { scan-weak "vfoo1k" } } */
/* { dg-final { scan-weak "vfoo1l" } } */
/* test variable addresses with __attribute__ ((weak)) */

View File

@@ -3,10 +3,10 @@
/* { dg-require-alias "" } */
/* { dg-options "-fno-common" } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f1" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f2" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f3" } } */
/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f4" } } */
/* { dg-final { scan-weak "f1" } } */
/* { dg-final { scan-weak "f2" } } */
/* { dg-final { scan-weak "f3" } } */
/* { dg-final { scan-weak "f4" } } */
void notf1() { }
void notf2() { }

View File

@@ -153,6 +153,53 @@ proc hidden-scan-for { symbol } {
}
proc weak-scan-for { symbol } {
set objformat [gcc_target_object_format]
switch $objformat {
default { return "weak\[^ \t\]*\[ \t\]_?$symbol" }
}
}
# Check that a symbol is defined as a weak symbol in the .s file
# produced by the compiler.
proc scan-weak { args } {
set testcase [testname-for-summary]
# The name might include a list of options; extract the file name.
set filename [lindex $testcase 0]
set output_file "[file rootname [file tail $filename]].s"
if { [llength $args] > 0 } {
set symbol [lindex $args 0]
set weak_scan [weak-scan-for $symbol]
set args [lreplace $args 0 0 "$weak_scan"]
}
dg-scan "scan-weak" 1 $testcase $output_file $args
}
# Check that a symbol is not defined as a weak symbol in the .s file
# produced by the compiler.
proc scan-not-weak { args } {
set testcase [testname-for-summary]
# The name might include a list of options; extract the file name.
set filename [lindex $testcase 0]
set output_file "[file rootname [file tail $filename]].s"
if { [llength $args] > 0 } {
set symbol [lindex $args 0]
set weak_scan [weak-scan-for $symbol]
set args [lreplace $args 0 0 "$weak_scan"]
}
dg-scan "scan-not-weak" 0 $testcase $output_file $args
}
# Check that a symbol is defined as a hidden symbol in the .s file
# produced by the compiler.