X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firmemory.c;h=c0b3e5e78ef83c5e128d9170a466090a54e7cb35;hb=6ae22fa141079d5bd74423f69cf6354b1d4f5668;hp=52afe1bddc4c213f243494b7fe6ede162bf18cae;hpb=1a3b7d363474ab544c13093a2f0b578718d37c7a;p=libfirm diff --git a/ir/ana/irmemory.c b/ir/ana/irmemory.c index 52afe1bdd..c0b3e5e78 100644 --- a/ir/ana/irmemory.c +++ b/ir/ana/irmemory.c @@ -597,6 +597,16 @@ static ir_alias_relation _get_alias_relation( class1 = get_base_sc(mod1); class2 = get_base_sc(mod2); + /* struct-access cannot alias with variables */ + if (ent1 == NULL && ent2 != NULL && is_compound_type(get_entity_owner(ent2)) + && (class1 == ir_sc_globalvar || class1 == ir_sc_localvar || class1 == ir_sc_tls || class1 == ir_sc_globaladdr)) { + return ir_no_alias; + } + if (ent2 == NULL && ent1 != NULL && is_compound_type(get_entity_owner(ent1)) + && (class2 == ir_sc_globalvar || class2 == ir_sc_localvar || class2 == ir_sc_tls || class2 == ir_sc_globaladdr)) { + return ir_no_alias; + } + if (class1 == ir_sc_pointer || class2 == ir_sc_pointer) { /* swap pointer class to class1 */ if (class2 == ir_sc_pointer) { @@ -886,14 +896,14 @@ static ir_entity_usage determine_entity_usage(const ir_node *irn, ir_entity *ent res |= determine_entity_usage(succ, entity); break; case iro_Sel: { - ir_entity *entity = get_Sel_entity(succ); + ir_entity *sel_entity = get_Sel_entity(succ); /* this analysis can't handle unions correctly */ - if (is_Union_type(get_entity_owner(entity))) { + if (is_Union_type(get_entity_owner(sel_entity))) { res |= ir_usage_unknown; break; } /* Check the successor of irn. */ - res |= determine_entity_usage(succ, entity); + res |= determine_entity_usage(succ, sel_entity); break; } @@ -1130,8 +1140,8 @@ static void check_initializer(ir_entity *ent) /* let's check if it's an address */ if (is_Global(irn)) { - ir_entity *ent = get_Global_entity(irn); - set_entity_usage(ent, ir_usage_unknown); + ir_entity *symconst_ent = get_Global_entity(irn); + set_entity_usage(symconst_ent, ir_usage_unknown); } } }