new
authorJason Merrill <jason@gcc.gnu.org>
Sun, 31 May 1998 23:57:47 +0000 (19:57 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Sun, 31 May 1998 23:57:47 +0000 (19:57 -0400)
From-SVN: r20159

gcc/testsuite/g++.old-deja/g++.pt/mi1.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/vbase1.C [new file with mode: 0644]

diff --git a/gcc/testsuite/g++.old-deja/g++.pt/mi1.C b/gcc/testsuite/g++.old-deja/g++.pt/mi1.C
new file mode 100644 (file)
index 0000000..8282261
--- /dev/null
@@ -0,0 +1,75 @@
+// Test that binfos aren't erroneously shared between instantiations.
+
+class PK_CryptoSystem
+{
+};
+class PK_Encryptor : public virtual PK_CryptoSystem
+{
+};
+class PK_FixedLengthCryptoSystem : public virtual PK_CryptoSystem
+{
+public:
+       virtual unsigned int CipherTextLength() const =0;
+};
+class PK_FixedLengthEncryptor : public virtual PK_Encryptor, public virtual PK_FixedLengthCryptoSystem
+{
+};
+class PK_SignatureSystem
+{
+public:
+       virtual ~PK_SignatureSystem() {};
+};
+class PK_Signer : public virtual PK_SignatureSystem
+{
+public:
+       virtual void Sign() = 0;
+};
+class PK_Verifier : public virtual PK_SignatureSystem
+{
+};
+class PK_Precomputation
+{
+};
+template <class T> class
+PK_WithPrecomputation : public T, public virtual PK_Precomputation
+{
+};
+typedef PK_WithPrecomputation<PK_FixedLengthEncryptor> PKWPFLE;
+typedef PK_WithPrecomputation<PK_Signer> PKWPS;
+template <class EC> class
+ECPublicKey : public PKWPFLE
+{
+public:
+       unsigned int CipherTextLength() const { return 1; }
+       EC ec;
+};
+template <class EC>
+class ECPrivateKey : public ECPublicKey<EC>, public PKWPS
+{
+       void Sign() {}
+       int d;
+};
+template <class EC>
+class ECKEP : public ECPrivateKey<EC>
+{
+};
+class GF2NT : public PK_CryptoSystem
+{
+       int t1;
+};
+class EC2N : public PK_CryptoSystem
+{
+       GF2NT field;
+       int a;
+};
+template class ECKEP<EC2N>;
+template class ECKEP<int>;
+
+int
+main ()
+{
+  ECKEP<EC2N> foo;
+
+  return 0;
+}
+
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/vbase1.C b/gcc/testsuite/g++.old-deja/g++.pt/vbase1.C
new file mode 100644 (file)
index 0000000..58d26fc
--- /dev/null
@@ -0,0 +1,31 @@
+// Check that template classes handle inherited virtual bases
+// properly, initializing them before direct non-virtual bases.
+
+int aflag;
+
+struct A
+{
+  A() { aflag = 1; }
+};
+
+struct B : virtual public A 
+{
+  B() { }
+};
+
+struct C
+{
+  C() { if (!aflag) exit (1); }
+};
+
+template<class Parent>
+struct D : public C, public Parent
+{
+  D() { }
+};
+
+int
+main ()
+{
+  D<B> c;
+}