[gnu.g++.bug] g++ 1.36.1- eats all available memory on SPARC

tom@tnosoes.UUCP (Tom Vijlbrief) (11/30/89)

The following program eats all available memory in my sparc:
=========================================
#include <stdarg.h>


#define BIT(x) (x)

enum eVObjAlign {
    eVObjHLeft  = BIT(0),
    eVObjHCenter= BIT(1),
    eVObjHRight = BIT(2),
    eVObjHExpand= BIT(3),
    eVObjH      = eVObjHLeft|eVObjHCenter|eVObjHRight|eVObjHExpand, 
    eVObjVTop   = BIT(8),
    eVObjVBase  = BIT(9),
    eVObjVCenter= BIT(10),
    eVObjVBottom= BIT(11), 
    eVObjVExpand= BIT(12), 
    eVObjV      = eVObjVTop|eVObjVBase|eVObjVCenter|eVObjVBottom|eVObjVExpand 
};

class VObjAlign {
  eVObjAlign f;
public:
  VObjAlign() {}
  VObjAlign(int i) { f= eVObjAlign(i); }
  operator int() { return f; }
};

typedef int Collection, VObject;

class Point {
public:
	short a,b;
	Point(int x) {a=b=x;};
};

Point gPoint0(3);

class OneOfCluster: public Point {
public:
	OneOfCluster(int id= 1, VObjAlign a= 1, Point g= gPoint0, Collection *cp= 0);
	OneOfCluster(int id, VObjAlign a, Point g, VObject*, ...);
	OneOfCluster(int id, VObjAlign a, Point g, char*, ...);
};

OneOfCluster::OneOfCluster(int id, VObjAlign a, Point g, VObject*, ...): (id)
{
    va_list ap;
    va_start(ap, g);
    SetItems(ap);
    Init(0);
    va_end(ap);
}

OneOfCluster::OneOfCluster(int id, VObjAlign a, Point g, char*, ...): (id)
{
    char *t;
    va_list ap;
    va_start(ap, g);
    Init(0);
    va_end(ap);
}
===========================

tom@lightning:~/src/CC> g++ -v -c vararg.cc
gcc version 1.36.1- (based on GCC 1.36)
 /usr/local/lib/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ vararg.cc /usr/tmp/cca00190.cpp
GNU CPP version 1.36
 /usr/local/lib/gcc-cc1plus /usr/tmp/cca00190.cpp -quiet -dumpbase vararg.cc -version -o /usr/tmp/cca00190.s
GNU C++ version 1.36.1- (based on GCC 1.36) (sparc) compiled by GNU C version 1.36.
default target switches: -mfpu -mepilogue
^Ctom@lightning:~/src/CC> 
================================

The problem is caused by the VObjAlign class in the variable argument list,
replacing it by an int works.

Tom

===============================================================================
Tom Vijlbrief
TNO Institute for Perception
P.O. Box 23				Phone: +31 34 63 562 11
3769 ZG  Soesterberg			E-mail: tnosoes!tom@mcvax.cwi.nl
The Netherlands				    or:	uunet!mcvax!tnosoes!tom
===============================================================================