add a new aliasing rule (struct access != variable)
authorMatthias Braun <matze@braunis.de>
Fri, 17 Jun 2011 21:22:50 +0000 (23:22 +0200)
committerMatthias Braun <matze@braunis.de>
Fri, 17 Jun 2011 21:23:05 +0000 (23:23 +0200)
ir/ana/irmemory.c

index 52afe1b..46f6342 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) {