summaryrefslogtreecommitdiff
path: root/gcc/ipa-devirt.c
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2014-02-10 11:15:38 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2014-02-10 11:15:38 +0000
commit81c441466798292b2df51381808d617250dd770b (patch)
tree812d405048539d60be09437b713c1ba4da8f794e /gcc/ipa-devirt.c
parent08f157620486813bbd4e6a6eec5b9f5e62ef7807 (diff)
downloadgcc-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.c36
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)