tiemann@LURCH.STANFORD.EDU (Michael Tiemann) (11/29/89)
Date: 28-NOV-1989 14:46:18 GMT 1:00 From: MARSHALL%CAD.CS.MAN.AC.UK@mitvma.mit.edu To: bug-g++@prep.ai.mit.edu Subject: Re: G++ 1.36.1 assigns overlapping storage.... Sender: JANET "MARSHALL@UK.AC.MAN.CS.CAD" <MARSHALL%CAD.CS.MAN.AC.UK@mitvma.mit.edu> Mailer: Janet_Mailshr V3.3a (02-Feb-1989) Date sent: 28-NOV-1989 14:36:22 >You win the prize! There was one multiple-inheritance bug that was >stopping some friends of mine at Boulder (Dirk, do you still watch >this space?), but they couldn't narrow it down. I think that you >might have found the same one idenpendently. So identified, it was >very easy to fix: >> diff specified I applied the changes, however g++ now falls over (running under vms 5.2): I sent out a replacement for that patch about 1 hour later. The bug was calling `value_member' instead of `assoc_value' in the first clause of the change. If you don't get that chaser, let me know. BTW, 1.36.2 just compiled InterViews, ET++, and libg++ today. I will probably release it tomorrow. It is mostly a smoothed out 1.36.1 with a few small, but important bugfixes. Michael
MARSHALL%CAD.CS.MAN.AC.UK@MITVMA.MIT.EDU (11/29/89)
Date sent: 28-NOV-1989 14:36:22 >You win the prize! There was one multiple-inheritance bug that was >stopping some friends of mine at Boulder (Dirk, do you still watch >this space?), but they couldn't narrow it down. I think that you >might have found the same one idenpendently. So identified, it was >very easy to fix: >> diff specified I applied the changes, however g++ now falls over (running under vms 5.2): $ gpp/verb typeck_bug.cc $ gcc_cpp -+ "-D__cplusplus" TYPECK_BUG.CC GCC_000021E6.CPP $ Status=$status $ gcc_cc1 -version GCC_000021E6.CPP -dumpbase TYPECK_BUG.CC -opt -mgnu -mvaxc-alignment -o GCC_000021E6.S GNU C++ version 1.36.1 (based on GCC 1.36) (vax vms) compiled by GNU C version 1.36. default target switches: -munix float RNG::asFloat () Failed assertion assoc != NULL_TREE at line 1262 of `cplus-typeck.c'. %SYSTEM-F-OPCDEC, opcode reserved to DIGITAL fault at PC=000DCA02, PSL=03C00000 %TRACE-F-TRACEBACK, symbolic stack dump follows module name routine name line rel PC abs PC 000DCA02 000DCA02 CPLUS-TYPECK require_complete_type 00001866 00067990 CPLUS-CLASS build_vfn_ref 264 00000161 00075957 CPLUS-CLASS build_vtable 4640 00005227 0007ABC9 CPLUS-TYPECK default_conversion 00000DDB 00067FAD CPLUS-TAB yyparse 1246 00001909 000576B5 TOPLEV compile_file 0000073F 0001420F TOPLEV main 0000060A 000157CA $ EXIT $STATUS ------------------------------------------------------------------------------ Output of preprocessor follows: ------------------------------------------------------------------------------ # 1 "typeck_bug.cc" # 1 "GNU_GXX_INCLUDE:[000000]assert.h" 1 extern "C" void __eprintf (char*, int, char*); extern "C" volatile void abort(); # 5 "typeck_bug.cc" 2 # 1 "GNU_GXX_INCLUDE:[000000]ACG.h" 1 # 1 "GNU_GXX_INCLUDE:[000000]RNG.h" 1 #pragma once #pragma once # 1 "GNU_GXX_INCLUDE:[000000]assert.h" 1 extern "C" void __eprintf (char*, int, char*); extern "C" volatile void abort(); # 28 "GNU_GXX_INCLUDE:[000000]RNG.h" 2 # 1 "GNU_GXX_INCLUDE:[000000]math.h" 1 #pragma once # 57 "GNU_GXX_INCLUDE:[000000]math.h" extern "C" $ double acos(double); double acosh(double); double asin(double); double asinh(double); double atan(double); double atan2(double, double); double atanh(double); double cbrt(double); double ceil(double); double copysign(double,double); double cos(double); double cosh(double); double drem(double,double); double erf(double); double erfc(double); double exp(double); double expm1(double); double fabs(double); double finite(double); double floor(double); double frexp(double, int*); double gamma(double); double hypot(double,double); double infnan(int); int isinf(double); int isnan(double); double j0(double); double j1(double); double jn(int, double); double ldexp(double, int); double lgamma(double); double log(double); double log10(double); double log1p(double); double logb(double); double modf(double, double*); double pow(double, double); double rint(double); double scalb(double, int); double sin(double); double sinh(double); double sqrt(double); double tan(double); double tanh(double); double y0(double); double y1(double); double yn(int, double); struct libm_exception $ int type; char* name; double arg1, arg2, retval; ; extern "C" int matherr(libm_exception*); # 1 "GNU_GXX_INCLUDE:[000000]values.h" 1 #pragma once # 140 "GNU_GXX_INCLUDE:[000000]values.h" # 134 "GNU_GXX_INCLUDE:[000000]math.h" 2 # 29 "GNU_GXX_INCLUDE:[000000]RNG.h" 2 union PrivateRNGSingleType $ float s; unsigned long u; ; union PrivateRNGDoubleType $ double d; unsigned long u[2]; ; class RNG $ static PrivateRNGSingleType singleMantissa; static PrivateRNGDoubleType doubleMantissa; public: RNG(); virtual unsigned long asLong() = 0; virtual void reset() = 0; float asFloat(); double asDouble(); ; inline float RNG::asFloat() $ PrivateRNGSingleType result; result.s = 1.0; result.u |= (asLong() & singleMantissa.u); result.s -= 1.0; (( result.s < 1.0 && result.s >= 0) ? 1 : (__eprintf("Failed assertion " "result.s < 1.0 && result.s >= 0" " at line %d of `%s'.\n", 69, "GNU_GXX_INCLUDE:[000000]RNG.h"), abort (), 0)) ; return( result.s ); inline double RNG::asDouble() $ PrivateRNGDoubleType result; result.d = 1.0; result.u[0] |= (asLong() & doubleMantissa.u[0]); result.u[1] |= (asLong() & doubleMantissa.u[1]); result.d -= 1.0; (( result.d < 1.0 && result.d >= 0) ? 1 : (__eprintf("Failed assertion " "result.d < 1.0 && result.d >= 0" " at line %d of `%s'.\n", 80, "GNU_GXX_INCLUDE:[000000]RNG.h"), abort (), 0)) ; return( result.d ); # 26 "GNU_GXX_INCLUDE:[000000]ACG.h" 2 #pragma once class ACG : public RNG $ unsigned long initialSeed; int initialTableEntry; unsigned long *state; unsigned long *auxState; short stateSize; short auxSize; unsigned long lcgRecurr; short j; short k; protected: public: ACG(unsigned long seed = 0, int size = 55); virtual ^ACG(); virtual unsigned long asLong(); virtual void reset(); ; # 6 "typeck_bug.cc" 2 ------------------------------------------------------------------------------ The version built on the old version of cplus-typeck.c did not crash I used the vax/vms versions of tm.h and md --------------------------------------------------------------------------- Robert A.J.Marshall, Room 2.02, IT Building, Department of Computer Science, University of Manchester, Oxford Road, Manchester, M13 9PL, U.K. Tel: (+44) 61-275-6163 Internal: 6163 JANET: rmarshall@uk.ac.man.cs EARN: rmarshall@cs.man.ac.uk ---------------------------------------------------------------------------