| 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;
|
|
|
| }
|
| -
|
| -
|
| -
|
|
|