new
authorJason Merrill <jason@gcc.gnu.org>
Sat, 3 Oct 1998 22:59:10 +0000 (18:59 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Sat, 3 Oct 1998 22:59:10 +0000 (18:59 -0400)
From-SVN: r22801

gcc/testsuite/g++.old-deja/g++.mike/p16146.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.ns/using9.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.other/linkage1.C [new file with mode: 0644]

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 (file)
index 0000000..2fd95e5
--- /dev/null
@@ -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 (file)
index 0000000..547ae31
--- /dev/null
@@ -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 (file)
index 0000000..65a2848
--- /dev/null
@@ -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
+}