Package: gcc-3.3 Version: 1:3.3.2-0pre1 Severity: minor Try compiling the following function with "gcc-3.3 -c const.c". GCC gives "assignment of read-only variable" warnings on the indicated lines. This shows that __typeof__ treats the corresponding arguments as const.
void fn(void) { int n; const int c; { __typeof__(n) a1; a1=0; } { __typeof__(c) a2; a2=0; } /* warning */ { __typeof__(n+n) b0; b0=0; } { __typeof__(n+c) b1; b1=0; } /* warning */ { __typeof__(c+n) b2; b2=0; } { __typeof__(c+c) b3; b3=0; } /* warning */ { __typeof__(1+n) c0; c0=0; } { __typeof__(1+c) c1; c1=0; } /* warning */ { __typeof__(n+1) c2; c2=0; } { __typeof__(c+1) c3; c3=0; } { __typeof__(((int)n)+((int)n)) d0; d0=0; } { __typeof__(((int)n)+((int)c)) d1; d1=0; } /* warning */ { __typeof__(((int)c)+((int)n)) d2; d2=0; } { __typeof__(((int)c)+((int)c)) d3; d3=0; } /* warning */ { __typeof__(((const int)n)+((const int)n)) e0; e0=0; } { __typeof__(((const int)n)+((const int)c)) e1; e1=0; } /* warning */ { __typeof__(((const int)c)+((const int)n)) e2; e2=0; } { __typeof__(((const int)c)+((const int)c)) e3; e3=0; } /* warning */ } The behavior at b1 and b2 seems inconsistent. If n+c is const, then surely c+n should be as well, given that the addition operator is commutative in all other respects. Cases c0 to c3 show that GCC treats an integer constant as a non-const rvalue. Cases d0 to d3 and e0 to e3 show that casts have no effect on the constness of the result; that can't be right either. I think it would be cleanest to make the addition operator always return a non-const rvalue, regardless of whether the operands are const. After all, the result is supposed to be freshly computed. -- System Information: Debian Release: testing/unstable Architecture: i386 Kernel: Linux Astalo 2.4.21-kon.astalo.1 #1 la elokuun 23. 01:05:31 EEST 2003 i686 Locale: [EMAIL PROTECTED], [EMAIL PROTECTED] Versions of packages gcc-3.3 depends on: ii binutils 2.14.90.0.4-0.1 The GNU assembler, linker and bina ii cpp-3.3 1:3.3.2-0pre1 The GNU C preprocessor ii gcc-3.3-base 1:3.3.2-0pre1 The GNU Compiler Collection (base ii libc6 2.3.2-2 GNU C Library: Shared libraries an ii libgcc1 1:3.3.2-0pre1 GCC support library -- no debconf information