Commit 5940e204 by Eric Botcazou Committed by Eric Botcazou

re PR ada/62019 (gnat.dg/weak2.adb fails everywhere)

	PR ada/62019
	* tree-eh.c (tree_could_trap) <FUNCTION_DECL>: Revamp and really
	do not choke on null node.
	<VAR_DECL>: Likewise.

From-SVN: r216223
parent 9edc6e4c
2014-10-14 Eric Botcazou <ebotcazou@adacore.com>
PR ada/62019
* tree-eh.c (tree_could_trap) <FUNCTION_DECL>: Revamp and really
do not choke on null node.
<VAR_DECL>: Likewise.
2014-10-14 DJ Delorie <dj@redhat.com> 2014-10-14 DJ Delorie <dj@redhat.com>
* machmode.h (int_n_data_t): New. * machmode.h (int_n_data_t): New.
...@@ -2657,15 +2657,12 @@ tree_could_trap_p (tree expr) ...@@ -2657,15 +2657,12 @@ tree_could_trap_p (tree expr)
/* Assume that accesses to weak functions may trap, unless we know /* Assume that accesses to weak functions may trap, unless we know
they are certainly defined in current TU or in some other they are certainly defined in current TU or in some other
LTO partition. */ LTO partition. */
if (DECL_WEAK (expr) && !DECL_COMDAT (expr)) if (DECL_WEAK (expr) && !DECL_COMDAT (expr) && DECL_EXTERNAL (expr))
{ {
struct cgraph_node *node; cgraph_node *node = cgraph_node::get (expr);
if (!DECL_EXTERNAL (expr)) if (node)
return false; node = node->function_symbol ();
node = cgraph_node::get (expr)->function_symbol (); return !(node && node->in_other_partition);
if (node && node->in_other_partition)
return false;
return true;
} }
return false; return false;
...@@ -2673,15 +2670,12 @@ tree_could_trap_p (tree expr) ...@@ -2673,15 +2670,12 @@ tree_could_trap_p (tree expr)
/* Assume that accesses to weak vars may trap, unless we know /* Assume that accesses to weak vars may trap, unless we know
they are certainly defined in current TU or in some other they are certainly defined in current TU or in some other
LTO partition. */ LTO partition. */
if (DECL_WEAK (expr) && !DECL_COMDAT (expr)) if (DECL_WEAK (expr) && !DECL_COMDAT (expr) && DECL_EXTERNAL (expr))
{ {
varpool_node *node; varpool_node *node = varpool_node::get (expr);
if (!DECL_EXTERNAL (expr)) if (node)
return false; node = node->ultimate_alias_target ();
node = varpool_node::get (expr)->ultimate_alias_target (); return !(node && node->in_other_partition);
if (node && node->in_other_partition)
return false;
return true;
} }
return false; return false;
......
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