mirror of
https://github.com/golang/go
synced 2024-11-23 04:30:03 -07:00
da769814b8
Before GCC 8 C code like const unsigned long long int neg = (const unsigned long long) -1; void f(void) { static const double x = (neg); } would get an error "initializer element is not constant". In GCC 8 and later it does not. Because a value like neg, above, can not be used as a general integer constant, this causes cgo to conclude that it is a floating point constant. The way that cgo handles floating point values then causes it to get the wrong value for it: 18446744073709551615 rather than -1. These are of course the same value when converted to int64, but Go does not permit that kind of conversion for an out-of-range constant. This CL side-steps the problem by treating floating point constants with integer type as they would up being treated before GCC 8: as variables rather than constants. Fixes #26066 Change-Id: I6f2f9ac2fa8a4b8218481b474f0b539758eb3b79 Reviewed-on: https://go-review.googlesource.com/121035 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> |
||
---|---|---|
.. | ||
errors | ||
fortran | ||
gmp | ||
life | ||
nocgo | ||
stdio | ||
test | ||
testasan | ||
testcarchive | ||
testcshared | ||
testgodefs | ||
testplugin | ||
testsanitizers | ||
testshared | ||
testsigfwd | ||
testso | ||
testsovar | ||
testtls |