Commit 4139c7ef by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/42625 (-fipa-sra can generate different destructors in…

re PR tree-optimization/42625 (-fipa-sra can generate different destructors in different object files, binary breaks after linking)

	PR tree-optimization/42625
	* cgraph.c (cgraph_make_node_local): Clear DECL_COMDAT*,
	TREE_PUBLIC, DECL_WEAK and DECL_EXTERNAL also for same_body
	aliases.

	* g++.dg/opt/dtor4.C: New test.
	* g++.dg/opt/dtor4.h: New.
	* g++.dg/opt/dtor4-aux.cc: New.

From-SVN: r155694
parent 01094033
2010-01-07 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/42625
* cgraph.c (cgraph_make_node_local): Clear DECL_COMDAT*,
TREE_PUBLIC, DECL_WEAK and DECL_EXTERNAL also for same_body
aliases.
2010-01-07 Duncan Sands <baldrick@free.fr>
* Makefile.in (PLUGIN_HEADERS): Add version.h.
......
/* Callgraph handling code.
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Contributed by Jan Hubicka
......@@ -2197,11 +2197,20 @@ cgraph_make_node_local (struct cgraph_node *node)
gcc_assert (cgraph_node_can_be_local_p (node));
if (DECL_COMDAT (node->decl) || DECL_EXTERNAL (node->decl))
{
struct cgraph_node *alias;
DECL_COMDAT (node->decl) = 0;
DECL_COMDAT_GROUP (node->decl) = 0;
TREE_PUBLIC (node->decl) = 0;
DECL_WEAK (node->decl) = 0;
DECL_EXTERNAL (node->decl) = 0;
for (alias = node->same_body; alias; alias = alias->next)
{
DECL_COMDAT (alias->decl) = 0;
DECL_COMDAT_GROUP (alias->decl) = 0;
TREE_PUBLIC (alias->decl) = 0;
DECL_WEAK (alias->decl) = 0;
DECL_EXTERNAL (alias->decl) = 0;
}
node->local.externally_visible = false;
node->local.local = true;
gcc_assert (cgraph_function_body_availability (node) == AVAIL_LOCAL);
......
2010-01-07 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/42625
* g++.dg/opt/dtor4.C: New test.
* g++.dg/opt/dtor4.h: New.
* g++.dg/opt/dtor4-aux.cc: New.
2010-01-07 Tobias Burnus <burnus@net-b.de>
PR fortran/42597
......
// { dg-do compile }
// { dg-options "" }
#include "dtor4.h"
S s;
// PR tree-optimization/42625
// { dg-do run }
// { dg-options "-O1 -fipa-sra" }
// { dg-additional-sources "dtor4-aux.cc" }
#include "dtor4.h"
int
main ()
{
S s;
return 0;
}
#include <cassert>
struct S
{
int a, i;
S () : i(1) {}
__attribute__((noinline)) ~S () { assert (i == 1); }
};
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