Fixed opt/fehler192.c.
[libfirm] / ir / ana / irmemory.c
index 52afe1b..c0b3e5e 100644 (file)
@@ -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);
                        }
                }
        }