diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6839a5ec155..2ba494ac856 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-10-14 Eric Botcazou + + PR ada/62019 + * tree-eh.c (tree_could_trap) : Revamp and really + do not choke on null node. + : Likewise. + 2014-10-14 DJ Delorie * machmode.h (int_n_data_t): New. diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index d8032538c0a..6cfdcce6ec9 100644 --- a/gcc/tree-eh.c +++ b/gcc/tree-eh.c @@ -2657,15 +2657,12 @@ tree_could_trap_p (tree expr) /* Assume that accesses to weak functions may trap, unless we know they are certainly defined in current TU or in some other LTO partition. */ - if (DECL_WEAK (expr) && !DECL_COMDAT (expr)) + if (DECL_WEAK (expr) && !DECL_COMDAT (expr) && DECL_EXTERNAL (expr)) { - struct cgraph_node *node; - if (!DECL_EXTERNAL (expr)) - return false; - node = cgraph_node::get (expr)->function_symbol (); - if (node && node->in_other_partition) - return false; - return true; + cgraph_node *node = cgraph_node::get (expr); + if (node) + node = node->function_symbol (); + return !(node && node->in_other_partition); } return false; @@ -2673,15 +2670,12 @@ tree_could_trap_p (tree expr) /* Assume that accesses to weak vars may trap, unless we know they are certainly defined in current TU or in some other LTO partition. */ - if (DECL_WEAK (expr) && !DECL_COMDAT (expr)) + if (DECL_WEAK (expr) && !DECL_COMDAT (expr) && DECL_EXTERNAL (expr)) { - varpool_node *node; - if (!DECL_EXTERNAL (expr)) - return false; - node = varpool_node::get (expr)->ultimate_alias_target (); - if (node && node->in_other_partition) - return false; - return true; + varpool_node *node = varpool_node::get (expr); + if (node) + node = node->ultimate_alias_target (); + return !(node && node->in_other_partition); } return false;