diff options
author | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-02-10 11:15:38 +0000 |
---|---|---|
committer | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-02-10 11:15:38 +0000 |
commit | 81c441466798292b2df51381808d617250dd770b (patch) | |
tree | 812d405048539d60be09437b713c1ba4da8f794e /gcc/ipa-devirt.c | |
parent | 08f157620486813bbd4e6a6eec5b9f5e62ef7807 (diff) | |
download | gcc-81c441466798292b2df51381808d617250dd770b.tar.gz |
* ipa-devirt.c (get_polymorphic_call_info_from_invariant): Return
proper constants and fix formatting.
(possible_polymorphic_call_targets): Fix formatting.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207653 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa-devirt.c')
-rw-r--r-- | gcc/ipa-devirt.c | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index 3341a5a9fc0..f1e447f13f3 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -1102,23 +1102,19 @@ get_polymorphic_call_info_from_invariant (ipa_polymorphic_call_context *context, tree base; if (TREE_CODE (cst) != ADDR_EXPR) - return NULL_TREE; + return false; cst = TREE_OPERAND (cst, 0); base = get_ref_base_and_extent (cst, &offset2, &size, &max_size); - if (!DECL_P (base) - || max_size == -1 - || max_size != size) - return NULL_TREE; + if (!DECL_P (base) || max_size == -1 || max_size != size) + return false; /* Only type inconsistent programs can have otr_type that is not part of outer type. */ - if (!contains_type_p (TREE_TYPE (base), - offset, otr_type)) - return NULL_TREE; + if (!contains_type_p (TREE_TYPE (base), offset, otr_type)) + return false; - get_polymorphic_call_info_for_decl (context, - base, offset); + get_polymorphic_call_info_for_decl (context, base, offset); return true; } @@ -1383,12 +1379,12 @@ possible_polymorphic_call_targets (tree otr_type, tree binfo, target; bool final; - if (!odr_hash.is_created ()) - { - if (completep) - *completep = false; - return nodes; - } + if (!odr_hash.is_created ()) + { + if (completep) + *completep = false; + return nodes; + } type = get_odr_type (otr_type, true); @@ -1396,7 +1392,7 @@ possible_polymorphic_call_targets (tree otr_type, if (context.outer_type) get_class_context (&context, otr_type); - /* We now canonicalize our query, so we do not need extra hashtable entries. */ + /* We canonicalize our query, so we do not need extra hashtable entries. */ /* Without outer type, we have no use for offset. Just do the basic search from innter type */ @@ -1457,7 +1453,6 @@ possible_polymorphic_call_targets (tree otr_type, matched_vtables = pointer_set_create (); /* First see virtual method of type itself. */ - binfo = get_binfo_at_offset (TYPE_BINFO (outer_type->type), context.offset, otr_type); target = gimple_get_virt_method_for_binfo (otr_token, binfo); @@ -1474,6 +1469,7 @@ possible_polymorphic_call_targets (tree otr_type, is that it has been fully optimized out. */ else if (flag_ltrans || !type->anonymous_namespace) final = false; + pointer_set_insert (matched_vtables, BINFO_VTABLE (binfo)); /* Next walk bases, if asked to. */ @@ -1492,10 +1488,12 @@ possible_polymorphic_call_targets (tree otr_type, for (i = 0; i < outer_type->derived_types.length(); i++) possible_polymorphic_call_targets_1 (nodes, inserted, matched_vtables, - otr_type, outer_type->derived_types[i], + otr_type, + outer_type->derived_types[i], otr_token, outer_type->type, context.offset); } + (*slot)->targets = nodes; (*slot)->final = final; if (completep) |