diff options
author | Alexandre Oliva <oliva@dcc.unicamp.br> | 1999-08-25 13:03:00 +0000 |
---|---|---|
committer | Alexandre Oliva <oliva@gcc.gnu.org> | 1999-08-25 13:03:00 +0000 |
commit | 355298fb26e41f9a8b362e430c1a4ee8cde94397 (patch) | |
tree | b805a3861fabf64316c2290975d68498fa188b1e | |
parent | f4c6443e4d075b72c3fbe4d0c0caa2bf0abf5700 (diff) | |
download | gcc-355298fb26e41f9a8b362e430c1a4ee8cde94397.zip gcc-355298fb26e41f9a8b362e430c1a4ee8cde94397.tar.gz gcc-355298fb26e41f9a8b362e430c1a4ee8cde94397.tar.bz2 |
* thunk1.C: New test.
From-SVN: r28858
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.oliva/thunk1.C | 38 |
2 files changed, 42 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog b/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog index 9ec7d6f..5a5ab8a 100644 --- a/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog +++ b/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog @@ -1,3 +1,7 @@ +1999-08-25 Alexandre Oliva <oliva@dcc.unicamp.br> + + * thunk1.C: New test. + 1999-08-06 Alexandre Oliva <oliva@dcc.unicamp.br> * dwarf2.C, dwarf3.C: Added XFAIL for Solaris/x86. Removed diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/thunk1.C b/gcc/testsuite/g++.old-deja/g++.oliva/thunk1.C new file mode 100644 index 0000000..5407e9e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/thunk1.C @@ -0,0 +1,38 @@ +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva <oliva@dcc.unicamp.br> +// based on bug report by Fredrik Öhrström <d92-foh@nada.kth.se> + +// Special g++ Options: -fvtable-thunks +// execution test - XFAIL *-*-* + +#include <cstdlib> + +using namespace std; + +struct vbase { + virtual int get_a() const = 0; +}; + +struct base: virtual vbase { + int a; + base(int aa) : a(aa) {} + int get_a() const { return a; } +}; + +struct mid: base { + mid(int bb) : base(bb) { + // when mid is not in charge of vbase initialization, + // a derived-aware vtable is needed for vbase + if (((vbase*)this)->get_a() != bb) + abort(); + } +}; + +struct derived: virtual mid { + derived(int cc) : mid(cc) {} +}; + +int main () { + derived(1); +} |