type_t *type = expression->expression.datatype;
ir_mode *mode = get_ir_mode(type);
+ assert(type->type != TYPE_POINTER);
+
value = create_conv(dbgi, value, mode);
set_value_for_expression(expression->left, value);
assert(elem_size >= 1);
if(elem_size > 1) {
- ir_node *cnst = new_Const_long(mode_Iu, elem_size);
- ir_node *mul = new_d_Mul(dbgi, integer, cnst, mode_Iu);
+ integer = create_conv(dbgi, integer, mode_Is);
+ ir_node *cnst = new_Const_long(mode_Is, (int) elem_size);
+ ir_node *mul = new_d_Mul(dbgi, integer, cnst, mode_Is);
integer = mul;
}
if(declaration->declaration_type == DECLARATION_TYPE_LOCAL_VARIABLE) {
set_value(declaration->v.value_number, init_node);
} else {
- panic("initializer not completely implemented yet");
+ ir_entity *entity = declaration->v.entity;
+
+ set_entity_variability(entity, variability_initialized);
+ set_atomic_ent_value(entity, init_node);
}
} else {
assert(initializer->type == INITIALIZER_LIST);
} else {
set_entity_visibility(entity, visibility_external_visible);
}
+ current_ir_graph = get_const_code_irg();
+ create_initializer(declaration);
}
static void context_to_firm(context_t *context)