mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-22 02:11:19 +00:00
Mark initialized struct/array defs as initalized.
Also, use the initialized flag for setting up the initalized var set in flow_uninitialized().
This commit is contained in:
parent
f4604d9db5
commit
dbbca47a3b
2 changed files with 19 additions and 1 deletions
|
@ -514,12 +514,14 @@ initialize_def (symbol_t *sym, type_t *type, expr_t *init, defspace_t *space,
|
|||
if ((is_array (type) || is_struct (type))
|
||||
&& init->type == ex_block && !init->e.block.result) {
|
||||
init_elements (sym->s.def, init);
|
||||
sym->s.def->initialized = 1;
|
||||
} else {
|
||||
if (!type_assignable (type, get_type (init))) {
|
||||
error (init, "type mismatch in initializer");
|
||||
return;
|
||||
}
|
||||
if (local_expr) {
|
||||
sym->s.def->initialized = 1;
|
||||
init = assign_expr (new_symbol_expr (sym), init);
|
||||
// fold_constants takes care of int/float conversions
|
||||
append_expr (local_expr, fold_constants (init));
|
||||
|
|
|
@ -219,6 +219,21 @@ flowvar_is_param (flowvar_t *var)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
flowvar_is_initialized (flowvar_t *var)
|
||||
{
|
||||
symbol_t *sym;
|
||||
def_t *def;
|
||||
|
||||
if (var->op->op_type != op_symbol)
|
||||
return 0;
|
||||
sym = var->op->o.symbol;
|
||||
if (sym->sy_type != sy_var)
|
||||
return 0;
|
||||
def = sym->s.def;
|
||||
return def->initialized;
|
||||
}
|
||||
|
||||
flowvar_t *
|
||||
flow_get_var (operand_t *op)
|
||||
{
|
||||
|
@ -467,7 +482,8 @@ flow_uninitialized (flowgraph_t *graph)
|
|||
tmp = set_new ();
|
||||
for (i = 0; i < func->num_vars; i++) {
|
||||
flowvar_t *var = func->vars[i];
|
||||
if (flowvar_is_global (var) || flowvar_is_param (var))
|
||||
if (flowvar_is_global (var) || flowvar_is_param (var)
|
||||
|| flowvar_is_initialized (var))
|
||||
set_add (tmp, i);
|
||||
}
|
||||
// first, calculate use and def for each block, and initialize the in and
|
||||
|
|
Loading…
Reference in a new issue