expression statements broken in c++ egcs-20000207

Martin Buchholz martin@xemacs.org
Sun Feb 13 01:41:00 GMT 2000


In the source file below,

  union obj x = ({ (p)->o; });

elicits the bogus error ==>  tt.c:7: non-lvalue in unary `&'
while

  union obj y = (p)->o;

does not.  No such problems with the C compiler.

Tiny reproducible unencumbered test case!  Shell transcript follows.

(ObLegal: I hereby place this message in the public domain)

(martin@lasker) ~/src $ cat tt.c
union obj { int foo; char *bar; };
struct { union obj o; int c; } *p;

int main (int argc, char *argv[])
{
  union obj y = (p)->o;
  union obj x = ({ (p)->o; });
}

(martin@lasker) ~/src $ /hack/import/egcs-20000207/inst/linux-libc2/bin/c++  -c -v tt.c
Reading specs from /hack/import/egcs-20000207/inst/linux-libc2/lib/gcc-lib/i686-pc-linux-gnu/2.96/specs
gcc version 2.96 20000207 (experimental)
 /hack/import/egcs-20000207/inst/linux-libc2/lib/gcc-lib/i686-pc-linux-gnu/2.96/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=96 -D__cplusplus -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_pentiumpro__ tt.c /tmp/ccEIP7pc.ii
GNU CPP version 2.96 20000207 (experimental) (cpplib)
 (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 /hack/import/egcs-20000207/inst/include/g++-3
 /hack/import/egcs-20000207/inst/include
 /hack/import/egcs-20000207/inst/linux-libc2/i686-pc-linux-gnu/include
 /hack/import/egcs-20000207/inst/linux-libc2/lib/gcc-lib/i686-pc-linux-gnu/2.96/include
 /usr/include
End of search list.
 /hack/import/egcs-20000207/inst/linux-libc2/lib/gcc-lib/i686-pc-linux-gnu/2.96/cc1plus /tmp/ccEIP7pc.ii -quiet -dumpbase tt.cc -version -o /tmp/ccUJtzae.s
GNU C++ version 2.96 20000207 (experimental) (i686-pc-linux-gnu) compiled by GNU C version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).
tt.c: In function `int main (int, char **)':
tt.c:7: non-lvalue in unary `&'

(martin@lasker) ~/src $ /hack/import/egcs-20000207/inst/linux-libc2/bin/gcc  -c -v tt.c
Reading specs from /hack/import/egcs-20000207/inst/linux-libc2/lib/gcc-lib/i686-pc-linux-gnu/2.96/specs
gcc version 2.96 20000207 (experimental)
 /hack/import/egcs-20000207/inst/linux-libc2/lib/gcc-lib/i686-pc-linux-gnu/2.96/cpp -lang-c -v -D__GNUC__=2 -D__GNUC_MINOR__=96 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_pentiumpro__ tt.c /tmp/cccSNZYz.i
GNU CPP version 2.96 20000207 (experimental) (cpplib)
 (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 /hack/import/egcs-20000207/inst/include
 /hack/import/egcs-20000207/inst/linux-libc2/i686-pc-linux-gnu/include
 /hack/import/egcs-20000207/inst/linux-libc2/lib/gcc-lib/i686-pc-linux-gnu/2.96/include
 /usr/include
End of search list.
 /hack/import/egcs-20000207/inst/linux-libc2/lib/gcc-lib/i686-pc-linux-gnu/2.96/cc1 /tmp/cccSNZYz.i -quiet -dumpbase tt.c -version -o /tmp/ccYFqtA1.s
GNU C version 2.96 20000207 (experimental) (i686-pc-linux-gnu) compiled by GNU C version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).
 as -V -Qy -o tt.o /tmp/ccYFqtA1.s
GNU assembler version 2.9.1 (i386-redhat-linux), using BFD version 2.9.1.0.23


More information about the Gcc-bugs mailing list