[gnu.g++.bug] Bug in g++ 1.35.0: Generates incorrect code for references.

amanda@IESD.AUC.DK (Per Abrahamsen) (08/05/89)

System: g++ 1.35.0 on a Sun3/60 with 8Mb RAM running SunOS 4.0.1.

I do not understand the semantics of references, but I believe the
following code should be correct, since BS uses it as an example in
the bible. It also works under cfront 1.2.

Script started on Sat Aug  5 04:33:29 1989
$ cat err7.cc
#include <stream.h>

#ifndef __GNUG__
enum bool { FALSE, TRUE };
#endif

struct coor
{
    short x;
    short y;
    inline bool operator!=(const coor& pos)
    { return x != pos.x || y != pos.y; }
    inline const coor& operator=(const coor& pos)
    { x = pos.x; y = pos.y; return pos; }
    inline coor(int x, int y)
    { coor::x = x; coor::y = y; }
    inline coor(const coor& pos)
    { x = pos.x; y = pos.y; }
    inline coor()
    { x = y = 0; }
};

int main()
{
    coor pos;
    cout << "A\n";
    
    if((pos = coor(0, 0)) != coor(-32001, -32001)) // G++ BUG!
	cout << "B\n";

    return 0;
}

    
$ g++ -v -g err7.cc
g++ version 1.35.0
 /home/local/gnu/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 err7.cc /tmp/cca14642.cpp
GNU CPP version 1.35
 /home/local/gnu/lib/gcc-cc1plus /tmp/cca14642.cpp -quiet -dumpbase err7.cc -noreg -version -G -o /tmp/cca14642.s
GNU C++ version 1.35.0 (68k, MIT syntax) compiled by GNU C version 1.35.
 as -mc68020 /tmp/cca14642.s -o err7.o
 /home/local/gnu/lib/gcc-ld++ -C -dc -dp -Bstatic /home/local/gnu/lib/crt0+.o /lib/Mcrt1.o err7.o -lg++ /home/local/gnu/lib/gcc-gnulib -lg -lc
$ a.out
A
Memory fault - core dumped
$ 
script done on Sat Aug  5 04:34:13 1989

--
Per Abrahamsen,  amanda@iesd.dk, {...}!mcvax!diku!iesd!amanda