aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2019-05-11 07:50:22 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2019-05-11 07:50:22 +0000
commita46695c1cd0c5ddbb90148538b06005a132b759a (patch)
treeaaa218139488d57cd4e59b29b6ed4db5d4a8b143 /gcc
parentc130ab6aad57e0309ec02f58f383aece584ac8cb (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/typeck.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-1.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/multiple-deleted-destroying-delete-error-2.C12
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 }
+}