diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-06-23 14:08:19 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-06-23 14:08:19 +0000 |
commit | 435172d141d9080a7944f18d971badf4363a2636 (patch) | |
tree | adaf8fbed9e5458f3d36bf4ae5c9b7f35c801603 | |
parent | c1c0e9ee89f7776ec8fddc692efa7453430d291e (diff) |
PR c++/66542
* decl.c (expand_static_init): Make sure the destructor is callable
here even if we have an initializer.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@224842 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/deleted12.C | 10 |
3 files changed, 19 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 479044807ef..194d764469c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2015-06-23 Jason Merrill <jason@redhat.com> + + PR c++/66542 + * decl.c (expand_static_init): Make sure the destructor is callable + here even if we have an initializer. + 2015-06-04 Pierre-Marie de Rodat <derodat@adacore.com> * lang-specs.h: Pass "-o %g.s" to cc1plus for headers even if diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index c934ff93077..d14ffe218fc 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -7163,12 +7163,12 @@ expand_static_init (tree decl, tree init) gcc_assert (TREE_STATIC (decl)); /* Some variables require no dynamic initialization. */ - if (!init - && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl))) + if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl))) { /* Make sure the destructor is callable. */ cxx_maybe_build_cleanup (decl, tf_warning_or_error); - return; + if (!init) + return; } if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl) diff --git a/gcc/testsuite/g++.dg/cpp0x/deleted12.C b/gcc/testsuite/g++.dg/cpp0x/deleted12.C new file mode 100644 index 00000000000..770bb9c305a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/deleted12.C @@ -0,0 +1,10 @@ +// PR c++/66542 +// { dg-do compile { target c++11 } } + +struct A +{ + A() {} + ~A() = delete; // { dg-message "declared here" } +}; + +static A a; // { dg-error "deleted" } |