aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.brendan/crash5.C')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.brendan/crash5.C106
1 files changed, 106 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C
new file mode 100644
index 00000000000..d884189f6b8
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C
@@ -0,0 +1,106 @@
+// Build don't link:
+// 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.
+
+volatile void exit(int);
+
+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 = ((void*)0) ; // ERROR - implicit conversion
+ }
+ 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() {}
+};
+
+main()
+{
+ SimpleSet<Dummy *> bs1;
+ int i, j;
+ Dummy foo;
+
+ bs1+=&foo;// ERROR - no .*
+}