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) {
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;
}
/* 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);
}
}
}