Hi, g++.dg/lto/pr69589_0.C is currently failing for mips-mti-elf with the following error:
xg++: error: unrecognized command line option '-rdynamic' However, it passes just fine for mips-mti-linux-gnu. I think that we should skip this test for mips-mti-elf. This patch achieves this by adding support for check_effective_target_rdynamic and then using it in g++.dg/lto/pr69589_0.C. This patch also removes the existing dg-skip-if, as it is made redundant by the effective target check. The latter is also more convenient, as we won't have to keep tweaking the dg-skip-if for failing targets anymore. This is similar to my recent check_effective_target_gettimeofday patch, which was greatly improved by Rainer Orth's review. Tested with mips-mti-elf and mips-mti-linux-gnu. Does this look good ? Regards, Toma gcc/ * doc/sourcebuild.texi (Effective-Target Keywords, Other attributes): Document rdynamic. gcc/testsuite/ * g++.dg/lto/pr69589_0.C: Add dg-require-effective-target for rdynamic. Remove dg-skip-if for targets which don't support -rdynamic. * lib/target-supports.exp (check_effective_target_rdynamic): New proc. diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 0dc4348..d75e078 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2065,6 +2065,9 @@ Target supports @option{-mpe-aligned-commons}. @item pie Target supports @option{-pie}, @option{-fpie} and @option{-fPIE}. +@item rdynamic +Target supports @option{-rdynamic}. + @item section_anchors Target supports section anchors. diff --git a/gcc/testsuite/g++.dg/lto/pr69589_0.C b/gcc/testsuite/g++.dg/lto/pr69589_0.C index 11766f1..599d5d4 100644 --- a/gcc/testsuite/g++.dg/lto/pr69589_0.C +++ b/gcc/testsuite/g++.dg/lto/pr69589_0.C @@ -1,7 +1,7 @@ // { dg-lto-do link } // { dg-lto-options "-O2 -rdynamic" } // { dg-extra-ld-options "-r -nostdlib" } -// { dg-skip-if "Skip targets without -rdynamic support" { arm*-none-eabi aarch64*-*-elf nios2-*-elf } { "*" } { "" } } +// { dg-require-effective-target rdynamic } #pragma GCC visibility push(hidden) struct A { int &operator[] (long); }; diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 2766af4..f46f0ba 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1484,6 +1484,16 @@ proc check_effective_target_static_libgfortran { } { } "-static"] } +# Return 1 if we can use the -rdynamic option, 0 otherwise. +# +# When the target name changes, replace the cached result. + +proc check_effective_target_rdynamic { } { + return [check_no_compiler_messages rdynamic executable { + int main() { return 0; } + } "-rdynamic"] +} + # Return 1 if cilk-plus is supported by the target, 0 otherwise. proc check_effective_target_cilkplus { } {