From 8299ddfe4ff506b45cfd58b2a6eb048d8be05b9e Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Thu, 1 Jun 2023 19:48:36 -0400 Subject: [PATCH] InternPool: fix more key lifetime issues Reminder to look into deleting `get` and make keys less pointery and more long lived. --- src/Sema.zig | 2 +- src/codegen/llvm.zig | 11 ++++++----- src/value.zig | 3 ++- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index cecf59f2c3..385ea7e975 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -16452,7 +16452,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai const enum_field_vals = try sema.arena.alloc(InternPool.Index, enum_type.names.len); for (enum_field_vals, 0..) |*field_val, i| { - const name_ip = enum_type.names[i]; + const name_ip = mod.intern_pool.indexToKey(ty.toIntern()).enum_type.names[i]; const name = mod.intern_pool.stringToSlice(name_ip); const name_val = v: { var anon_decl = try block.startAnonDecl(); diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index a727b23fcc..be6ca714a6 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -2331,14 +2331,15 @@ pub const Object = struct { try param_di_types.append(try o.lowerDebugType(ptr_ty, .full)); } - for (mod.typeToFunc(ty).?.param_types) |param_ty| { - if (!param_ty.toType().hasRuntimeBitsIgnoreComptime(mod)) continue; + for (0..mod.typeToFunc(ty).?.param_types.len) |i| { + const param_ty = mod.typeToFunc(ty).?.param_types[i].toType(); + if (!param_ty.hasRuntimeBitsIgnoreComptime(mod)) continue; - if (isByRef(param_ty.toType(), mod)) { - const ptr_ty = try mod.singleMutPtrType(param_ty.toType()); + if (isByRef(param_ty, mod)) { + const ptr_ty = try mod.singleMutPtrType(param_ty); try param_di_types.append(try o.lowerDebugType(ptr_ty, .full)); } else { - try param_di_types.append(try o.lowerDebugType(param_ty.toType(), .full)); + try param_di_types.append(try o.lowerDebugType(param_ty, .full)); } } diff --git a/src/value.zig b/src/value.zig index c7a2a54458..8b68dd8b55 100644 --- a/src/value.zig +++ b/src/value.zig @@ -2119,7 +2119,8 @@ pub const Value = struct { if (try (try val.elemValue(mod, index)).anyUndef(mod)) break true; } else false, }, - .aggregate => |aggregate| for (aggregate.storage.values()) |elem| { + .aggregate => |aggregate| for (0..aggregate.storage.values().len) |i| { + const elem = mod.intern_pool.indexToKey(val.toIntern()).aggregate.storage.values()[i]; if (try anyUndef(elem.toValue(), mod)) break true; } else false, else => false,