https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82071

            Bug ID: 82071
           Summary: Error in assign-ops in combination with
                    FLT_EVAL_METHOD
           Product: gcc
           Version: 4.8.4
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: willemw at ace dot nl
  Target Milestone: ---

Compiler:
  Target: i686-linux-gnu
  GNU C (Ubuntu 4.8.4-2ubuntu1~14.04.3) version 4.8.4 (i686-linux-gnu)
  Compile option: -std=c99

The 4 expressions in the program below should give all the same answer.
When using the mentioned compiler that has FLT_EVAL_METHOD=2 gives
3 different answers.

The program:

# include <stdio.h>
# include <float.h>

int
main()
{
        float f = 1.0;
        double d = 1.0;
        int i, j;

#ifdef FLT_EVAL_METHOD
        printf("FLT_EVAL_METHOD: %d\n", FLT_EVAL_METHOD );
#endif

        i = 0x10001234;
        i += f;
        printf("i += f;  \t0x%x\n", i );

        i = 0x10001234;
        i += 1.0f;
        printf("i += 1.0f;\t0x%x\n", i );

        i = 0x10001234;
        i = i + f;
        printf("i = i + f;\t0x%x\n", i );

        i = 0x10001234;
        i = i + 1.0f;
        printf("i = i + 1.0f;\t0x%x\n", i );

}

The results:

FLT_EVAL_METHOD: 2
i += f;         0x10001240
i += 1.0f;      0x10001235
i = i + f;      0x10001241
i = i + 1.0f;   0x10001241

The correct answers is 0x10001241: the expression should be evaluated in long
double.

Reply via email to