From: jason Date: Wed, 9 Jan 2013 18:55:12 +0000 (+0000) Subject: PR c++/55893 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=94e22538b45ede19fd412f0c63545a83fc7fa7c0;p=thirdparty%2Fgcc.git PR c++/55893 * decl.c (cp_finish_decl): Clear TREE_READONLY if the variable needs destruction. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195062 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d67a3c40f355..fe64da57d5b3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-01-09 Jason Merrill + + PR c++/55893 + * decl.c (cp_finish_decl): Clear TREE_READONLY if the variable + needs destruction. + 2013-01-09 Jakub Jelinek PR c/48418 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 9640824f7265..c3622ecf4889 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -6417,6 +6417,10 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, } else if (was_readonly) TREE_READONLY (decl) = 1; + + /* Likewise if it needs destruction. */ + if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)) + TREE_READONLY (decl) = 0; } make_rtl_for_nonlocal_decl (decl, init, asmspec); diff --git a/gcc/testsuite/g++.dg/init/const9.C b/gcc/testsuite/g++.dg/init/const9.C new file mode 100644 index 000000000000..ba1dfd4bc46e --- /dev/null +++ b/gcc/testsuite/g++.dg/init/const9.C @@ -0,0 +1,12 @@ +// PR c++/55893 +// { dg-final { scan-assembler-not "rodata" } } + +struct foo +{ + virtual ~foo (); +}; + +int main () +{ + static const foo tmp; +}