> Message du 20/10/21 17:14
> De : "Vladislav Yaglamunov" 
> A : valgrind-users@lists.sourceforge.net
> Copie à : 
> Objet : [Valgrind-users] Cubic root of zero gives wrong result with clang 
> 64-bit
> 
>Hi,

>I am using Valgrind 3.17.0 and noticed a strange behavior while running a code 
>compiled with clang:

>
> #include 
> 
> int main() {
>     long double x = std::cbrtl(0.0L);
>     printf("%Lf", x);
> 
>     return 0;
> }

I just did a test with g++. I had to modify the code a bit to prevent the 
compiler replacing the cbrtl() call with just a zero:

#include 
#include 

int main() {
volatile long double arg{0.0L};
long double x = std::cbrtl(arg);
printf("%Lf", x);

return 0;
}

This seems to work OK, both default and -m32.


The asm for that is

00000000004011a5 :
4011a5: 55 push %rbp
4011a6: 48 89 e5 mov %rsp,%rbp
4011a9: 48 83 ec 20 sub $0x20,%rsp
4011ad: d9 ee fldz
4011af: db 7d e0 fstpt -0x20(%rbp)
4011b2: db 6d e0 fldt -0x20(%rbp)
4011b5: 48 8d 64 24 f0 lea -0x10(%rsp),%rsp
4011ba: db 3c 24 fstpt (%rsp)
4011bd: e8 8e fe ff ff callq 401050 
4011c2: 48 83 c4 10 add $0x10,%rsp
4011c6: db 7d f0 fstpt -0x10(%rbp)
4011c9: ff 75 f8 pushq -0x8(%rbp)
4011cc: ff 75 f0 pushq -0x10(%rbp)
4011cf: bf 04 20 40 00 mov $0x402004,%edi
4011d4: b8 00 00 00 00 mov $0x0,%eax
4011d9: e8 62 fe ff ff callq 401040 

4011de: 48 83 c4 10 add $0x10,%rsp
4011e2: b8 00 00 00 00 mov $0x0,%eax
4011e7: c9 leaveq
4011e8: c3 retq


I'll have a go with clang++ at home tonight.

A+
Paul



_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to