Commit 63578ef9 by Kai Tietz Committed by Kai Tietz

re PR target/51726 (LTO and attribute 'selectany')

	PR target/51726
	* config/i386/winnt.c (ix86_handle_selectany_attribute): Handle
	selectany within this function without need to keep attribute.
	(i386_pe_encode_section_info): Remove selectany-code.

From-SVN: r228370
parent 6a8b77b2
2015-10-02 Kai Tietz <ktietz70@googlemail.com>
PR target/51726
* config/i386/winnt.c (ix86_handle_selectany_attribute): Handle
selectany within this function without need to keep attribute.
(i386_pe_encode_section_info): Remove selectany-code.
2015-10-02 Richard Biener <rguenther@suse.de>
* tree-ssa-sccvn.c (has_VN_INFO): New function.
......@@ -89,17 +89,23 @@ tree
ix86_handle_selectany_attribute (tree *node, tree name, tree, int,
bool *no_add_attrs)
{
tree decl = *node;
/* The attribute applies only to objects that are initialized and have
external linkage. However, we may not know about initialization
until the language frontend has processed the decl. We'll check for
initialization later in encode_section_info. */
if (TREE_CODE (*node) != VAR_DECL || !TREE_PUBLIC (*node))
{
error ("%qE attribute applies only to initialized variables"
" with external linkage", name);
*no_add_attrs = true;
until the language frontend has processed the decl. Therefore
we make sure that variable isn't initialized as common. */
if (TREE_CODE (decl) != VAR_DECL || !TREE_PUBLIC (decl))
error ("%qE attribute applies only to initialized variables"
" with external linkage", name);
else
{
make_decl_one_only (decl, DECL_ASSEMBLER_NAME (decl));
/* A variable with attribute selectany never can be common. */
DECL_COMMON (decl) = 0;
}
/* We don't need to keep attribute itself. */
*no_add_attrs = true;
return NULL_TREE;
}
......@@ -320,23 +326,7 @@ i386_pe_encode_section_info (tree decl, rtx rtl, int first)
switch (TREE_CODE (decl))
{
case FUNCTION_DECL:
break;
case VAR_DECL:
if (lookup_attribute ("selectany", DECL_ATTRIBUTES (decl)))
{
if (DECL_INITIAL (decl)
/* If an object is initialized with a ctor, the static
initialization and destruction code for it is present in
each unit defining the object. The code that calls the
ctor is protected by a link-once guard variable, so that
the object still has link-once semantics, */
|| TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
make_decl_one_only (decl, DECL_ASSEMBLER_NAME (decl));
else
error ("%q+D:'selectany' attribute applies only to "
"initialized objects", decl);
}
break;
default:
......
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