re PR middle-end/37293 (r139762 breaks libstdc++ build on darwin)
2008-09-03 Andrew Pinski <andrew_pinski@playstation.sony.com> PR middle-end/37293 * cgraphunit.c (update_call_expr): Remove eh regions from statements which become non throw. (cgraph_function_versioning): Also clear DECL_WEAK. Call update_call_expr after updating the flags on the decl. 2008-09-03 Andrew Pinski <andrew_pinski@playstation.sony.com> PR middle-end/37293 * g++.dg/torture/ipa-cp-1.C: New test. From-SVN: r139946
This commit is contained in:
parent
39ecc01879
commit
c0ab1df3bb
4 changed files with 46 additions and 4 deletions
|
@ -1,3 +1,11 @@
|
|||
2008-09-03 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
|
||||
PR middle-end/37293
|
||||
* cgraphunit.c (update_call_expr): Remove eh regions from statements
|
||||
which become non throw.
|
||||
(cgraph_function_versioning): Also clear DECL_WEAK. Call
|
||||
update_call_expr after updating the flags on the decl.
|
||||
|
||||
2008-09-03 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR tree-optimization/37315
|
||||
|
|
|
@ -1417,7 +1417,14 @@ update_call_expr (struct cgraph_node *new_version)
|
|||
|
||||
/* Update the call expr on the edges to call the new version. */
|
||||
for (e = new_version->callers; e; e = e->next_caller)
|
||||
gimple_call_set_fndecl (e->call_stmt, new_version->decl);
|
||||
{
|
||||
struct function *inner_function = DECL_STRUCT_FUNCTION (e->caller->decl);
|
||||
gimple_call_set_fndecl (e->call_stmt, new_version->decl);
|
||||
/* Update EH information too, just in case. */
|
||||
if (!stmt_could_throw_p (e->call_stmt)
|
||||
&& lookup_stmt_eh_region_fn (inner_function, e->call_stmt))
|
||||
remove_stmt_from_eh_region_fn (inner_function, e->call_stmt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1524,20 +1531,24 @@ cgraph_function_versioning (struct cgraph_node *old_version_node,
|
|||
|
||||
/* Copy the OLD_VERSION_NODE function tree to the new version. */
|
||||
tree_function_versioning (old_decl, new_decl, tree_map, false, args_to_skip);
|
||||
/* Update the call_expr on the edges to call the new version node. */
|
||||
update_call_expr (new_version_node);
|
||||
|
||||
/* Update the new version's properties.
|
||||
Make The new version visible only within this translation unit.
|
||||
Make The new version visible only within this translation unit. Make sure
|
||||
that is not weak also.
|
||||
??? We cannot use COMDAT linkage because there is no
|
||||
ABI support for this. */
|
||||
DECL_EXTERNAL (new_version_node->decl) = 0;
|
||||
DECL_ONE_ONLY (new_version_node->decl) = 0;
|
||||
TREE_PUBLIC (new_version_node->decl) = 0;
|
||||
DECL_COMDAT (new_version_node->decl) = 0;
|
||||
DECL_WEAK (new_version_node->decl) = 0;
|
||||
new_version_node->local.externally_visible = 0;
|
||||
new_version_node->local.local = 1;
|
||||
new_version_node->lowered = true;
|
||||
|
||||
/* Update the call_expr on the edges to call the new version node. */
|
||||
update_call_expr (new_version_node);
|
||||
|
||||
cgraph_call_function_insertion_hooks (new_version_node);
|
||||
return new_version_node;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2008-09-03 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
|
||||
PR middle-end/37293
|
||||
* g++.dg/torture/ipa-cp-1.C: New test.
|
||||
|
||||
2008-09-03 David Edelsohn <edelsohn@gnu.org>
|
||||
|
||||
* g++.dg/ext/java-2.C: Disable on AIX.
|
||||
|
|
18
gcc/testsuite/g++.dg/torture/ipa-cp-1.C
Normal file
18
gcc/testsuite/g++.dg/torture/ipa-cp-1.C
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
// With IPA-CP, this caused a problem on darwin, where
|
||||
// _M_reset is being cloned, it was still being marked
|
||||
// as weak and then we had to change the calls to the
|
||||
// newly marked function for the non throwing behavior.
|
||||
|
||||
int& f(int&);
|
||||
inline void _M_reset(int &_M_vbp) throw()
|
||||
{
|
||||
f(_M_vbp);
|
||||
}
|
||||
extern int _S_last_request;
|
||||
void _M_allocate_single_object() throw()
|
||||
{
|
||||
_M_reset(_S_last_request);
|
||||
_M_reset(_S_last_request);
|
||||
}
|
Loading…
Add table
Reference in a new issue