Index: gdb/testsuite/gdb.cp/derivation.cc |
diff --git a/gdb/testsuite/gdb.cp/derivation.cc b/gdb/testsuite/gdb.cp/derivation.cc |
index 942fcd26b65206f8e3a364965073e42ea0475168..fbd75cc1ea8ccafb8d27eb1e0b59c72290cc2b14 100644 |
--- a/gdb/testsuite/gdb.cp/derivation.cc |
+++ b/gdb/testsuite/gdb.cp/derivation.cc |
@@ -1,32 +1,64 @@ |
+/* This testcase is part of GDB, the GNU debugger. |
+ |
+ Copyright 2003-2013 Free Software Foundation, Inc. |
+ |
+ This program is free software; you can redistribute it and/or modify |
+ it under the terms of the GNU General Public License as published by |
+ the Free Software Foundation; either version 3 of the License, or |
+ (at your option) any later version. |
+ |
+ This program is distributed in the hope that it will be useful, |
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ GNU General Public License for more details. |
+ |
+ You should have received a copy of the GNU General Public License |
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
+ |
+extern void foo2 (); /* from derivation2.cc */ |
+ |
+namespace N { |
+ typedef double value_type; |
+ struct Base { typedef int value_type; }; |
+ struct Derived : public Base { |
+ void doit (void) const { |
+ int i = 3; |
+ |
+ while (i > 0) |
+ --i; |
+ } |
+ }; |
+} |
+ |
class A { |
public: |
- int a; |
- int aa; |
+ typedef int value_type; |
+ value_type a; |
+ value_type aa; |
A() |
{ |
a=1; |
aa=2; |
} |
- int afoo(); |
- int foo(); |
- |
+ value_type afoo(); |
+ value_type foo(); |
}; |
class B { |
public: |
- int b; |
- int bb; |
+ A::value_type b; |
+ A::value_type bb; |
B() |
{ |
b=3; |
bb=4; |
} |
- int bfoo(); |
- int foo(); |
+ A::value_type bfoo(); |
+ A::value_type foo(); |
}; |
@@ -51,48 +83,48 @@ public: |
class D : private A, public B, protected C { |
public: |
- int d; |
- int dd; |
+ value_type d; |
+ value_type dd; |
D() |
{ |
d =7; |
dd=8; |
} |
- int dfoo(); |
- int foo(); |
+ value_type dfoo(); |
+ value_type foo(); |
}; |
class E : public A, B, protected C { |
public: |
- int e; |
- int ee; |
+ value_type e; |
+ value_type ee; |
E() |
{ |
e =9; |
ee=10; |
} |
- int efoo(); |
- int foo(); |
+ value_type efoo(); |
+ value_type foo(); |
}; |
class F : A, public B, C { |
public: |
- int f; |
- int ff; |
+ value_type f; |
+ value_type ff; |
F() |
{ |
f =11; |
ff=12; |
} |
- int ffoo(); |
- int foo(); |
+ value_type ffoo(); |
+ value_type foo(); |
}; |
@@ -118,30 +150,72 @@ public: |
}; |
+class Z : public A |
+{ |
+public: |
+ typedef float value_type; |
+ value_type z; |
+}; |
+ |
+class ZZ : public Z |
+{ |
+public: |
+ value_type zz; |
+}; |
+ |
+class V_base |
+{ |
+public: |
+ virtual void m(); |
+ int base; |
+}; |
+void |
+V_base::m() |
+{ |
+} |
+class V_inter : public virtual V_base |
+{ |
+public: |
+ virtual void f(); |
+ int inter; |
+}; |
+ |
+void |
+V_inter::f() |
+{ |
+} |
-int A::afoo() { |
+class V_derived : public V_inter |
+{ |
+public: |
+ double x; |
+}; |
+ |
+V_derived vderived; |
+ |
+A::value_type A::afoo() { |
return 1; |
} |
-int B::bfoo() { |
+A::value_type B::bfoo() { |
return 2; |
} |
-int C::cfoo() { |
+A::value_type C::cfoo() { |
return 3; |
} |
-int D::dfoo() { |
+D::value_type D::dfoo() { |
return 4; |
} |
-int E::efoo() { |
+E::value_type E::efoo() { |
return 5; |
} |
-int F::ffoo() { |
+F::value_type F::ffoo() { |
return 6; |
} |
@@ -149,37 +223,37 @@ int G::gfoo() { |
return 77; |
} |
-int A::foo() |
+A::value_type A::foo() |
{ |
return 7; |
} |
-int B::foo() |
+A::value_type B::foo() |
{ |
return 8; |
} |
-int C::foo() |
+A::value_type C::foo() |
{ |
return 9; |
} |
-int D::foo() |
+D::value_type D::foo() |
{ |
return 10; |
} |
-int E::foo() |
+E::value_type E::foo() |
{ |
return 11; |
} |
-int F::foo() |
+F::value_type F::foo() |
{ |
return 12; |
@@ -207,7 +281,9 @@ int main(void) |
E e_instance; |
F f_instance; |
G g_instance; |
- |
+ Z z_instance; |
+ ZZ zz_instance; |
+ |
marker1(); // marker1-returns-here |
a_instance.a = 20; // marker1-returns-here |
@@ -222,13 +298,16 @@ int main(void) |
e_instance.ee =29; |
f_instance.f =30; |
f_instance.ff =31; |
- |
- |
- |
- |
+ g_instance.g = 32; |
+ g_instance.gg = 33; |
+ z_instance.z = 34.0; |
+ zz_instance.zz = 35.0; |
+ |
+ N::Derived dobj; |
+ N::Derived::value_type d = 1; |
+ N::value_type n = 3.0; |
+ dobj.doit (); |
+ foo2 (); |
return 0; |
} |
- |
- |
- |