From 407e3466971700b066aa5b46c2972b3e17f69fbe Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Fri, 17 Jun 2011 23:22:50 +0200 Subject: [PATCH] add a new aliasing rule (struct access != variable) --- ir/ana/irmemory.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ir/ana/irmemory.c b/ir/ana/irmemory.c index 52afe1bdd..46f634272 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) { -- 2.20.1