diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-12 21:27:52 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-12 21:27:52 +0000 |
commit | 46d515ff31b3ceff039c9327b60befee2556f677 (patch) | |
tree | 6c15f2b6d3e4c004f128ecc62003eb025fe1626b | |
parent | 0741df1eca2ca856bd11be5fff30f5621acbd499 (diff) | |
download | ppe42-gcc-46d515ff31b3ceff039c9327b60befee2556f677.tar.gz ppe42-gcc-46d515ff31b3ceff039c9327b60befee2556f677.zip |
PR c++/50034
* call.c (convert_arg_to_ellipsis): force_rvalue only in
potentially evaluated context.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177722 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/call.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/defaulted28.C | 4 |
4 files changed, 15 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 47d636ef3b0..bb6d614fb3c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-08-12 Jason Merrill <jason@redhat.com> + + PR c++/50034 + * call.c (convert_arg_to_ellipsis): force_rvalue only in + potentially evaluated context. + 2011-08-12 Richard Guenther <rguenther@suse.de> * call.c (build_over_call): Instead of memcpy use an diff --git a/gcc/cp/call.c b/gcc/cp/call.c index a3b0f8a85bb..e8fb68d833a 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -6097,7 +6097,7 @@ convert_arg_to_ellipsis (tree arg) { /* Build up a real lvalue-to-rvalue conversion in case the copy constructor is trivial but not callable. */ - if (CLASS_TYPE_P (arg_type)) + if (!cp_unevaluated_operand && CLASS_TYPE_P (arg_type)) force_rvalue (arg, tf_warning_or_error); /* [expr.call] 5.2.2/7: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 38079faf771..4cede20faeb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-08-12 Jason Merrill <jason@redhat.com> + + PR c++/50034 + * g++.dg/cpp0x/defaulted28.C: Add unevaluated case. + 2011-08-12 Uros Bizjak <ubizjak@gmail.com> * gcc.dg/builtins-67.c: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted28.C b/gcc/testsuite/g++.dg/cpp0x/defaulted28.C index 15caef6cca6..bcbf763f6da 100644 --- a/gcc/testsuite/g++.dg/cpp0x/defaulted28.C +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted28.C @@ -1,4 +1,5 @@ // PR c++/49102 +// PR c++/50034 // { dg-options -std=c++0x } struct A { @@ -8,8 +9,9 @@ private: A(A const&) = default; // { dg-error "private" } }; -void f(...) { } +int f(...) { } int main() { A a; f(a); // { dg-error "this context" } + sizeof(f(a)); // OK because unevaluated } |