From add5c7634eb4e3cc62110bcaaacc19b70d62a6f0 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 5 Feb 2014 16:34:25 +0100 Subject: re PR ipa/59947 (Segmentation fault with #pragma GCC optimize ("O2"), ICE in get_odr_type) PR ipa/59947 * ipa-devirt.c (possible_polymorphic_call_targets): Fix a comment typo and formatting issue. If odr_hash hasn't been created, return vNULL and set *completep to false. * g++.dg/opt/pr59947.C: New test. From-SVN: r207512 --- gcc/ipa-devirt.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'gcc/ipa-devirt.c') diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index f137874..c110a98 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -1359,7 +1359,7 @@ devirt_variable_node_removal_hook (varpool_node *n, 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. @@ -1378,7 +1378,7 @@ possible_polymorphic_call_targets (tree otr_type, static struct cgraph_node_hook_list *node_removal_hook_holder; pointer_set_t *inserted; pointer_set_t *matched_vtables; - vec nodes=vNULL; + vec nodes = vNULL; odr_type type, outer_type; polymorphic_call_target_d key; polymorphic_call_target_d **slot; @@ -1386,6 +1386,13 @@ possible_polymorphic_call_targets (tree otr_type, 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. */ -- cgit v1.1