From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom.Lake@glossa.co.uk (Tom.Lake) To: egcs-bugs@cygnus.com Subject: Bug Report Date: Mon, 25 Jan 1999 06:49:00 -0000 Message-id: <199901251303.NAA07338@glossa.co.uk> X-SW-Source: 1999-01/msg00684.html List-Id: The following self-contained c++ file give compiler error 980715 under release egcs-1.1.1 on ultrasparc solaris 2.6 Cheers, Tom Lake ------------------------------------------------------------------------------- Language, concurrency, software engineering | InterGlossa Ltd Email: Tom.Lake@glossa.co.uk | 31A, Chain Street Tel: +44 118 956 1919 Fax: +44 118 956 1920 | Reading RG1 2HX Web Home Pages: http://www.glossa.co.uk | UK ------------------------------------------------------------------------------- #include #include #define SEQTYPE 9 int fail(string x){} template class Pred{ public: virtual int Test(Type)=0; }; template class Pair #ifdef GCENABLED : public gc #endif { public: X first; Y second; Pair() {}; Pair(X a, Y b) { first = a; second = b; }; }; template inline Pair fetch(Pair p) { return p;} //template //inline Pair& fetch(Pair& p) { return p;} template inline Pair fetch(Pair *p) { return *p;} template inline int operator==(const Pair& q1, const Pair& q2) {return (fetch(q1.first) == fetch(q2.first) && fetch(q1.second) == fetch(q2.second)); } template class Sequence { public: virtual Sequence* AddFront(Type v)=0; virtual Sequence* AddRear(Type v)=0; virtual Sequence* Concatenate(Sequence* s)=0; virtual Sequence* Reverse()=0; virtual Sequence* SeqFilter(Pred*)=0; virtual Type* Head()=0; virtual Type* Last()=0; virtual Sequence* Tail()=0; virtual Sequence* Front()=0; virtual Type* Extract(int i)=0; virtual int Length()=0; virtual int Empty()=0; virtual void Fold2(void (*)(Type,void*), void*)=0; virtual int operator==(const Sequence &)=0; virtual int GetType()=0; }; template void Fold(Sequence* s, void (*f)(A,B*), B* b) { s->Fold2( (void (*)(A,void*))f, (void*) b);} template class ListNode #ifdef GCENABLED : public gc #endif { public: ListNode(){}; ListNode* next; ListNode(Type t, ListNode* n){data = t; next = n;} Type data; }; template class Seq : public Sequence #ifdef GCENABLED , public gc #endif { public: /* DESTRUCTIVE METHODS */ void Append(Type v); void Cons(Type v); /* FUNCTIONAL METHODS */ ListNode *first; ListNode *last; Seq(){first = (ListNode*)NULL; last = (ListNode*)NULL;} Seq(ListNode* f, ListNode* l){first = f; last = l;} //Seq(const Seq& s) {first = s.first; last = s.last}; virtual Sequence* AddFront(Type v); virtual Sequence* AddRear(Type v); virtual Sequence* Concatenate(Sequence* s); virtual Sequence* Reverse(); virtual Sequence* SeqFilter(Pred*); virtual Type* Head(){return (first != (ListNode*)NULL)?&(first->data) : (fail("Head of empty list"),(Type*)NULL); } virtual Type* Last(){return (last != (ListNode*)NULL)?&(last->data): (fail("Last of empty list"),(Type*)NULL); } virtual Sequence* Tail(); virtual Sequence* Front(); virtual Type* Extract(int i); virtual int Length(); virtual int Empty(); virtual void Fold2(void (*)(Type,void*), void*); void consistency_check() { #ifdef AFA_DEBUG /* should fail if list not consistent */ ListNode *cursor = first; if (first) while (cursor != last) cursor = cursor->next; else if (last) cursor = first->next; #endif } int operator==(const Sequence &); Seq(Type t) {first=(ListNode*)NULL; last=(ListNode*)NULL;Append(t); }; virtual int GetType(){return SEQTYPE;} }; template void equal_aux(Type t, Pair* >* p) { if(p->first == 0) return; if(p->second == (ListNode*)NULL || !(fetch(t) == fetch(p->second->data)) ) p->first = 0; else p->second = p->second->next; } template int Seq::operator==(const Sequence &s) { Pair* > p(1, first); Fold((Sequence*)&s, /*(void (Type, Pair* >*))*/(equal_aux ), &p); return (p.first && p.second == (ListNode*)NULL); } typedef int PAAligned_Shape; class PASize : public Seq{ public: PASize(){first=(ListNode *)NULL; last= (ListNode*)NULL;} /* Should not be needed */ PASize(PAAligned_Shape as){first=(ListNode*)NULL; last=(ListNode*)NULL; Append(as); } int operator==(const PASize & s1) {return ((Seq&)*this) == ((Seq&)s1); } }; inline PASize fetch(PASize s){return s;} PASize a,b; int main(void){ return a==b; } /* T H E E N D */