projects
/
cparser
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
0169a7b
)
implement atomic entity initialisation
author
Matthias Braun
<matze@braunis.de>
Wed, 14 Nov 2007 16:34:58 +0000
(16:34 +0000)
committer
Matthias Braun
<matze@braunis.de>
Wed, 14 Nov 2007 16:34:58 +0000
(16:34 +0000)
[r18393]
ast2firm.c
patch
|
blob
|
history
diff --git
a/ast2firm.c
b/ast2firm.c
index
4e242ad
..
826985d
100644
(file)
--- a/
ast2firm.c
+++ b/
ast2firm.c
@@
-929,6
+929,8
@@
static ir_node *create_arithmetic_assign_binop(
type_t *type = expression->expression.datatype;
ir_mode *mode = get_ir_mode(type);
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);
value = create_conv(dbgi, value, mode);
set_value_for_expression(expression->left, value);
@@
-971,8
+973,9
@@
static ir_node *create_add(const binary_expression_t *expression)
assert(elem_size >= 1);
if(elem_size > 1) {
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;
}
integer = mul;
}
@@
-1546,7
+1549,10
@@
static void create_initializer(declaration_t *declaration)
if(declaration->declaration_type == DECLARATION_TYPE_LOCAL_VARIABLE) {
set_value(declaration->v.value_number, init_node);
} else {
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 {
assert(initializer->type == INITIALIZER_LIST);
@@
-1845,6
+1851,8
@@
static void create_global_variable(declaration_t *declaration)
} else {
set_entity_visibility(entity, visibility_external_visible);
}
} 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)
}
static void context_to_firm(context_t *context)