The answer is: it's a gcc bug.  The attached program should print
x = 12.3
y = 12.3

but if compiled with -O or -O2 on Stefan's machine, I get garbage:

$ gcc -O  ftest.c
$ ./a.out
x = 12.3
y = 1.47203e-39
$ gcc -v
Reading specs from /usr/lib/gcc-lib/sparc64-unknown-openbsd3.6/3.3.2/specs
Configured with:
Thread model: single
gcc version 3.3.2 (propolice)
$

                        regards, tom lane


#include <stdio.h>

float
returnfloat(float *x)
{
        return *x;
}

int
main()
{
        float x = 12.3;
        union {
                float f;
                char *t;
        } y;

        y.f = returnfloat(&x);

        printf("x = %g\n", x);
        printf("y = %g\n", y.f);

        return 0;
}

---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
      joining column's datatypes do not match

Reply via email to