aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@gcc.gnu.org>1998-05-31 19:57:47 -0400
committerJason Merrill <jason@gcc.gnu.org>1998-05-31 19:57:47 -0400
commit299e66e590a0f4069983318c33e4ff244b1ba2ff (patch)
tree074f07ed286005380c06bcea016bf7d75c2d04ae /gcc
parent1ceaad38dfebb9dac622f304cb76acc3cac96247 (diff)
downloadgcc-299e66e590a0f4069983318c33e4ff244b1ba2ff.zip
gcc-299e66e590a0f4069983318c33e4ff244b1ba2ff.tar.gz
gcc-299e66e590a0f4069983318c33e4ff244b1ba2ff.tar.bz2
new
From-SVN: r20159
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/mi1.C75
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/vbase1.C31
2 files changed, 106 insertions, 0 deletions
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
index 0000000..8282261
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/mi1.C
@@ -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
index 0000000..58d26fc
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/vbase1.C
@@ -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;
+}