re PR target/33168 (GCC Boot failure, building libstc++)
PR target/33168 * decl.c (cp_finish_decl): Call make_rtl_for_nonlocal_decl already with the final TREE_READONLY flag in place. processing_template_decl is known to be 0 in this part of function. * g++.dg/other/datasec1.C: New test. From-SVN: r129922
This commit is contained in:
parent
36b6e79343
commit
b0eb6a8f72
@ -1,5 +1,10 @@
|
||||
2007-11-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/33168
|
||||
* decl.c (cp_finish_decl): Call make_rtl_for_nonlocal_decl already
|
||||
with the final TREE_READONLY flag in place. processing_template_decl
|
||||
is known to be 0 in this part of function.
|
||||
|
||||
PR c++/33894
|
||||
* cp-tree.h: Update comment - TYPE_LANG_FLAG_0 is not
|
||||
OMP_ATOMIC_DEPENDENT_P in OMP_ATOMIC.
|
||||
|
@ -5455,8 +5455,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
|
||||
require a guard variable, and since the mangled name of the
|
||||
guard variable will depend on the mangled name of this
|
||||
variable. */
|
||||
if (!processing_template_decl
|
||||
&& DECL_FUNCTION_SCOPE_P (decl)
|
||||
if (DECL_FUNCTION_SCOPE_P (decl)
|
||||
&& TREE_STATIC (decl)
|
||||
&& !DECL_ARTIFICIAL (decl))
|
||||
push_local_name (decl);
|
||||
@ -5561,6 +5560,21 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
|
||||
/* This needs to happen after the linkage is set. */
|
||||
determine_visibility (decl);
|
||||
|
||||
if (var_definition_p && TREE_STATIC (decl))
|
||||
{
|
||||
/* 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)
|
||||
{
|
||||
if (TREE_READONLY (decl))
|
||||
TREE_READONLY (decl) = 0;
|
||||
was_readonly = 0;
|
||||
}
|
||||
else if (was_readonly)
|
||||
TREE_READONLY (decl) = 1;
|
||||
}
|
||||
|
||||
make_rtl_for_nonlocal_decl (decl, init, asmspec);
|
||||
|
||||
/* Check for abstractness of the type. Notice that there is no
|
||||
@ -5583,40 +5597,21 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
|
||||
if (init)
|
||||
DECL_INITIAL (decl) = init;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* A variable definition. */
|
||||
if (DECL_FUNCTION_SCOPE_P (decl))
|
||||
{
|
||||
/* Initialize the local variable. */
|
||||
if (processing_template_decl)
|
||||
DECL_INITIAL (decl) = init;
|
||||
else if (!TREE_STATIC (decl))
|
||||
initialize_local_var (decl, init);
|
||||
}
|
||||
/* A variable definition. */
|
||||
else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
|
||||
/* Initialize the local variable. */
|
||||
initialize_local_var (decl, init);
|
||||
|
||||
/* If a variable is defined, and then a subsequent
|
||||
definition with external linkage is encountered, we will
|
||||
get here twice for the same variable. We want to avoid
|
||||
calling expand_static_init more than once. For variables
|
||||
that are not static data members, we can call
|
||||
expand_static_init only when we actually process the
|
||||
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))
|
||||
{
|
||||
/* 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)
|
||||
{
|
||||
if (TREE_READONLY (decl))
|
||||
TREE_READONLY (decl) = 0;
|
||||
was_readonly = 0;
|
||||
}
|
||||
expand_static_init (decl, init);
|
||||
}
|
||||
}
|
||||
/* If a variable is defined, and then a subsequent
|
||||
definition with external linkage is encountered, we will
|
||||
get here twice for the same variable. We want to avoid
|
||||
calling expand_static_init more than once. For variables
|
||||
that are not static data members, we can call
|
||||
expand_static_init only when we actually process the
|
||||
initializer. It is not legal to redeclare a static data
|
||||
member, so this issue does not arise in that case. */
|
||||
else if (var_definition_p && TREE_STATIC (decl))
|
||||
expand_static_init (decl, init);
|
||||
}
|
||||
|
||||
/* If a CLEANUP_STMT was created to destroy a temporary bound to a
|
||||
|
@ -1,5 +1,8 @@
|
||||
2007-11-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/33168
|
||||
* g++.dg/other/datasec1.C: New test.
|
||||
|
||||
PR tree-optimization/33458
|
||||
* g++.dg/opt/inline12.C: New test.
|
||||
|
||||
|
10
gcc/testsuite/g++.dg/other/datasec1.C
Normal file
10
gcc/testsuite/g++.dg/other/datasec1.C
Normal file
@ -0,0 +1,10 @@
|
||||
// PR target/33168
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2 -fdata-sections" }
|
||||
|
||||
extern const int& foo;
|
||||
namespace
|
||||
{
|
||||
const int bar = 16;
|
||||
}
|
||||
const int &foo = bar;
|
Loading…
x
Reference in New Issue
Block a user