authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-06-01 19:48:36-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-06-10 20:47:58-07:00
log8299ddfe4ff506b45cfd58b2a6eb048d8be05b9e
tree856e6d939f9f4c4527377683813c0ecba081679e
parent9b48fc2833be409902f4d3256d2d921f4f924e0d

InternPool: fix more key lifetime issues

Reminder to look into deleting `get` and make keys less pointery and more long lived.

3 files changed, 9 insertions(+), 7 deletions(-)

src/Sema.zig+1-1
...@@ -16452,7 +16452,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai...@@ -16452,7 +16452,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1645216452
16453 const enum_field_vals = try sema.arena.alloc(InternPool.Index, enum_type.names.len);16453 const enum_field_vals = try sema.arena.alloc(InternPool.Index, enum_type.names.len);
16454 for (enum_field_vals, 0..) |*field_val, i| {16454 for (enum_field_vals, 0..) |*field_val, i| {
16455 const name_ip = enum_type.names[i];16455 const name_ip = mod.intern_pool.indexToKey(ty.toIntern()).enum_type.names[i];
16456 const name = mod.intern_pool.stringToSlice(name_ip);16456 const name = mod.intern_pool.stringToSlice(name_ip);
16457 const name_val = v: {16457 const name_val = v: {
16458 var anon_decl = try block.startAnonDecl();16458 var anon_decl = try block.startAnonDecl();
src/codegen/llvm.zig+6-5
...@@ -2331,14 +2331,15 @@ pub const Object = struct {...@@ -2331,14 +2331,15 @@ pub const Object = struct {
2331 try param_di_types.append(try o.lowerDebugType(ptr_ty, .full));2331 try param_di_types.append(try o.lowerDebugType(ptr_ty, .full));
2332 }2332 }
23332333
2334 for (mod.typeToFunc(ty).?.param_types) |param_ty| {2334 for (0..mod.typeToFunc(ty).?.param_types.len) |i| {
2335 if (!param_ty.toType().hasRuntimeBitsIgnoreComptime(mod)) continue;2335 const param_ty = mod.typeToFunc(ty).?.param_types[i].toType();
2336 if (!param_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
23362337
2337 if (isByRef(param_ty.toType(), mod)) {2338 if (isByRef(param_ty, mod)) {
2338 const ptr_ty = try mod.singleMutPtrType(param_ty.toType());2339 const ptr_ty = try mod.singleMutPtrType(param_ty);
2339 try param_di_types.append(try o.lowerDebugType(ptr_ty, .full));2340 try param_di_types.append(try o.lowerDebugType(ptr_ty, .full));
2340 } else {2341 } else {
2341 try param_di_types.append(try o.lowerDebugType(param_ty.toType(), .full));2342 try param_di_types.append(try o.lowerDebugType(param_ty, .full));
2342 }2343 }
2343 }2344 }
23442345
src/value.zig+2-1
...@@ -2119,7 +2119,8 @@ pub const Value = struct {...@@ -2119,7 +2119,8 @@ pub const Value = struct {
2119 if (try (try val.elemValue(mod, index)).anyUndef(mod)) break true;2119 if (try (try val.elemValue(mod, index)).anyUndef(mod)) break true;
2120 } else false,2120 } else false,
2121 },2121 },
2122 .aggregate => |aggregate| for (aggregate.storage.values()) |elem| {2122 .aggregate => |aggregate| for (0..aggregate.storage.values().len) |i| {
2123 const elem = mod.intern_pool.indexToKey(val.toIntern()).aggregate.storage.values()[i];
2123 if (try anyUndef(elem.toValue(), mod)) break true;2124 if (try anyUndef(elem.toValue(), mod)) break true;
2124 } else false,2125 } else false,
2125 else => false,2126 else => false,