rs6000, testsuite: Correct the broken_cplxf_arg test

check_effective_target_broken_cplxf_arg is buggy.  It actually tests
if passing complex float works, not if it fails.  Also, it only runs
the test for target powerpc64-linux, but we are biarch, so it should
be powerpc*-linux.

This also changes the early-out conditions to be separate, because
the big combined condition was hard to follow.

This fixes the libstdc++ tests:

Running target unix/-m64
XPASS: 26_numerics/complex/13450.cc execution test
XPASS: 26_numerics/complex/pow.cc execution test
XPASS: 26_numerics/complex/value_operations/1.cc execution test

which were the last failing libstdc++ tests on BE.


gcc/testsuite/
	* lib/target-supports.exp (check_effective_target_broken_cplxf_arg):
	Fix test.  Make early-out condition return early.  Correct comments.

From-SVN: r246072
This commit is contained in:
Segher Boessenkool 2017-03-12 01:04:02 +01:00 committed by Segher Boessenkool
parent 376d267501
commit 3079b92e34
2 changed files with 30 additions and 27 deletions

View File

@ -1,3 +1,8 @@
2017-03-11 Segher Boessenkool <segher@kernel.crashing.org>
* lib/target-supports.exp (check_effective_target_broken_cplxf_arg):
Fix test. Make early-out condition return early. Correct comments.
2017-03-11 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/78854

View File

@ -2210,36 +2210,34 @@ proc check_effective_target_powerpc64 { } {
# GCC 3.4.0 for powerpc64-*-linux* included an ABI fix for passing
# complex float arguments. This affects gfortran tests that call cabsf
# in libm built by an earlier compiler. Return 1 if libm uses the same
# argument passing as the compiler under test, 0 otherwise.
#
# When the target name changes, replace the cached result.
# in libm built by an earlier compiler. Return 0 if libm uses the same
# argument passing as the compiler under test, 1 otherwise.
proc check_effective_target_broken_cplxf_arg { } {
# Skip the work for targets known not to be affected.
if { ![istarget powerpc*-*-linux*] || ![is-effective-target lp64] } {
return 0
}
return [check_cached_effective_target broken_cplxf_arg {
# Skip the work for targets known not to be affected.
if { ![istarget powerpc64-*-linux*] } {
expr 0
} elseif { ![is-effective-target lp64] } {
expr 0
} else {
check_runtime_nocache broken_cplxf_arg {
#include <complex.h>
extern void abort (void);
float fabsf (float);
float cabsf (_Complex float);
int main ()
{
_Complex float cf;
float f;
cf = 3 + 4.0fi;
f = cabsf (cf);
if (fabsf (f - 5.0) > 0.0001)
abort ();
return 0;
}
} "-lm"
}
check_runtime_nocache broken_cplxf_arg {
#include <complex.h>
extern void abort (void);
float fabsf (float);
float cabsf (_Complex float);
int main ()
{
_Complex float cf;
float f;
cf = 3 + 4.0fi;
f = cabsf (cf);
if (fabsf (f - 5.0) > 0.0001)
/* Yes, it's broken. */
return 0;
/* All fine, not broken. */
return 1;
}
} "-lm"
}]
}