From 844c665f1701e889b4883df65004dfc310445422 Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Fri, 14 Aug 2026 20:53:19 +0100 Subject: [PATCH] testsuite,c,c++, Darwin: Allow LTO test link symbols to be undefined. We had, for some time, a bug in the target supports that meant that Darwin was not running tests that required -shared. Since that was fixed, we have failed a number of LTO tests. It turns out that this had nothing to do with LTO - but was a consequence of the tests producing DSOs with undefined symbols. Darwin's linker defaults to requiring all symbols to be defined at link time unless individually (-U) or generally (-undefined dynamic_lookup) allowed. For one or two symbols -U is preferable - but most of these cases have several and dynamic lookup is a shorter fix. The extra_ld_flags option is not additive - and so we must override for Darwin placing that second. gcc/testsuite/ChangeLog: * g++.dg/lto/pr108772_0.C: Allow undefined symbols on Darwin. * g++.dg/lto/pr114790_0.C: Likewise. * g++.dg/lto/pr119614_0.C: Likewise. * g++.dg/lto/pr85405_0.C: Likewise. * g++.dg/lto/pr85405b_0.C: Likewise. * g++.dg/lto/pr85655_0.C: Likewise. * g++.dg/lto/pr86523-3_0.C: Likewise. * g++.dg/lto/pr86585_0.C: Likewise. * g++.dg/lto/pr87906_0.C: Likewise. * g++.dg/lto/pr88046_0.C: Likewise. * g++.dg/lto/pr88758_0.C: Likewise. * g++.dg/lto/pr89330_0.C: Likewise. * g++.dg/lto/pr91574_0.C: Likewise. * g++.dg/lto/pr92609_0.C: Likewise. * g++.dg/lto/pr93166_0.C: Likewise. * gcc.dg/lto/pr61526_0.c: Likewise. * g++.dg/lto/pr87295_0.C: Skip on Darwin. Signed-off-by: Iain Sandoe --- gcc/testsuite/g++.dg/lto/pr108772_0.C | 1 + gcc/testsuite/g++.dg/lto/pr114790_0.C | 1 + gcc/testsuite/g++.dg/lto/pr119614_0.C | 1 + gcc/testsuite/g++.dg/lto/pr85405_0.C | 1 + gcc/testsuite/g++.dg/lto/pr85405b_0.C | 1 + gcc/testsuite/g++.dg/lto/pr85655_0.C | 1 + gcc/testsuite/g++.dg/lto/pr86523-3_0.C | 1 + gcc/testsuite/g++.dg/lto/pr86585_0.C | 1 + gcc/testsuite/g++.dg/lto/pr87295_0.C | 2 +- gcc/testsuite/g++.dg/lto/pr87906_0.C | 1 + gcc/testsuite/g++.dg/lto/pr88046_0.C | 1 + gcc/testsuite/g++.dg/lto/pr88758_0.C | 1 + gcc/testsuite/g++.dg/lto/pr89330_0.C | 1 + gcc/testsuite/g++.dg/lto/pr91574_0.C | 1 + gcc/testsuite/g++.dg/lto/pr92609_0.C | 1 + gcc/testsuite/g++.dg/lto/pr93166_0.C | 1 + gcc/testsuite/gcc.dg/lto/pr61526_0.c | 1 + 17 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/g++.dg/lto/pr108772_0.C b/gcc/testsuite/g++.dg/lto/pr108772_0.C index 81f15a90a3e6..28ed330eabde 100644 --- a/gcc/testsuite/g++.dg/lto/pr108772_0.C +++ b/gcc/testsuite/g++.dg/lto/pr108772_0.C @@ -3,6 +3,7 @@ // { dg-require-effective-target fpic } // { dg-lto-options { "-flto -fPIC -shared -O1 -fimplicit-constexpr -g1" } } // { dg-extra-ld-options "-shared" } +// { dg-extra-ld-options "-shared -Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } namespace std { struct _Sp_counted_base { diff --git a/gcc/testsuite/g++.dg/lto/pr114790_0.C b/gcc/testsuite/g++.dg/lto/pr114790_0.C index eed112df3897..5c097a74efe9 100644 --- a/gcc/testsuite/g++.dg/lto/pr114790_0.C +++ b/gcc/testsuite/g++.dg/lto/pr114790_0.C @@ -1,5 +1,6 @@ // { dg-lto-do link } // { dg-lto-options { { -w -flto -g -flto-partition=1to1 -O2 -shared -fPIC -fvisibility=hidden} } } +// { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } // { dg-require-effective-target fpic } // { dg-require-effective-target shared } struct APITracerContext { diff --git a/gcc/testsuite/g++.dg/lto/pr119614_0.C b/gcc/testsuite/g++.dg/lto/pr119614_0.C index 09c07fbf5667..f51b55fb360a 100644 --- a/gcc/testsuite/g++.dg/lto/pr119614_0.C +++ b/gcc/testsuite/g++.dg/lto/pr119614_0.C @@ -5,6 +5,7 @@ // { dg-require-effective-target fpic } // { dg-require-effective-target musttail } // { dg-extra-ld-options "-shared" } +// { dg-extra-ld-options "-shared -Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } struct S {} b; char *foo (); diff --git a/gcc/testsuite/g++.dg/lto/pr85405_0.C b/gcc/testsuite/g++.dg/lto/pr85405_0.C index 09b70fca189e..7ace032519f6 100644 --- a/gcc/testsuite/g++.dg/lto/pr85405_0.C +++ b/gcc/testsuite/g++.dg/lto/pr85405_0.C @@ -2,6 +2,7 @@ // { dg-require-effective-target shared } // { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -shared -flto}} } +// { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } class VclReferenceBase { int mnRefCnt; diff --git a/gcc/testsuite/g++.dg/lto/pr85405b_0.C b/gcc/testsuite/g++.dg/lto/pr85405b_0.C index 201142bc1a3e..114ecd9b3101 100644 --- a/gcc/testsuite/g++.dg/lto/pr85405b_0.C +++ b/gcc/testsuite/g++.dg/lto/pr85405b_0.C @@ -2,6 +2,7 @@ // { dg-require-effective-target shared } // { dg-require-effective-target fpic } // { dg-lto-options {{-fPIC -shared -flto}} } +// { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } class VclReferenceBase { int mnRefCnt; diff --git a/gcc/testsuite/g++.dg/lto/pr85655_0.C b/gcc/testsuite/g++.dg/lto/pr85655_0.C index d3bbd8f40363..52e5e7881d8b 100644 --- a/gcc/testsuite/g++.dg/lto/pr85655_0.C +++ b/gcc/testsuite/g++.dg/lto/pr85655_0.C @@ -2,6 +2,7 @@ // { dg-require-effective-target shared } // { dg-require-effective-target fpic } // { dg-lto-options {{-O2 -fPIC -shared -flto}} } +// { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } int a; void b(...); diff --git a/gcc/testsuite/g++.dg/lto/pr86523-3_0.C b/gcc/testsuite/g++.dg/lto/pr86523-3_0.C index 31063b8773a9..cad36994a0df 100644 --- a/gcc/testsuite/g++.dg/lto/pr86523-3_0.C +++ b/gcc/testsuite/g++.dg/lto/pr86523-3_0.C @@ -2,6 +2,7 @@ // { dg-require-effective-target fpic } // { dg-require-effective-target shared } // { dg-lto-options { { -fPIC -flto -g -shared } } } +// { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } class a { int b; }; diff --git a/gcc/testsuite/g++.dg/lto/pr86585_0.C b/gcc/testsuite/g++.dg/lto/pr86585_0.C index 2c3ae9da414d..15c45b5d162e 100644 --- a/gcc/testsuite/g++.dg/lto/pr86585_0.C +++ b/gcc/testsuite/g++.dg/lto/pr86585_0.C @@ -2,6 +2,7 @@ // { dg-require-effective-target fpic } // { dg-require-effective-target shared } // { dg-lto-options { { -flto -g -nostdlib -shared -fPIC } } } +// { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup -lSystem" { target *-*-darwin* } } namespace Inkscape { class a; } diff --git a/gcc/testsuite/g++.dg/lto/pr87295_0.C b/gcc/testsuite/g++.dg/lto/pr87295_0.C index a063b23d8d41..2abf0c315e9d 100644 --- a/gcc/testsuite/g++.dg/lto/pr87295_0.C +++ b/gcc/testsuite/g++.dg/lto/pr87295_0.C @@ -1,6 +1,6 @@ // { dg-lto-do assemble } // { dg-lto-options { { -flto -ffat-lto-objects -fdebug-types-section -g -std=gnu++17 } } } - +// { dg-skip-if "no fdebug-types-section" { *-*-darwin* } } template struct integral_constant { diff --git a/gcc/testsuite/g++.dg/lto/pr87906_0.C b/gcc/testsuite/g++.dg/lto/pr87906_0.C index 623c29ca007a..038ba0bbbf86 100644 --- a/gcc/testsuite/g++.dg/lto/pr87906_0.C +++ b/gcc/testsuite/g++.dg/lto/pr87906_0.C @@ -4,6 +4,7 @@ // { dg-require-effective-target shared } // { dg-lto-options { { -O -fPIC -flto } } } // { dg-extra-ld-options "-shared -nostdlib" } +// { dg-extra-ld-options "-shared -nostdlib -Wl,-undefined,dynamic_lookup -lSystem" { target *-*-darwin* } } namespace com { namespace moon { diff --git a/gcc/testsuite/g++.dg/lto/pr88046_0.C b/gcc/testsuite/g++.dg/lto/pr88046_0.C index 99224b5011f8..f1b54958233d 100644 --- a/gcc/testsuite/g++.dg/lto/pr88046_0.C +++ b/gcc/testsuite/g++.dg/lto/pr88046_0.C @@ -4,6 +4,7 @@ // { dg-require-effective-target shared } // { dg-require-effective-target fpic } // { dg-extra-ld-options "-shared -g" } +// { dg-extra-ld-options "-shared -g -Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } class a {}; class b : virtual a { diff --git a/gcc/testsuite/g++.dg/lto/pr88758_0.C b/gcc/testsuite/g++.dg/lto/pr88758_0.C index eccbf63c358b..025ea05ebbdc 100644 --- a/gcc/testsuite/g++.dg/lto/pr88758_0.C +++ b/gcc/testsuite/g++.dg/lto/pr88758_0.C @@ -2,6 +2,7 @@ // { dg-require-effective-target fpic } // { dg-require-effective-target shared } // { dg-lto-options { { -O3 -fPIC -flto -shared } } } +// { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } void PreEvaluate(void); int main() { PreEvaluate(); return 0; } diff --git a/gcc/testsuite/g++.dg/lto/pr89330_0.C b/gcc/testsuite/g++.dg/lto/pr89330_0.C index 9f06556754af..6ab7dc8c5b42 100644 --- a/gcc/testsuite/g++.dg/lto/pr89330_0.C +++ b/gcc/testsuite/g++.dg/lto/pr89330_0.C @@ -2,6 +2,7 @@ // { dg-lto-options { { -O3 -g -flto -shared -fPIC -Wno-odr } } } // { dg-require-effective-target fpic } // { dg-require-effective-target shared } +// { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } namespace Inkscape { class Anchored {}; diff --git a/gcc/testsuite/g++.dg/lto/pr91574_0.C b/gcc/testsuite/g++.dg/lto/pr91574_0.C index 346a8015c98a..70cb2900b7a0 100644 --- a/gcc/testsuite/g++.dg/lto/pr91574_0.C +++ b/gcc/testsuite/g++.dg/lto/pr91574_0.C @@ -4,6 +4,7 @@ // { dg-require-effective-target shared } // { dg-require-effective-target fpic } // { dg-extra-ld-options "-shared" } +// { dg-extra-ld-options "-shared -Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } class A { diff --git a/gcc/testsuite/g++.dg/lto/pr92609_0.C b/gcc/testsuite/g++.dg/lto/pr92609_0.C index 3cce1811d1e0..74e8a12e061e 100644 --- a/gcc/testsuite/g++.dg/lto/pr92609_0.C +++ b/gcc/testsuite/g++.dg/lto/pr92609_0.C @@ -4,6 +4,7 @@ // { dg-require-effective-target shared } // { dg-require-effective-target fpic } // { dg-extra-ld-options "-shared" } +// { dg-extra-ld-options "-shared -Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } namespace std { inline namespace __cxx11 {} diff --git a/gcc/testsuite/g++.dg/lto/pr93166_0.C b/gcc/testsuite/g++.dg/lto/pr93166_0.C index a83ba6e0400c..58f97b394970 100644 --- a/gcc/testsuite/g++.dg/lto/pr93166_0.C +++ b/gcc/testsuite/g++.dg/lto/pr93166_0.C @@ -5,6 +5,7 @@ // { dg-require-effective-target fpic } // { dg-extra-ld-options "-shared" } // { dg-require-visibility "" } +// { dg-extra-ld-options "-shared -Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } namespace Qt { enum DropAction {}; diff --git a/gcc/testsuite/gcc.dg/lto/pr61526_0.c b/gcc/testsuite/gcc.dg/lto/pr61526_0.c index d3e2c8008dbe..f80d2dab86a6 100644 --- a/gcc/testsuite/gcc.dg/lto/pr61526_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr61526_0.c @@ -3,6 +3,7 @@ /* { dg-lto-do link } */ /* { dg-lto-options { { -fPIC -flto -flto-partition=1to1 } } } */ /* { dg-extra-ld-options { -shared } } */ +/* { dg-extra-ld-options "-shared -Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ static void *master; void *foo () { return master; } -- 2.47.3