authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-10-20 16:58:00+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-20 14:49:25-04:00
log771dafbabaaf4cda43d722dbc4bcb7d8464b576d
treea60c5871f4d13b544a313bfecb9a1db8a719bc27
parent6948d7fce7d39b97d34689d2ba297132255e3f54

Resolve lazy slice start/end values

Fixes #3489

1 files changed, 10 insertions(+), 5 deletions(-)

src/ir.cpp+10-5
......@@ -23084,17 +23084,22 @@ static IrInstruction *ir_analyze_instruction_slice(IrAnalyze *ira, IrInstruction
2308423084 zig_unreachable();
2308523085 }
2308623086
23087 uint64_t start_scalar = bigint_as_u64(&casted_start->value.data.x_bigint);
23087 ConstExprValue *start_val = ir_resolve_const(ira, casted_start, UndefBad);
23088 if (!start_val)
23089 return ira->codegen->invalid_instruction;
23090
23091 uint64_t start_scalar = bigint_as_u64(&start_val->data.x_bigint);
2308823092 if (!ptr_is_undef && start_scalar > rel_end) {
2308923093 ir_add_error(ira, &instruction->base, buf_sprintf("out of bounds slice"));
2309023094 return ira->codegen->invalid_instruction;
2309123095 }
2309223096
23093 uint64_t end_scalar;
23097 uint64_t end_scalar = rel_end;
2309423098 if (end) {
23095 end_scalar = bigint_as_u64(&end->value.data.x_bigint);
23096 } else {
23097 end_scalar = rel_end;
23099 ConstExprValue *end_val = ir_resolve_const(ira, end, UndefBad);
23100 if (!end_val)
23101 return ira->codegen->invalid_instruction;
23102 end_scalar = bigint_as_u64(&end_val->data.x_bigint);
2309823103 }
2309923104 if (!ptr_is_undef) {
2310023105 if (end_scalar > rel_end) {