Commit 27edb548 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/31809 (sometimes TREE_READONLY is still set for non read only…

re PR c++/31809 (sometimes TREE_READONLY is still set for non read only variables causing wrong code)

	PR c++/31809
	* decl.c (cp_finish_decl): Clear TREE_READONLY flag on TREE_STATIC
	variables that need runtime initialization.

	* g++.dg/opt/static5.C: New test.

From-SVN: r125201
parent 859fa3b8
2007-05-30 Jakub Jelinek <jakub@redhat.com>
PR c++/31809
* decl.c (cp_finish_decl): Clear TREE_READONLY flag on TREE_STATIC
variables that need runtime initialization.
2007-05-28 Andrew Pinski <Andrew_pinski@playstation.sony.com>
PR c++/31339
......
......@@ -5357,7 +5357,14 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
initializer. It is not legal to redeclare a static data
member, so this issue does not arise in that case. */
if (var_definition_p && TREE_STATIC (decl))
expand_static_init (decl, init);
{
/* If a TREE_READONLY variable needs initialization
at runtime, it is no longer readonly and we need to
avoid MEM_READONLY_P being set on RTL created for it. */
if (init && TREE_READONLY (decl))
TREE_READONLY (decl) = 0;
expand_static_init (decl, init);
}
}
}
......
2007-05-30 Jakub Jelinek <jakub@redhat.com>
PR c++/31809
* g++.dg/opt/static5.C: New test.
2007-05-30 Richard Guenther <rguenther@suse.de>
* g++.dg/dg.exp: Prune torture/.
// PR c++/31809
// { dg-do run }
// { dg-options "-O2" }
struct S
{
unsigned v;
static inline S f (unsigned a);
};
inline S
S::f (unsigned a)
{
static S t = { a };
return t;
}
const static S s = S::f (26);
extern "C" void abort (void);
int
main ()
{
S t = s;
if (t.v != 26)
abort ();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment