diff options
author | Dodji Seketeli <dseketel@redhat.com> | 2008-07-18 20:40:42 +0000 |
---|---|---|
committer | Dodji Seketeli <dodji@gcc.gnu.org> | 2008-07-18 22:40:42 +0200 |
commit | 6b3a665caf8ddc83110639630d7feb021d58ed63 (patch) | |
tree | 209be48652f4bb8abd049d6f3e195676e874af76 /gcc | |
parent | c466b2cd136139e0e9fef6019fa6f136e23c7a4c (diff) | |
download | gcc-6b3a665caf8ddc83110639630d7feb021d58ed63.zip gcc-6b3a665caf8ddc83110639630d7feb021d58ed63.tar.gz gcc-6b3a665caf8ddc83110639630d7feb021d58ed63.tar.bz2 |
re PR c++/36407 (ICE with conversion and -fpermissive)
2008-07-18 Dodji Seketeli <dseketel@redhat.com>
PR c++/36407
* call.c (convert_like_real): Don't take the error code path
when a rvalue or base conversion has the bad_p field set.
From-SVN: r137966
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/call.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/conversion/op5.C | 20 |
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6daff1e..2112b8f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-07-18 Dodji Seketeli <dseketel@redhat.com> + + PR c++/36407 + * call.c (convert_like_real): Don't take the error code path + when a rvalue or base conversion has the bad_p field set. + 2008-07-18 Kris Van Hees <kris.van.hees@oracle.com> * rtti.c (emit_support_tinfos): Add char16_type_node and diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 368d95a..3c54001 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4510,7 +4510,9 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, if (convs->bad_p && convs->kind != ck_user && convs->kind != ck_ambig - && convs->kind != ck_ref_bind) + && convs->kind != ck_ref_bind + && convs->kind != ck_rvalue + && convs->kind != ck_base) { conversion *t = convs; for (; t; t = convs->u.next) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 79793fd..38e498c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-07-18 Dodji Seketeli <dseketel@redhat.com> + + PR c++/36407 + * g++.dg/conversion/op5.C: New testcase. + 2008-07-18 Kris Van Hees <kris.van.hees@oracle.com> Tests for char16_t and char32_t support. diff --git a/gcc/testsuite/g++.dg/conversion/op5.C b/gcc/testsuite/g++.dg/conversion/op5.C new file mode 100644 index 0000000..69ef996 --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/op5.C @@ -0,0 +1,20 @@ +// Contributed by Dodji Seketeli <dseketel@redhat.com> +// Origin: PR c++/36407 +// { dg-do compile } + +struct A +{ + A (const A&); +}; + +struct B +{ + operator A&(); +}; + +void +foo (const B& b) +{ + const A a = b; // { dg-error "conversion from 'const B' to non-scalar type 'const A' requested" } +} + |