From a3b3ac0ea482fc76684ee7d0a9b98306ebbd942c Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Thu, 1 Jun 2023 01:44:08 -0400 Subject: [PATCH] llvm: fix lowering of lazy values These really should not be making it to the backend, but that's a problem for another time. --- src/codegen/llvm.zig | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 9d96ea457f..a727b23fcc 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -3399,7 +3399,7 @@ pub const DeclGen = struct { const llvm_ptr_val = switch (ptr.addr) { .decl => |decl| try dg.lowerDeclRefValue(ptr_tv, decl), .mut_decl => |mut_decl| try dg.lowerDeclRefValue(ptr_tv, mut_decl.decl), - .int => |int| try dg.lowerIntAsPtr(mod.intern_pool.indexToKey(int)), + .int => |int| try dg.lowerIntAsPtr(int.toValue()), .eu_payload, .opt_payload, .elem, @@ -3800,15 +3800,15 @@ pub const DeclGen = struct { } } - fn lowerIntAsPtr(dg: *DeclGen, int_key: InternPool.Key) Error!*llvm.Value { - switch (int_key) { + fn lowerIntAsPtr(dg: *DeclGen, val: Value) Error!*llvm.Value { + switch (dg.module.intern_pool.indexToKey(val.toIntern())) { .undef => { const llvm_usize = try dg.lowerType(Type.usize); return llvm_usize.getUndef(); }, - .int => |int| { + .int => { var bigint_space: Value.BigIntSpace = undefined; - const bigint = int.storage.toBigInt(&bigint_space); + const bigint = val.toBigInt(&bigint_space, dg.module); const llvm_int = lowerBigInt(dg, Type.usize, bigint); return llvm_int.constIntToPtr(dg.context.pointerType(0)); }, @@ -3861,11 +3861,11 @@ pub const DeclGen = struct { const mod = dg.module; const target = mod.getTarget(); return switch (mod.intern_pool.indexToKey(ptr_val.toIntern())) { - .int => |int| dg.lowerIntAsPtr(.{ .int = int }), + .int => dg.lowerIntAsPtr(ptr_val), .ptr => |ptr| switch (ptr.addr) { .decl => |decl| dg.lowerParentPtrDecl(ptr_val, decl), .mut_decl => |mut_decl| dg.lowerParentPtrDecl(ptr_val, mut_decl.decl), - .int => |int| dg.lowerIntAsPtr(mod.intern_pool.indexToKey(int)), + .int => |int| dg.lowerIntAsPtr(int.toValue()), .eu_payload => |eu_ptr| { const parent_llvm_ptr = try dg.lowerParentPtr(eu_ptr.toValue(), true);