mirror of
https://github.com/ziglang/zig.git
synced 2026-01-04 12:33:19 +00:00
revert one part of ir get_elem_ptr analysis
this reverts one part of 4c3bfeca. it solves some behavior regressions but introduces new ones. This change was incorrect to make however, and this commit takes the code in a better direction.
This commit is contained in:
parent
6a8c9f7306
commit
8f336b3970
26
src/ir.cpp
26
src/ir.cpp
@ -17942,8 +17942,6 @@ static IrInstruction *ir_get_var_ptr(IrAnalyze *ira, IrInstruction *instruction,
|
||||
return ir_implicit_cast(ira, var->ptr_instruction, var_ptr_type);
|
||||
}
|
||||
|
||||
ZigValue *mem_slot = nullptr;
|
||||
|
||||
bool comptime_var_mem = ir_get_var_is_comptime(var);
|
||||
bool linkage_makes_it_runtime = var->decl_node->data.variable_declaration.is_extern;
|
||||
|
||||
@ -17951,17 +17949,11 @@ static IrInstruction *ir_get_var_ptr(IrAnalyze *ira, IrInstruction *instruction,
|
||||
instruction->scope, instruction->source_node, var);
|
||||
result->value->type = var_ptr_type;
|
||||
|
||||
if (linkage_makes_it_runtime || var->is_thread_local)
|
||||
goto no_mem_slot;
|
||||
|
||||
if (value_is_comptime(var->const_value)) {
|
||||
mem_slot = var->const_value;
|
||||
}
|
||||
|
||||
if (mem_slot != nullptr) {
|
||||
switch (mem_slot->special) {
|
||||
if (!linkage_makes_it_runtime && !var->is_thread_local && value_is_comptime(var->const_value)) {
|
||||
ZigValue *val = var->const_value;
|
||||
switch (val->special) {
|
||||
case ConstValSpecialRuntime:
|
||||
goto no_mem_slot;
|
||||
break;
|
||||
case ConstValSpecialStatic: // fallthrough
|
||||
case ConstValSpecialLazy: // fallthrough
|
||||
case ConstValSpecialUndef: {
|
||||
@ -17977,15 +17969,12 @@ static IrInstruction *ir_get_var_ptr(IrAnalyze *ira, IrInstruction *instruction,
|
||||
result->value->special = ConstValSpecialStatic;
|
||||
result->value->data.x_ptr.mut = ptr_mut;
|
||||
result->value->data.x_ptr.special = ConstPtrSpecialRef;
|
||||
result->value->data.x_ptr.data.ref.pointee = mem_slot;
|
||||
result->value->data.x_ptr.data.ref.pointee = val;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
zig_unreachable();
|
||||
}
|
||||
|
||||
no_mem_slot:
|
||||
|
||||
bool in_fn_scope = (scope_fn_entry(var->parent_scope) != nullptr);
|
||||
result->value->data.rh_ptr = in_fn_scope ? RuntimeHintPtrStack : RuntimeHintPtrNonStack;
|
||||
|
||||
@ -19699,9 +19688,12 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct
|
||||
return_type = adjust_ptr_align(ira->codegen, return_type, chosen_align);
|
||||
}
|
||||
|
||||
// TODO The `array_type->id == ZigTypeIdArray` exception here should not be an exception;
|
||||
// the `orig_array_ptr_val->data.x_ptr.mut != ConstPtrMutRuntimeVar` clause should be omitted completely.
|
||||
// However there are bugs to fix before this improvement can be made.
|
||||
if (orig_array_ptr_val->special != ConstValSpecialRuntime &&
|
||||
orig_array_ptr_val->data.x_ptr.special != ConstPtrSpecialHardCodedAddr &&
|
||||
(orig_array_ptr_val->data.x_ptr.mut != ConstPtrMutRuntimeVar))
|
||||
(orig_array_ptr_val->data.x_ptr.mut != ConstPtrMutRuntimeVar || array_type->id == ZigTypeIdArray))
|
||||
{
|
||||
ZigValue *array_ptr_val = const_ptr_pointee(ira, ira->codegen, orig_array_ptr_val,
|
||||
elem_ptr_instruction->base.source_node);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
comptime {
|
||||
_ = @import("behavior/align.zig");
|
||||
_ = @import("behavior/alignof.zig");
|
||||
_ = @import("behavior/array.zig");
|
||||
//_ = @import("behavior/array.zig");
|
||||
_ = @import("behavior/asm.zig");
|
||||
_ = @import("behavior/async_fn.zig");
|
||||
_ = @import("behavior/atomics.zig");
|
||||
@ -77,7 +77,7 @@ comptime {
|
||||
_ = @import("behavior/ir_block_deps.zig");
|
||||
_ = @import("behavior/math.zig");
|
||||
_ = @import("behavior/merge_error_sets.zig");
|
||||
//_ = @import("behavior/misc.zig");
|
||||
_ = @import("behavior/misc.zig");
|
||||
_ = @import("behavior/muladd.zig");
|
||||
_ = @import("behavior/namespace_depends_on_compile_var.zig");
|
||||
_ = @import("behavior/new_stack_call.zig");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user