diff options
author | Jason Merrill <jason@redhat.com> | 2010-06-15 16:10:29 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-06-15 16:10:29 -0400 |
commit | e14eaea4d4c3ce010cb58b428681e7d6723021a2 (patch) | |
tree | 17b3c4657f6d525af0a041d9852b2681b5d6d13e /gcc | |
parent | 5c77749e30496db4cb726ead698210a486d95b79 (diff) | |
download | gcc-e14eaea4d4c3ce010cb58b428681e7d6723021a2.zip gcc-e14eaea4d4c3ce010cb58b428681e7d6723021a2.tar.gz gcc-e14eaea4d4c3ce010cb58b428681e7d6723021a2.tar.bz2 |
call.c (print_z_candidates): Do print viable deleted candidates.
* call.c (print_z_candidates): Do print viable deleted candidates.
(joust): Don't choose a deleted function just because its worst
conversion is better than another candidate's worst.
From-SVN: r160808
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/call.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/defaulted18.C | 9 |
4 files changed, 20 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c82db7e..d98eaae 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2010-06-15 Jason Merrill <jason@redhat.com> + * call.c (print_z_candidates): Do print viable deleted candidates. + (joust): Don't choose a deleted function just because its worst + conversion is better than another candidate's worst. + * call.c (convert_like_real): Don't complain about list-value-initialization from an explicit constructor. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 60d7333..a735dc6 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -2747,11 +2747,12 @@ print_z_candidates (struct z_candidate *candidates) if (!candidates) return; - /* Remove deleted candidates. */ + /* Remove non-viable deleted candidates. */ cand1 = candidates; for (cand2 = &cand1; *cand2; ) { if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL + && !(*cand2)->viable && DECL_DELETED_FN ((*cand2)->fn)) *cand2 = (*cand2)->next; else @@ -7407,6 +7408,9 @@ tweak: winner = -1, w = cand2, l = cand1; if (winner) { + /* Don't choose a deleted function over ambiguity. */ + if (DECL_P (w->fn) && DECL_DELETED_FN (w->fn)) + return 0; if (warn) { pedwarn (input_location, 0, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e6ce32a..8ca6527 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2010-06-15 Jason Merrill <jason@redhat.com> + * g++.dg/cpp0x/defaulted18.C: New. + * g++.dg/cpp0x/initlist40.C: New. * g++.dg/cpp0x/initlist39.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted18.C b/gcc/testsuite/g++.dg/cpp0x/defaulted18.C new file mode 100644 index 0000000..ae055e3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted18.C @@ -0,0 +1,9 @@ +// { dg-options "-std=c++0x" } + +void f(char i, int j) = delete; // { dg-message "<deleted>" } +void f(int i, ...); // { dg-message "void f" } + +int main() +{ + f(1,1); // { dg-error "ambiguous" } +} |