diff mbox

[testsuite] Add check_effective_target_rdynamic and use it in g++.dg/lto/pr69589_0.C.

Message ID A614194ED15B4844BC4C9FB7F21FCD9270456A99@hhmail02.hh.imgtec.org
State New
Headers show

Commit Message

Toma Tabacu March 6, 2017, 2:17 p.m. UTC
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.

Comments

Rainer Orth March 8, 2017, 3:04 p.m. UTC | #1
Hi Toma,

> 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.

could it be that mips/sde.h is just missing -rdynamic handling in
LINK_SPEC?  At least some bare-metal targets using gld *do* support
-rdynamic (cf. xtensa/elf.h and aarch64/aarch64-elf-raw.h)...

That said, I like the general direction of this patch, even when the new
keyword is only used in one place.

> 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 ?
[...]
> 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.

I think this line isn't necessary.  Just keep the first.

Ok for mainline with that fixed.

Thanks.
        Rainer
Matthew Fortune March 9, 2017, 9:39 a.m. UTC | #2
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:
> > 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.
> 
> could it be that mips/sde.h is just missing -rdynamic handling in
> LINK_SPEC?  At least some bare-metal targets using gld *do* support -
> rdynamic (cf. xtensa/elf.h and aarch64/aarch64-elf-raw.h)...

There's probably no harm in adding it in to mips/sde.h it just doesn't
really add much value either. We have some (very subtle) ABI differences
between ELF and Linux targets so I'm not sure it is worth trying to
make sure all options exist/behave the same given such differences.

Matthew
Toma Tabacu March 9, 2017, 3:08 p.m. UTC | #3
> 
> Ok for mainline with that fixed.
> 
> Thanks.
>         Rainer
> 

Committed as r246004.

Thanks,
Toma
Renlin Li June 2, 2017, 2:06 p.m. UTC | #4
Hi Toma,

Thanks for fixing this! Do you have plan to backport the fix to gcc-6 branch?


Regards,
Renlin

On 09/03/17 15:08, Toma Tabacu wrote:
>>
>> Ok for mainline with that fixed.
>>
>> Thanks.
>>          Rainer
>>
>
> Committed as r246004.
>
> Thanks,
> Toma
>
diff mbox

Patch

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 { } {