diff --git a/src/ir.cpp b/src/ir.cpp index fe603dc2d9..369369aecf 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -5030,11 +5030,10 @@ static IrInstruction *ir_analyze_maybe_wrap(IrAnalyze *ira, IrInstruction *sourc static IrInstruction *ir_analyze_pointer_reinterpret(IrAnalyze *ira, IrInstruction *source_instr, IrInstruction *ptr, TypeTableEntry *wanted_type) { - assert(wanted_type->id == TypeTableEntryIdPointer); - - if (ptr->value.type->id != TypeTableEntryIdPointer) { - ir_add_error(ira, ptr, - buf_sprintf("expected pointer, found '%s'", buf_ptr(&ptr->value.type->name))); + if (ptr->value.type->id != TypeTableEntryIdPointer && + ptr->value.type->id != TypeTableEntryIdMaybe) + { + ir_add_error(ira, ptr, buf_sprintf("expected pointer, found '%s'", buf_ptr(&ptr->value.type->name))); return ira->codegen->invalid_instruction; } diff --git a/test/cases/misc.zig b/test/cases/misc.zig index 8712580dea..3040647988 100644 --- a/test/cases/misc.zig +++ b/test/cases/misc.zig @@ -271,6 +271,14 @@ fn compileTimeGlobalReinterpret() { assert(*d == 1234); } +fn explicitCastMaybePointers() { + @setFnTest(this); + + const a: ?&i32 = undefined; + const b: ?&f32 = (?&f32)(a); +} + + // TODO import from std.str pub fn memeql(a: []const u8, b: []const u8) -> bool { sliceEql(u8, a, b)