X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree-ssa-alias.c;h=baf5ff27696052d6e1609ac81528d71ee6c2c8c3;hb=d12e862b93167edd9aee40bdad48a00e60cf5514;hp=d30dc38d6373f9b043b5b8c8b6887ea4cf2c7f16;hpb=61d3f8df95edd4f783c5f6ba046326ab08a6bcb2;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index d30dc38d637..baf5ff27696 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -414,7 +414,7 @@ init_alias_info (void) { tree name = ssa_name (i); - if (!POINTER_TYPE_P (TREE_TYPE (name))) + if (!name || !POINTER_TYPE_P (TREE_TYPE (name))) continue; if (SSA_NAME_PTR_INFO (name)) @@ -694,6 +694,9 @@ compute_points_to_and_addr_escape (struct alias_info *ai) bitmap_set_bit (ai->written_vars, ann->uid); if (may_be_aliased (var)) (VARRAY_UINT (ai->num_references, ann->uid))++; + + if (POINTER_TYPE_P (TREE_TYPE (op))) + collect_points_to_info_for (ai, op); } /* Mark variables in V_MAY_DEF operands as being written to. */ @@ -1344,6 +1347,7 @@ setup_pointers_and_addressables (struct alias_info *ai) { if (!bitmap_bit_p (ai->addresses_needed, v_ann->uid) && v_ann->mem_tag_kind == NOT_A_TAG + && TREE_CODE (var) != RESULT_DECL && !is_global_var (var)) { /* The address of VAR is not needed, remove the @@ -1787,7 +1791,7 @@ add_pointed_to_var (struct alias_info *ai, tree ptr, tree value) gcc_assert (TREE_CODE (value) == ADDR_EXPR); pt_var = TREE_OPERAND (value, 0); - if (TREE_CODE_CLASS (TREE_CODE (pt_var)) == 'r') + if (REFERENCE_CLASS_P (pt_var)) pt_var = get_base_address (pt_var); if (pt_var && SSA_VAR_P (pt_var)) @@ -1831,6 +1835,12 @@ collect_points_to_info_r (tree var, tree stmt, void *data) switch (TREE_CODE (stmt)) { + case RETURN_EXPR: + if (TREE_CODE (TREE_OPERAND (stmt, 0)) != MODIFY_EXPR) + abort (); + stmt = TREE_OPERAND (stmt, 0); + /* FALLTHRU */ + case MODIFY_EXPR: { tree rhs = TREE_OPERAND (stmt, 1); @@ -2214,7 +2224,12 @@ dump_alias_info (FILE *file) for (i = 1; i < num_ssa_names; i++) { tree ptr = ssa_name (i); - struct ptr_info_def *pi = SSA_NAME_PTR_INFO (ptr); + struct ptr_info_def *pi; + + if (ptr == NULL_TREE) + continue; + + pi = SSA_NAME_PTR_INFO (ptr); if (!SSA_NAME_IN_FREE_LIST (ptr) && pi && pi->name_mem_tag)