diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2019-05-11 07:50:22 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2019-05-11 07:50:22 +0000 |
commit | a46695c1cd0c5ddbb90148538b06005a132b759a (patch) | |
tree | aaa218139488d57cd4e59b29b6ed4db5d4a8b143 /gcc | |
parent | c130ab6aad57e0309ec02f58f383aece584ac8cb (diff) | |
download | gcc-a46695c1cd0c5ddbb90148538b06005a132b759a.zip gcc-a46695c1cd0c5ddbb90148538b06005a132b759a.tar.gz gcc-a46695c1cd0c5ddbb90148538b06005a132b759a.tar.bz2 |
typeck.c (cp_build_function_call_vec): When mark_used fails unconditionally return error_mark_node.
/cp
2019-05-11 Paolo Carlini <paolo.carlini@oracle.com>
* typeck.c (cp_build_function_call_vec): When mark_used fails
unconditionally return error_mark_node.
/testsuite
2019-05-11 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/cpp2a/multiple-deleted-destroying-delete-error-1.C: New.
* g++.dg/cpp2a/multiple-deleted-destroying-delete-error-2.C: Likewise.
From-SVN: r271091
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-1.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-2.C | 12 |
5 files changed, 35 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 33614ef..3da2493 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2019-05-11 Paolo Carlini <paolo.carlini@oracle.com> + + * typeck.c (cp_build_function_call_vec): When mark_used fails + unconditionally return error_mark_node. + 2019-05-10 Paolo Carlini <paolo.carlini@oracle.com> * decl.c (grokvardecl): Use an accurate location in error message diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index fff45cc..d1f965b 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -3836,7 +3836,7 @@ cp_build_function_call_vec (tree function, vec<tree, va_gc> **params, return error_mark_node; } - if (!mark_used (function, complain) && !(complain & tf_error)) + if (!mark_used (function, complain)) return error_mark_node; fndecl = function; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5a57940..2efe608 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-05-11 Paolo Carlini <paolo.carlini@oracle.com> + + * g++.dg/cpp2a/multiple-deleted-destroying-delete-error-1.C: New. + * g++.dg/cpp2a/multiple-deleted-destroying-delete-error-2.C: Likewise. + 2019-05-10 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/61968 diff --git a/gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-1.C b/gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-1.C new file mode 100644 index 0000000..01e4142 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-1.C @@ -0,0 +1,12 @@ +// { dg-do compile { target c++2a } } + +#include <new> + +namespace delete_selection_d { + struct B { + void operator delete(void*) = delete; + void operator delete(B *, std::destroying_delete_t) = delete; + }; + void delete_B(B *b) { delete b; } // { dg-bogus "deleted .* deleted" } + // { dg-error "deleted" "" { target c++2a } .-1 } +} diff --git a/gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-2.C b/gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-2.C new file mode 100644 index 0000000..314e2e9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-2.C @@ -0,0 +1,12 @@ +// { dg-do compile { target c++2a } } + +#include <new> + +namespace delete_selection_r { + struct B { + void operator delete(B *, std::destroying_delete_t) = delete; + void operator delete(void*) = delete; + }; + void delete_B(B *b) { delete b; } // { dg-bogus "deleted .* deleted" } + // { dg-error "deleted" "" { target c++2a } .-1 } +} |