[gnu.g++.bug] _abort in cplus-decl2.c hurts Decstations; tPlex won't compile; ...

tdw%computer-lab.cambridge.ac.uk@NSFNET-RELAY.AC.UK (01/16/90)

To readers of gnu.g++.bug with Decstations:
------------------------------------------

Perhaps someone would be kind enough to tell me whether g++ is known
to work (or not to work) on Decstations?  And if it does work (as I
hope), what patches (in addition to Dirk Grunwald's) or more recent
versions of the sources should I use?  This info might be worth
posting...   Thanks in advance.

Here are some bug reports relating to my attempt to install g++ on a 
3100.


Report 1:  "Trouble linking the library"
========================================

VERSION:	g++ 1.36.1 and gcc1.36 with Dirk Grunwald's patches for MIPS
FILES: 		libg++ 1.36.0, last entry in the ChangeLog dated
		Wed Nov  8 06:19:39 1989  Doug Lea  
COMMAND: 	make tests for libg++
SYSTEM: 	Decstation 3100 (MIPS) running Ultrix 3.1A
BUG: 		link step on tRandom.cc and others fails, becuase of undefined
		external _abort.

SUGGESTION:

Line 984 in cplus-decl2.c:

      /* @@ Assume names have underscores.  */
      if (asmspec_abort == 0)
	asmspec_abort = build_string (strlen ("_abort"), "_abort");

On this system, names don't have underscores!


Report 2: "The compiler spat out one of the test programs"
==========================================================

After removing the underscores, and recompiling g++, I returned to
compiling the test programs.  I found that test program tPlex.cc would
not compile:

gcc version 1.36.1 (based on GCC 1.36)
 /usr/groups/pnd1/gcc-1.36/mips_ultrix/lib/gcc-cpp -+ -v -I/usr/groups/pnd1/g++/libg++/mips_ultrix/g++-include -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dmips -Dunix -D__mips__ -D__unix__ -D__OPTIMIZE__ -Wall -DR3000 -DLANGUAGE_C -DMIPSEL -DSYSTYPE_BSD -Dultrix tPlex.cc /usr/tmp/cca18538.cpp
GNU CPP version 1.36
 /usr/groups/pnd1/gcc-1.36/mips_ultrix/lib/gcc-cc1plus /usr/tmp/cca18538.cpp -O -fstrength-reduce -fomit-frame-pointer -quiet -dumpbase tPlex.cc -fstrength-reduce -felide-constructors -fschedule-insns -fdelayed-branch -fsave-memoized -O -Wall -version -o /usr/tmp/cca18538.s
GNU C++ version 1.36.1 (based on GCC 1.36) compiled by GNU C version 1.36.
default target switches: -munix -mnofixed-ovfl -mG0 -mG1
tPlex.cc: In function void MPtest ():
tPlex.cc:535: The following insn was not recognizable:
(insn/i 117 116 118 (set (reg:SI 93)
       (neg:SI (mem/s:SI (plus:SI (reg:SI 87)
                   (const_int 4))))) -1 (nil)
   (nil))
/usr/groups/pnd1/gcc-1.36/mips_ultrix/bin/g++: Program cc1plus got
fatal signal 4.

(I'm not sending a complete input file, since I trust the library
sources are `well known'.)


Report 3: "Some of the test programs crashed"
=============================================

tPlex.cc compiled successfully when I removed the -O and -f* switches,
and I compiled the rest of the test programs with the switches shown
above (ie the default switched from the makefile).

Several of them failed, though; here is the difference listing: 
(The first difference is expected--see "for i in ..."; 
boring bits deleted)
cat checktests.diffs
1c1
< for i in test0 tFile tObstack tString tInteger twrapper tgwrapper tRational tComplex tBitSet tBitString tRandom tFix tFix16 tFix24 tCurses tGetOpt tList tPlex tLList tVec tStack tQueue tDeque tPQ tSet tSet2 tBag tBag2 tMap ; do \
---
> for i in tFile tObstack tString tInteger twrapper tgwrapper tRational tComplex tBitSet tBitString tRandom tFix tFix16 tFix24 tCurses tGetOpt tList tPlex tLList tVec tStack tQueue tDeque tPQ tSet tSet2 tBag tBag2 tMap ; do \
9d8
< Must run test0 from tty
17c16
< enter a float then a double:first  = 123.456
---
> enter a float then a double:first  = -.014313
64,94c63
< 
< unique words:
< deleted
[...]
< is
< This
< 
< 
< Obstack vars:
< alignment_mask = 3
< chunk_size = 4092
< size = 0
< room = 4068
< 
< end of test
---
> /bin/sh: 20176 Memory fault - core dumped
144,185c113,114
< one = 1
< one + 1 = 2
< two = 2
< fact30 = factorial(30) = 265252859812191058636308480000000
< fact28 = factorial(28) = 304888344611713860501504000000
< fact30 + fact28 = 265557748156802772496809984000000
< fact30 - fact28 = 264947971467579344775806976000000
< fact30 * fact28 = 80872505331661933764010628483512781121876047953920000000000000
< fact30 / fact28 = 870
< fact30 % fact28 = 0
< -fact30 = -265252859812191058636308480000000
[...]
< enter an Integer: number = 12345678901234567890
< 
< End of test
---
> Failed assertion result == fact28 at line 315 of `tInteger.cc'.
> /bin/sh: 20180 Illegal instruction - core dumped
205,244c134,135
< one = 1
< third = 1/3
< half = 1/2
[...]
< 
< End of test
---
> Failed assertion (a * (b + c)) == ((a * b) + (a * c)) at line 28 of `tRational.cc'.
> /bin/sh: 20190 Illegal instruction - core dumped
[Stats differences deleted]
521c412
< 1073741824 = 1.07374e+09
---
> 1073741824 = 2.81472e+14
547c438
< man =  ccccccc8000
---
> man = ffff0ccbcccb8000

----------------------------------------------------------------------
I hope this info is of use to someone.

Tim
---
Tim Wilson |                    tdw@uk.ac.cam.cl | U of Cambridge Computer Lab,
           |      ...!uunet!mcvax!ukc!cam-cl!tdw | New Museums Site, Pembroke
Research   | tdw%cl.cam.ac.uk@nsfnet-relay.ac.uk | St, Cambridge, UK, CB2 3QG
assistant  | +44 223 334624;  Fax +44 223 334679 | (But not speaking for them)