X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fproc_cloning.c;h=2f80cbce1d2bc5b84e3a6dfbf4c86d06cbc972b4;hb=6b124543aff56817fcfe6d5b5ff181ac5c790e73;hp=ff0cf07d718834a8bbd4b26b9b09ed30280a0b0e;hpb=2bc2dd4bd4f64982e9c5d2f1ea70d63d0eb10044;p=libfirm diff --git a/ir/opt/proc_cloning.c b/ir/opt/proc_cloning.c index ff0cf07d7..2f80cbce1 100644 --- a/ir/opt/proc_cloning.c +++ b/ir/opt/proc_cloning.c @@ -187,12 +187,12 @@ static void collect_irg_calls(ir_node *call, void *env) { callee = get_Global_entity(call_ptr); - /* we can only clone calls to existing entities */ - if (get_entity_irg(callee) == NULL) + /* we don't know which function gets finally bound to a weak symbol */ + if (get_entity_linkage(callee) & IR_LINKAGE_WEAK) return; - /* we cannot clone calls to weak functions */ - if (get_entity_additional_properties(callee) & mtp_property_weak) + /* we can only clone calls to existing entities */ + if (get_entity_irg(callee) == NULL) return; process_call(call, callee, hmap); @@ -417,7 +417,7 @@ static ir_entity *clone_method(quadruple_t *q) new_entity = copy_entity_name(q->ent, clone_ident); /* a cloned entity is always local */ - add_entity_linkage(new_entity, IR_LINKAGE_LOCAL); + set_entity_visibility(new_entity, ir_visibility_local); /* set a ld name here: Should we mangle this ? */ set_entity_ld_ident(new_entity, get_entity_ident(new_entity));