diff --git a/tools/qfcc/source/dags.c b/tools/qfcc/source/dags.c index 0f07edbbf..69a5100a8 100644 --- a/tools/qfcc/source/dags.c +++ b/tools/qfcc/source/dags.c @@ -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 ("", operands, var->expr); sblock_add_statement (block, st); } diff --git a/tools/qfcc/source/value.c b/tools/qfcc/source/value.c index bdaa9c6f3..29d6eabed 100644 --- a/tools/qfcc/source/value.c +++ b/tools/qfcc/source/value.c @@ -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;