diff options
author | Martin Liska <mliska@suse.cz> | 2019-08-02 08:07:15 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-08-02 06:07:15 +0000 |
commit | 8e8e7af514344588ff3e3da25c0cb74c12dc6a0d (patch) | |
tree | 718561f6eba3620d15ed6284d1970991666ac69c /gcc | |
parent | 5bae71d1aaa211493c58d03037634a06064f59fa (diff) | |
download | gcc-8e8e7af514344588ff3e3da25c0cb74c12dc6a0d.zip gcc-8e8e7af514344588ff3e3da25c0cb74c12dc6a0d.tar.gz gcc-8e8e7af514344588ff3e3da25c0cb74c12dc6a0d.tar.bz2 |
Mark DECL_SET_IS_OPERATOR_DELETE for user-provided delete operators.
2019-08-02 Martin Liska <mliska@suse.cz>
* decl.c (grok_op_properties):
Mark DECL_SET_IS_OPERATOR_DELETE for user-provided delete operators.
2019-08-02 Martin Liska <mliska@suse.cz>
* g++.dg/cpp1y/new2.C: New test.
From-SVN: r273996
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/new2.C | 39 |
4 files changed, 52 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 02992ae..b7183ac 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2019-08-02 Martin Liska <mliska@suse.cz> + + * decl.c (grok_op_properties): + Mark DECL_SET_IS_OPERATOR_DELETE for user-provided delete operators. + 2019-08-01 Martin Sebor <msebor@redhat.com> PR c++/90947 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index a1ab5ca..e0102c0 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -13678,7 +13678,10 @@ grok_op_properties (tree decl, bool complain) } if (op_flags & OVL_OP_FLAG_DELETE) - coerce_delete_type (decl, loc); + { + DECL_SET_IS_OPERATOR_DELETE (decl, true); + coerce_delete_type (decl, loc); + } else { DECL_SET_IS_OPERATOR_NEW (decl, true); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6aae2e4..72e258b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-08-02 Martin Liska <mliska@suse.cz> + + * g++.dg/cpp1y/new2.C: New test. + 2019-08-02 Senthil Kumar Selvaraj <senthilkumar.selvaraj@microchip.com> * gcc.dg/torture/ssa-fre-6.c: Add dg-require-effective-target int32. diff --git a/gcc/testsuite/g++.dg/cpp1y/new2.C b/gcc/testsuite/g++.dg/cpp1y/new2.C new file mode 100644 index 0000000..926e796 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/new2.C @@ -0,0 +1,39 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -std=c++17 -fdump-tree-cddce-details" } */ + +#include <cstdio> +#include <cstdlib> +#include <new> + +void* operator new(std::size_t sz) +{ + std::printf("global op new called, size = %zu\n", sz); + void *ptr = std::malloc(sz); + if (ptr) + return ptr; + else + throw std::bad_alloc{}; +} + +void operator delete(void* ptr) noexcept +{ + std::puts("global op delete called"); + std::free(ptr); +} + +void +new_primitive_load() { + int *x = new int; + int tmp = *x; + delete x; +} + +void +new_array_load() { + int *x = new int[10]; + int tmp = x[4]; + delete [] x; +} + +/* { dg-final { scan-tree-dump-times "Deleting : _\\d+ = operator new" 2 "cddce1"} } */ +/* { dg-final { scan-tree-dump-times "Deleting : operator delete" 2 "cddce1"} } */ |