aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@gcc.gnu.org>1998-10-03 18:59:10 -0400
committerJason Merrill <jason@gcc.gnu.org>1998-10-03 18:59:10 -0400
commitd5698b07533c991d016c0c16e0fa0d87d1457565 (patch)
treefc41a33dd17f9a5a031afe0869bd25af73bbac1d /gcc
parent5eea678fdb01a450e7f4108527029ce1582ac823 (diff)
downloadgcc-d5698b07533c991d016c0c16e0fa0d87d1457565.zip
gcc-d5698b07533c991d016c0c16e0fa0d87d1457565.tar.gz
gcc-d5698b07533c991d016c0c16e0fa0d87d1457565.tar.bz2
new
From-SVN: r22801
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/p16146.C89
-rw-r--r--gcc/testsuite/g++.old-deja/g++.ns/using9.C24
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/linkage1.C14
3 files changed, 127 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p16146.C b/gcc/testsuite/g++.old-deja/g++.mike/p16146.C
new file mode 100644
index 0000000..2fd95e5
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.mike/p16146.C
@@ -0,0 +1,89 @@
+// prms-id: 16146
+
+extern "C" int printf (const char *, ...);
+
+class myFoundation {
+protected:
+ myFoundation () { count = 0; };
+ virtual ~myFoundation () {};
+
+public:
+ void addRef () { ++count; }
+ void removeRef () { if (count > 0) --count; }
+
+private:
+ long count;
+};
+
+
+class firstIntermediate :virtual public myFoundation {
+public:
+ firstIntermediate () {};
+ ~firstIntermediate () {};
+
+ void bar () { printf ("Bar\n"); }
+};
+
+
+class firstBase : public firstIntermediate {
+public:
+ firstBase () {};
+ ~firstBase () {};
+
+ virtual void g () {};
+};
+
+
+class secondIntermediate : virtual public myFoundation {
+public:
+ secondIntermediate () {};
+ ~secondIntermediate () {};
+
+ virtual void h () {};
+};
+
+
+class secondBase : public secondIntermediate {
+public:
+ secondBase () {};
+ ~secondBase () {};
+
+ virtual void h () {};
+};
+
+
+class typeInterface : virtual public firstBase {
+public:
+ typeInterface () {};
+ ~typeInterface () {};
+
+ virtual void i () {};
+};
+
+class classServices : virtual public firstBase,
+ public secondBase {
+public:
+ classServices () {};
+ ~classServices () {};
+
+ virtual void j () {};
+};
+
+class classImplementation : public typeInterface,
+ public classServices {
+public:
+ classImplementation () {};
+ ~classImplementation () {};
+
+ void g () {};
+ void h () {};
+ void i () {};
+ void j () {};
+};
+
+main () {
+ firstBase* fbp = new classImplementation;
+ classImplementation* cip = dynamic_cast <classImplementation*> (fbp);
+ cip->addRef();
+ myFoundation* mfp = cip;
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.ns/using9.C b/gcc/testsuite/g++.old-deja/g++.ns/using9.C
new file mode 100644
index 0000000..547ae31
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.ns/using9.C
@@ -0,0 +1,24 @@
+// Test for proper merging of functions from multiple using directives.
+
+// Build don't link:
+
+namespace standard
+{ void print(int) {};
+ void dump(int) {};
+}
+namespace A { using standard::print; }
+namespace B { using namespace standard; }
+namespace User
+{ using namespace standard;
+ using namespace A;
+ void test()
+ { print(1); }
+ // egcs-1.1: call of overloaded `print (int)' is ambiguous
+}
+namespace User2
+{ using namespace standard;
+ using namespace B;
+ void test()
+ { print(1); } // egcs has no problems here
+}
+
diff --git a/gcc/testsuite/g++.old-deja/g++.other/linkage1.C b/gcc/testsuite/g++.old-deja/g++.other/linkage1.C
new file mode 100644
index 0000000..65a2848
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/linkage1.C
@@ -0,0 +1,14 @@
+typedef struct {
+ int i;
+} *p;
+
+void f (p) { } // ERROR - function uses anonymous type
+p q;
+
+int main()
+{
+ extern p j;
+ struct A { int j; };
+ extern A a; // ERROR - extern uses local type
+ extern void f (A); // ERROR - extern uses local type
+}