http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56397
--- Comment #5 from argentinator.gcc.questions at outlook dot com 2013-02-19
18:58:17 UTC ---
(In reply to comment #4)
> This looks like it's just an issue with the diagnostic text
> (binary_op_error being called with the type in which the floating-point
> operand is being represented, rather than with its semantic type).
Is this "type/semantic type" issue related to the following observation?
I tried to print the value of fpclassify for a 'subnormal' value whose type is
'float' or 'double', but it seems the compiler considers everything as a 'long
double'. The source code would be:
------------------------------------------------------------------------------
#include <math.h>
#include <float.h>
#include <stdio.h>
int main(void) {
double x = DBL_MIN / 1024.0;
long double z = LDBL_MIN / 1024.0;
printf("x == %a\n\nClass of x == %X\n\nClass of z == %X\n",
x, fpclassify(x), fpclassify(z));
}
------------------------------------------------------------------------------
(As always, I am running on Windows 7, MinGW, GCC 4.7.2,
command line option -std=c99, and I have FLT_EVAL_METHOD == 2).
My output is:
------------------------
x == 0x8p-1035 /* This is a 'double subnormal' value */
Class of x == 400 /* x is 'double' and normal, so this seems wrong */
Class of z == 4400 /* z is 'long double' and 'subnormal': OK */
------------------------