diff options
author | Mark Mitchell <mark@codesourcery.com> | 1999-05-24 23:38:55 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-05-24 23:38:55 +0000 |
commit | 5e65d3ee9ada6d20eff5a09d6c2a8af695887913 (patch) | |
tree | b45a659b2b3d0176195cb9e011fdbd9983c9c5cc | |
parent | 590e30e761c43b00bcfb75d853947a65e1823c62 (diff) | |
download | gcc-5e65d3ee9ada6d20eff5a09d6c2a8af695887913.zip gcc-5e65d3ee9ada6d20eff5a09d6c2a8af695887913.tar.gz gcc-5e65d3ee9ada6d20eff5a09d6c2a8af695887913.tar.bz2 |
decl2.c (mark_vtable_entries): Don't make a copy of a function, and then make it look like `abort'.
* decl2.c (mark_vtable_entries): Don't make a copy of a function,
and then make it look like `abort'. Just use `abort' instead.
From-SVN: r27131
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/virtual2.C | 21 |
3 files changed, 25 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 250f063..835402f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 1999-05-24 Mark Mitchell <mark@codesourcery.com> + * decl2.c (mark_vtable_entries): Don't make a copy of a function, + and then make it look like `abort'. Just use `abort' instead. + * typeck.c (build_static_cast): Don't allow static_casts that cast away constness. (casts_away_constness_r): New function. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 9427c2c..793a974 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2424,8 +2424,7 @@ mark_vtable_entries (decl) TREE_ADDRESSABLE (fn) = 1; if (DECL_LANG_SPECIFIC (fn) && DECL_ABSTRACT_VIRTUAL_P (fn)) { - TREE_OPERAND (fnaddr, 0) = fn = copy_node (fn); - DECL_RTL (fn) = DECL_RTL (abort_fndecl); + TREE_OPERAND (fnaddr, 0) = abort_fndecl; mark_used (abort_fndecl); } if (TREE_CODE (fn) == THUNK_DECL && DECL_EXTERNAL (fn)) diff --git a/gcc/testsuite/g++.old-deja/g++.pt/virtual2.C b/gcc/testsuite/g++.old-deja/g++.pt/virtual2.C new file mode 100644 index 0000000..052b049 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/virtual2.C @@ -0,0 +1,21 @@ +// Build don't link: +// Origin: Mark Mitchell <mark@codesourcery.com> + +template <class T> +struct B +{ + virtual void f() = 0; +}; + +template <class T> +struct D : public B<T> { + virtual void f(); +}; + +void g() { + B<int>* bi = new D<int>; +}; + +template <class T> +void B<T>::f() {} + |