On 03/05/2019 12:16, Jonathan Wakely wrote:
> On 03/05/19 09:23 +0000, Szabolcs Nagy wrote:
>> On 01/05/2019 01:09, Jonathan Wakely wrote:
>>> The current generic implementation of __complex_proj used when cproj is
>>> not available calculates the wrong projection, giving a different result
>>> than given by C99's cproj.
>>>
>>> When C99 cproj is not available but isinf and copysign are, use those to
>>> give correct results for float, double and long double. Otherwise, and
>>> for other specializations of std::complex, just use a generic version
>>> that returns its argument, and so doesn't support infinities.
>>>
>>> We might want to consider adding additional overloads of __complex_proj
>>> to support extended types such as _Float64x, _Float128 etc.
>>>
>>>     PR libstdc++/61761
>>>     * include/std/complex (__complex_proj): Return parameter unchanged.
>>>     [_GLIBCXX_USE_C99_COMPLEX] (__complex_proj): Change overloads for
>>>     floating-point types to take std::complex arguments.
>>>     [_GLIBCXX_USE_C99_MATH_TR1] (__complex_proj): Add overloads for
>>>     floating-point types.
>>>     * testsuite/26_numerics/complex/proj.cc: New test.
>>>
>>> Tested powerpc64le-linux, powerpc-aix7.2.0.0, x86_64-freebsd11.2,
>>> committed to trunk.
>>
>> fails on aarch64-none-elf (newlib) with
>>
>> FAIL: 26_numerics/complex/proj.cc (test for excess errors)
>> Excess errors:
>> /work/b/src/gcc/libstdc++-v3/testsuite/26_numerics/complex/proj.cc:32: 
>> error: 'copysign' is not a member of 'std'; did you mean 'copy_n'?
>> /work/b/src/gcc/libstdc++-v3/testsuite/26_numerics/complex/proj.cc:32: 
>> error: 'copysign' is not a member of 'std'; did you mean 'copy_n'?
>> /work/b/src/gcc/libstdc++-v3/testsuite/26_numerics/complex/proj.cc:34: 
>> error: 'copysign' is not a member of 'std'; did you mean 'copy_n'?
>> /work/b/src/gcc/libstdc++-v3/testsuite/26_numerics/complex/proj.cc:34: 
>> error: 'copysign' is not a member of 'std'; did you mean 'copy_n'?
>>
>> i assume std::copysign should be visible in <complex> via <cmath>
> 
> It should, but only for C++11, and this needs to work for C++98 too. I
> missed that problem.
> 
>> but cmath does not have it.
> 
> Hmm, which file in the source tree does the include/cmath symlink in
> the build tree point to?

/work/b/build-aarch64-none-elf/obj/gcc2/aarch64-none-elf/libstdc++-v3$ ls -l 
include/cmath
lrwxrwxrwx 1 szabolcs szabolcs 51 May  1 18:06 include/cmath -> 
/work/b/src/gcc/libstdc++-v3/include/c_global/cmath

Reply via email to