diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-11-20 00:50:21 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-11-20 00:50:21 +0100 |
commit | e26ab5ecd292a31bbae2108502ff532db2d6f245 (patch) | |
tree | 391ccd330aaa0f9b94dec2002f3e43cf760066f8 /gcc | |
parent | 8e97bc2bdb4013cbb62d9910083b240e0eb01941 (diff) | |
download | gcc-e26ab5ecd292a31bbae2108502ff532db2d6f245.zip gcc-e26ab5ecd292a31bbae2108502ff532db2d6f245.tar.gz gcc-e26ab5ecd292a31bbae2108502ff532db2d6f245.tar.bz2 |
re PR c++/46526 (VTable Problem?)
PR c++/46526
* semantics.c (cxx_eval_call_expression): Unshare the result.
* g++.dg/cpp0x/constexpr-base3.C: New test.
From-SVN: r166967
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-base3.C | 27 |
4 files changed, 36 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b192ed1..e3d97d2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-11-20 Jakub Jelinek <jakub@redhat.com> + + PR c++/46526 + * semantics.c (cxx_eval_call_expression): Unshare the result. + 2010-11-19 Nicola Pero <nicola.pero@meta-innovation.com> * parser.c (cp_parser_objc_protocol_declaration): Pass attributes diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 38e03f6..9b565da 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -6042,7 +6042,7 @@ cxx_eval_call_expression (const constexpr_call *old_call, tree t, } pop_cx_call_context (); - return result; + return unshare_expr (result); } /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 38a694cf..1a54308 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2010-11-20 Jakub Jelinek <jakub@redhat.com> + PR c++/46526 + * g++.dg/cpp0x/constexpr-base3.C: New test. + PR tree-optimization/45830 * gcc.target/i386/pr45830.c: New test. * gcc.c-torture/execute/pr45830.c: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-base3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-base3.C new file mode 100644 index 0000000..cffe9ea --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-base3.C @@ -0,0 +1,27 @@ +// PR c++/46526 +// { dg-do run } +// { dg-options "-std=c++0x" } + +struct Base +{ + virtual int getid () = 0; +}; + +struct A : public Base +{ + virtual int getid () { return 1; } +}; + +struct B : public Base +{ + virtual int getid () { throw "here"; } +}; + +int +main () +{ + A a; + B b; + Base& ar = a; + ar.getid (); +} |