diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Sema.zig | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 318021fed6..f084020f95 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -9891,6 +9891,17 @@ fn zirIntFromPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! if (!ptr_ty.isPtrAtRuntime(mod)) { return sema.fail(block, ptr_src, "expected pointer, found '{}'", .{ptr_ty.fmt(mod)}); } + const pointee_ty = ptr_ty.childType(mod); + if (try sema.typeRequiresComptime(ptr_ty)) { + const msg = msg: { + const msg = try sema.errMsg(block, ptr_src, "comptime-only type '{}' has no pointer address", .{pointee_ty.fmt(mod)}); + errdefer msg.destroy(sema.gpa); + const src_decl = mod.declPtr(block.src_decl); + try sema.explainWhyTypeIsComptime(msg, ptr_src.toSrcLoc(src_decl, mod), pointee_ty); + break :msg msg; + }; + return sema.failWithOwnedErrorMsg(block, msg); + } if (try sema.resolveMaybeUndefValIntable(operand)) |operand_val| ct: { if (!is_vector) { return Air.internedToRef((try mod.intValue( |
