diff --git a/src/Sema.zig b/src/Sema.zig index 24bbdb0b0c..2355e8374d 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -7261,6 +7261,8 @@ fn zirOptionalPayload( if (operand_ty.ptrSize() != .C) { return sema.failWithExpectedOptionalType(block, src, operand_ty); } + // TODO https://github.com/ziglang/zig/issues/6597 + if (true) break :t operand_ty; const ptr_info = operand_ty.ptrInfo().data; break :t try Type.ptr(sema.arena, sema.mod, .{ .pointee_type = try ptr_info.pointee_type.copy(sema.arena), diff --git a/test/behavior/optional.zig b/test/behavior/optional.zig index c13a3b7e4f..28261daf1f 100644 --- a/test/behavior/optional.zig +++ b/test/behavior/optional.zig @@ -405,3 +405,10 @@ test "optional of noreturn used with orelse" { const val = NoReturn.testOrelse(); try expect(val == 123); } + +test "orelse on C pointer" { + // TODO https://github.com/ziglang/zig/issues/6597 + const foo: [*c]const u8 = "hey"; + const d = foo orelse @compileError("bad"); + try expectEqual([*c]const u8, @TypeOf(d)); +}