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