From: Eric Botcazou Date: Tue, 14 Oct 2014 21:04:05 +0000 (+0000) Subject: re PR ada/62019 (gnat.dg/weak2.adb fails everywhere) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5940e204bd31aacbdb3cbb2660483f18ce750593;p=gcc.git re PR ada/62019 (gnat.dg/weak2.adb fails everywhere) PR ada/62019 * tree-eh.c (tree_could_trap) : Revamp and really do not choke on null node. : Likewise. From-SVN: r216223 --- 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;