OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.brendan/] [crash5.C] - Rev 779

Go to most recent revision | Compare with Previous | Blame | View Log

// { dg-do assemble  }
// GROUPS passed old-abort
// Should have been fixed by:
//
// Sun Jun 13 12:55:22 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)
// 
//      * cp-cvt.c (build_default_binary_type_conversion): Look deeper into
//      what ARG1 and ARG2 are if they're POINTER_TYPEs.

class CountableSet
{
        public:
                virtual ~CountableSet() { }             
};      

template<class T>
class FixedSet : virtual public CountableSet
{
        public:
                virtual int Get(int, T&) = 0;            
                virtual ~FixedSet() { }         
};

class ShrinkableSet
{
        public:
                virtual int Remove(int) = 0;   
};

template<class T>
class PVSet : virtual public FixedSet<T>, virtual public ShrinkableSet
{
        public:
                virtual void Append(const T&) = 0;
                virtual void operator+=(const T& a) { Append(a); }
                virtual ~PVSet() { }            
};

template<class T>
class MutSet : virtual public FixedSet<T>, virtual public FixedSet<T *>
{
        protected:
                typedef T       *Tp;

        public:
                void Append(const Tp& tp) { Append(*tp); }

                T&      Access(int p)
                {
                        Tp      tp;
                        Get(p, tp);
                        return *tp;
                }
                virtual ~MutSet() { }           
};

template <class T>
class   SimpleSet : virtual public MutSet<T>
{
        protected:
                T       *array;
                int     size;

                virtual void    Allocate(int s)
                {
                        array = new T[s];
                }
        public:
                SimpleSet()
                {
                        size = 0;
                        array = 0;
                }
                int     Get(int p, T& t)
                {
                        t = array[p-1];
                        return 1;
                }
                int     Get(int p, T *& t)
                {
                        t = &array[p-1];
                        return 1;
                }
                inline void Append(const T& a)
                {
                        array[size-1] = a;
                }
                inline int Remove(int n) { return 0; }
};

class   Dummy
{
        public:
                Dummy() {}
};

int
main()
{
        SimpleSet<Dummy *>              bs1;
        int     i, j;
        Dummy   foo;

        bs1+=&foo;// { dg-error "" }  no .*
}

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.