c++: -fmerge-all-constants vs. destructors [PR91529]
cp_finish_decl avoids setting TREE_READONLY on TREE_STATIC variables that have non-constant construction or destruction, but -fmerge-all-constants was converting an automatic variable to static while leaving TREE_READONLY set. Fixed by clearing the flag in cp_finish_decl in the presence of -fmerge-all-constants. gcc/cp/ChangeLog 2020-05-01 Jason Merrill <jason@redhat.com> PR c++/91529 * decl.c (cp_finish_decl): Also clear TREE_READONLY if -fmerge-all-constants.
This commit is contained in:
parent
bcbf334afe
commit
a2f32550a0
@ -1,3 +1,9 @@
|
||||
2020-05-01 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/91529
|
||||
* decl.c (cp_finish_decl): Also clear TREE_READONLY if
|
||||
-fmerge-all-constants.
|
||||
|
||||
2020-05-01 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/93822
|
||||
|
@ -7833,7 +7833,10 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
|
||||
maybe_commonize_var (decl);
|
||||
}
|
||||
|
||||
if (var_definition_p && TREE_STATIC (decl))
|
||||
if (var_definition_p
|
||||
/* With -fmerge-all-constants, gimplify_init_constructor
|
||||
might add TREE_STATIC to the variable. */
|
||||
&& (TREE_STATIC (decl) || flag_merge_constants >= 2))
|
||||
{
|
||||
/* If a TREE_READONLY variable needs initialization
|
||||
at runtime, it is no longer readonly and we need to
|
||||
|
14
gcc/testsuite/g++.dg/init/const14.C
Normal file
14
gcc/testsuite/g++.dg/init/const14.C
Normal file
@ -0,0 +1,14 @@
|
||||
// PR c++/91529
|
||||
// { dg-do run }
|
||||
// { dg-additional-options -fmerge-all-constants }
|
||||
|
||||
struct A
|
||||
{
|
||||
int i[2];
|
||||
~A() { i[0] = 0; }
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
const A a = { 1,2 };
|
||||
}
|
Loading…
Reference in New Issue
Block a user