aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-01-14 15:21:58 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-01-14 15:21:58 -0500
commit2d1a618e84eaf3e747a1cf5bd6f936c91edc8374 (patch)
treefc65105ef58b1f6e3a0e6ed5b7438180d446d779 /gcc
parent5f3e3df666b68d61cdce483f8cf2efd3324cdc47 (diff)
downloadgcc-2d1a618e84eaf3e747a1cf5bd6f936c91edc8374.zip
gcc-2d1a618e84eaf3e747a1cf5bd6f936c91edc8374.tar.gz
gcc-2d1a618e84eaf3e747a1cf5bd6f936c91edc8374.tar.bz2
re PR c++/42655 (! causes the qualified types for rvalue)
PR c++/42655 * call.c (convert_like_real): Do full decay_conversion for ck_rvalue. From-SVN: r155913
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/overload/rvalue1.C10
4 files changed, 21 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 11fa60d..1374a5b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/42655
+ * call.c (convert_like_real): Do full decay_conversion for ck_rvalue.
+
2010-01-13 Dodji Seketeli <dodji@redhat.com>
PR c++/42634
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 02fc4b3..935aea8 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -5013,7 +5013,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
switch (convs->kind)
{
case ck_rvalue:
- expr = convert_bitfield_to_declared_type (expr);
+ expr = decay_conversion (expr);
if (! MAYBE_CLASS_TYPE_P (totype))
return expr;
/* Else fall through. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cfebc86..7c747c3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/42655
+ * g++.dg/overload/rvalue1.C: New.
+
2010-01-14 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/42706
diff --git a/gcc/testsuite/g++.dg/overload/rvalue1.C b/gcc/testsuite/g++.dg/overload/rvalue1.C
new file mode 100644
index 0000000..4180594
--- /dev/null
+++ b/gcc/testsuite/g++.dg/overload/rvalue1.C
@@ -0,0 +1,10 @@
+// PR c++/42655
+
+void unused(const bool &) { }
+
+int main() {
+ volatile bool x = false;
+ unused(!!x); // type of "!x" is bool
+ unused(!x); // type of "!x" is bool
+}
+