[Bug ipa/59947] [4.9 Regression] Segmentation fault with #pragma GCC optimize ("O2"), ICE in get_odr_type
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jan 31 17:08:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59947
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
--- gcc/ipa-devirt.c.jj 2014-01-13 08:54:29.000000000 +0100
+++ gcc/ipa-devirt.c 2014-01-31 18:04:01.869210678 +0100
@@ -1212,7 +1212,7 @@ devirt_variable_node_removal_hook (varpo
temporarily change to one of base types. INCLUDE_DERIVER_TYPES make
us to walk the inheritance graph for all derivations.
- If COMPLETEP is non-NULL, store true if the list is complette.
+ If COMPLETEP is non-NULL, store true if the list is complete.
CACHE_TOKEN (if non-NULL) will get stored to an unique ID of entry
in the target cache. If user needs to visit every target list
just once, it can memoize them.
@@ -1231,7 +1231,7 @@ possible_polymorphic_call_targets (tree
static struct cgraph_node_hook_list *node_removal_hook_holder;
pointer_set_t *inserted;
pointer_set_t *matched_vtables;
- vec <cgraph_node *> nodes=vNULL;
+ vec <cgraph_node *> nodes = vNULL;
odr_type type, outer_type;
polymorphic_call_target_d key;
polymorphic_call_target_d **slot;
@@ -1239,6 +1239,13 @@ possible_polymorphic_call_targets (tree
tree binfo, target;
bool final;
+ if (!odr_hash.is_created ())
+ {
+ if (completep)
+ *completep = false;
+ return nodes;
+ }
+
type = get_odr_type (otr_type, true);
/* Lookup the outer class type we want to walk. */
fixes this, but not sure if that is what Honza wants. As odr_hash isn't
public, the other possibility would be just to export some function whether it
is ok to call possible_polymorphic_call_targets, that gimple_fold_call could
check.
More information about the Gcc-bugs
mailing list