aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-03-18 11:07:04 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-03-18 11:07:04 -0400
commite6baef836f11dd7273c258a41cbfc44f462e3828 (patch)
tree22180fc51591043f48d923f17662442d4ae7437c
parentb4ef8aac30e7c17756d6a1ad8cbd6c914e960bb4 (diff)
downloadgcc-e6baef836f11dd7273c258a41cbfc44f462e3828.zip
gcc-e6baef836f11dd7273c258a41cbfc44f462e3828.tar.gz
gcc-e6baef836f11dd7273c258a41cbfc44f462e3828.tar.bz2
re PR c++/48118 (g++ sometimes allows copying a volatile class)
PR c++/48118 * call.c (build_over_call): Don't skip ck_rvalue. From-SVN: r171147
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/call.c6
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/overload/volatile1.C14
4 files changed, 21 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 51535f5..9578f1a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-18 Jason Merrill <jason@redhat.com>
+
+ PR c++/48118
+ * call.c (build_over_call): Don't skip ck_rvalue.
+
2011-03-17 Jason Merrill <jason@redhat.com>
PR c++/47504
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index d040ec8..93383c6 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -6168,12 +6168,6 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
conv = convs[i];
- /* Don't make a copy here if build_call is going to. */
- if (conv->kind == ck_rvalue
- && COMPLETE_TYPE_P (complete_type (type))
- && !TREE_ADDRESSABLE (type))
- conv = conv->u.next;
-
/* Warn about initializer_list deduction that isn't currently in the
working draft. */
if (cxx_dialect > cxx98
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b9c7dd8..b0f4f53 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,7 @@
2011-03-18 Jason Merrill <jason@redhat.com>
+ * g++.dg/overload/volatile1.C: New.
+
* g++.dg/opt/pr23372.C: New.
* g++.dg/ext/attrib32.C: Expect errors on the two-names case.
diff --git a/gcc/testsuite/g++.dg/overload/volatile1.C b/gcc/testsuite/g++.dg/overload/volatile1.C
new file mode 100644
index 0000000..baf467d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/overload/volatile1.C
@@ -0,0 +1,14 @@
+// PR c++/48118
+// { dg-prune-output "note" }
+
+struct A { };
+
+void f (A); // { dg-error "argument 1" }
+void (*g)(A);
+
+int main()
+{
+ volatile A a;
+ f(a); // { dg-error "no match" }
+ g(a); // { dg-error "no match" }
+}