aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index ea87999454..211af9a758 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -22949,12 +22949,20 @@ static IrInstruction *ir_analyze_instruction_slice(IrAnalyze *ira, IrInstruction
if (parent_ptr == nullptr)
return ira->codegen->invalid_instruction;
- array_val = const_ptr_pointee(ira, ira->codegen, parent_ptr, instruction->base.source_node);
- if (array_val == nullptr)
- return ira->codegen->invalid_instruction;
- rel_end = child_array_type->data.array.len;
- abs_offset = 0;
+ if (parent_ptr->special == ConstValSpecialUndef) {
+ array_val = nullptr;
+ abs_offset = 0;
+ rel_end = SIZE_MAX;
+ ptr_is_undef = true;
+ } else {
+ array_val = const_ptr_pointee(ira, ira->codegen, parent_ptr, instruction->base.source_node);
+ if (array_val == nullptr)
+ return ira->codegen->invalid_instruction;
+
+ rel_end = child_array_type->data.array.len;
+ abs_offset = 0;
+ }
} else {
array_val = const_ptr_pointee(ira, ira->codegen, &ptr_ptr->value, instruction->base.source_node);
if (array_val == nullptr)