- /* create a sel for the compound literal address */
- ir_node *frame = get_irg_frame(current_ir_graph);
- ir_node *sel = new_d_simpleSel(dbgi, new_NoMem(), frame, entity);
- return sel;
+ if (is_constant_initializer(initializer) == EXPR_CLASS_CONSTANT) {
+ ir_entity *entity = create_initializer_entity(dbgi, initializer, type);
+ return create_symconst(dbgi, entity);
+ } else {
+ /* create an entity on the stack */
+ ident *const id = id_unique("CompLit.%u");
+ ir_type *const irtype = get_ir_type(type);
+ ir_type *frame_type = get_irg_frame_type(current_ir_graph);
+
+ ir_entity *const entity = new_d_entity(frame_type, id, irtype, dbgi);
+ set_entity_ld_ident(entity, id);
+
+ /* create initialisation code */
+ create_local_initializer(initializer, dbgi, entity, type);
+
+ /* create a sel for the compound literal address */
+ ir_node *frame = get_irg_frame(current_ir_graph);
+ ir_node *sel = new_d_simpleSel(dbgi, new_NoMem(), frame, entity);
+ return sel;
+ }