https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114233
--- Comment #3 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> --- Jakub has posted a patch in the linker PR (thanks!). But there remains a darwin bug. The test in check_effective_target_shared actually works with C, but not with C++, because: Undefined symbols for architecture arm64: "__Z3foov", referenced from: __Z3bazv in ccCj5plO.o Why have we not seen it before? Because most of the use of that check is in { dg-require-effective-target shared } so we're effectively skipping tests, and that is silent. As far as I can tell, this addition is the first time { target shared } is used as a conditional in something like { dg-additional-options } in the C++ testsuite. The fix is simple: diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index ae33c4f1e3a..467b539b20d 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1390,7 +1390,7 @@ proc check_effective_target_shared { } { # here to be undefined. set extra_flags "" if { [istarget *-*-darwin\[912\]*] } { - set extra_flags "-Wl,-U,_foo,-U,_bar" + set extra_flags "-Wl,-U,_foo,-U,_bar,-U,__Z3foov" } # Note that M68K has a multilib that supports -fpic but not # -fPIC, so we need to check both. We test with a program that The question is: will this reveal new issues in other tests that weren't running before. I'm starting a new regtest and will post the results here.