[gnu.g++.bug] g++ 1.34.1 bug

whitcomb@EROS.BERKELEY.EDU (Gregg Whitcomb) (03/29/89)

version: 1.34.1

example:
#include "stream.h"

class c;
class xx;
class b
   {
   int y;
   int x;
   b(int j, int i = 9) {y = j; x = i;}
   void print() {cout << x << "\n";}
   friend xx;
   };

class c : public b
   {
   c(int i = 1) : (5,i) {}
   void print() { b::print(); }
   friend void m();
   };


void m()
{
   c a;
   a.print();
   c* e;
   e = new c();
   e->print();

}


main()
{
   m();
}


% g++ -g testinit.cc
% a.out
0
0

-------------------

if class b was a friend of class c, this program works correctly.
As is, an error or warning should be generated but is not.

coleman@bert.dg.com (Kim Coleman) (04/04/89)

//  Bug with function call parameters in g++ 1.34.1
//
//  Declaring a class method with a function call default parameter seems to
//  cause subsequent confusion when compiling the completion of the method.
//  In the program below, the compiler will hang if there are errors in the
//  body of annoying::problem. I've hung it with syntax errors, semantic
//  errors, and warnings (in particular, assignment of a constant pointer to
//  a non-constant pointer). Related error messages are not printed out.
//  Only a default parameter value that is a function call seems to provoke
//  this behavior. As long as you write perfect programs, all is well! :-)
//
//  Older revs of the compiler (pre-1.34) hung up whether or not there were
//  errors (or even statements) in the function body.
//

int foo();

class annoying
{
  public:
     void  problem( int  position = foo() );
};


void annoying::problem( int position )
{
   int i;
   i = unknown;                // will cause compiler to hang

   i=;                         // so will this

   int* p;
   const int* cp;
   p = cp;                     // and this
}

----------------------
Kim Coleman
Data General Corp., Research Triangle Park, NC
{the world}!mcnc!rti!dg-rtp!coleman