* Pointer to a label. This is used for the
* GNU address-of-label extension.
*/
-static ir_node *label_address_to_firm(
- const label_address_expression_t *label)
+static ir_node *label_address_to_firm(const label_address_expression_t *label)
{
- ir_node *block = get_label_block(label->label);
- ir_label_t nr = get_Block_label(block);
+ dbg_info *dbgi = get_dbg_info(&label->base.source_position);
+ ir_node *block = get_label_block(label->label);
+ ir_entity *entity = create_Block_entity(block);
- if (nr == 0) {
- nr = get_irp_next_label_nr();
- set_Block_label(block, nr);
- }
symconst_symbol value;
- value.label = nr;
- return new_SymConst(mode_P_code, value, symconst_label);
+ value.entity_p = entity;
+ return new_d_SymConst(dbgi, mode_P_code, value, symconst_addr_ent);
}
/**
ident *id;
ir_type *tp;
ir_entity *ent;
- ir_label_t label;
symconst_kind kind = get_SymConst_kind(n);
const char *k_name = "NULL";
const char *str;
fprintf(f, " sym.ident_p = new_id_from_chars(\"%s\", %d);\n", str, get_id_strlen(id));
k_name = "symconst_enum_const";
break;
- case symconst_label:
- label = get_SymConst_label(n);
- fprintf(f, " sym.label = %lu;\n", label);
- k_name = "symconst_label";
- break;
}
name(f, " ", n, " = new_r_SymConst(irg, ");
name(f, NULL, get_nodes_block(n), ", sym, ");