Ensure pointer values always have a type

The dags generator was creating a pointer value with no type which
caused print_statement to segfault.
This commit is contained in:
Bill Currie 2019-06-10 23:52:39 +09:00
parent ee1f5f9478
commit cc27949a34
2 changed files with 6 additions and 1 deletions

View file

@ -787,6 +787,7 @@ generate_moveps (dag_t *dag, sblock_t *block, dagnode_t *dagnode)
operand_t *operands[3] = {0, 0, 0};
statement_t *st;
operand_t *dst = 0;
type_t *type;
operands[0] = make_operand (dag, block, dagnode, 0);
operands[1] = make_operand (dag, block, dagnode, 1);
@ -794,7 +795,8 @@ generate_moveps (dag_t *dag, sblock_t *block, dagnode_t *dagnode)
var_iter = set_next (var_iter)) {
var = dag->labels[var_iter->element];
dst = var->op;
operands[2] = value_operand (new_pointer_val (0, 0, dst->o.def));
type = dst->o.def->type;
operands[2] = value_operand (new_pointer_val (0, type, dst->o.def));
st = build_statement ("<MOVEP>", operands, var->expr);
sblock_add_statement (block, st);
}

View file

@ -189,6 +189,9 @@ ex_value_t *
new_pointer_val (int pointer_val, type_t *type, def_t *def)
{
ex_value_t val;
if (!type) {
internal_error (0, "pointer value with no type");
}
memset (&val, 0, sizeof (val));
set_val_type (&val, pointer_type (type));
val.v.pointer.val = pointer_val;