[Bug c/112614] New: Compile-time float-to-_Decimal64 fails for -NAN
terra at gnome dot org
gcc-bugzilla@gcc.gnu.org
Sun Nov 19 00:37:10 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112614
Bug ID: 112614
Summary: Compile-time float-to-_Decimal64 fails for -NAN
Product: gcc
Version: 11.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: terra at gnome dot org
Target Milestone: ---
Created attachment 56636
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=56636&action=edit
Preprocessed source code
It looks like compile-time conversion of -NAN and -(double)NAN to _Decimal64
fails. Runtime conversion seems ok. -INFINITY is ok.
Tentatively blaming the C front end.
$ gcc -Wall -O2 d64nansign.c
$ ./a.out
Sign bit set as expected
Sign bit set as expected
Sign bit not set as expected
Sign bit not set as expected
Sign bit set as expected
Sign bit set as expected
Target: x86_64-linux-gnu
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <assert.h>
#include <string.h>
#include <math.h>
static void
test (_Decimal64 x)
{
uint64_t u;
assert (sizeof (x) == sizeof (u));
memcpy (&u, &x, sizeof(x));
if (u >> 63) {
printf ("Sign bit set as expected\n");
} else {
printf ("Sign bit not set as expected\n");
}
}
int
main (int argc, char **argv)
{
// compile-time
test (-(_Decimal64)(NAN));
test (-(_Decimal64)(NAN));
test ((_Decimal64)(-NAN)); // Fails
test ((_Decimal64)(-(double)NAN)); // Fails
// runtime
test (atof("-nan"));
test (-atof("nan"));
}
More information about the Gcc-bugs
mailing list