authorgravatar for quint@daenen.emailQuint Daenen <quint@daenen.email> 2026-05-04 20:34:55+02:00
committergravatar for alichraghi@noreply.codeberg.orgAli Cheraghi <alichraghi@noreply.codeberg.org> 2026-06-18 13:38:58+02:00
logecb627eb396b550812e709e7f4277df8c88ad062
treede06ae96e5a783b2c57a478a0dc5a5509d0c1e0e
parentcf950691cb967826c4df5bede1bb5c654fede129

fix(spirv): convert composite_integer unreachables to cg.todo

Eleven arithmetic/comparison/reduce paths panicked on big-int operands. Replace each with cg.todo so unsupported widths surface as compile errors instead of crashes.

1 files changed, 11 insertions(+), 11 deletions(-)

src/codegen/spirv/CodeGen.zig+11-11
......@@ -3342,7 +3342,7 @@ fn airDivFloor(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
33423342
33433343 const info = cg.arithmeticTypeInfo(lhs.ty);
33443344 switch (info.class) {
3345 .composite_integer => unreachable, // TODO
3345 .composite_integer => return cg.todo("div_floor for composite integers", .{}),
33463346 .integer, .strange_integer => {
33473347 switch (info.signedness) {
33483348 .unsigned => {
......@@ -3381,7 +3381,7 @@ fn airDivTrunc(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
33813381 const rhs = try cg.temporary(bin_op.rhs);
33823382 const info = cg.arithmeticTypeInfo(lhs.ty);
33833383 switch (info.class) {
3384 .composite_integer => unreachable, // TODO
3384 .composite_integer => return cg.todo("div_trunc for composite integers", .{}),
33853385 .integer, .strange_integer => switch (info.signedness) {
33863386 .unsigned => {
33873387 const result = try cg.buildBinary(.OpUDiv, lhs, rhs);
......@@ -3420,7 +3420,7 @@ fn airArithOp(
34203420 const rhs = try cg.temporary(bin_op.rhs);
34213421 const info = cg.arithmeticTypeInfo(lhs.ty);
34223422 const result = switch (info.class) {
3423 .composite_integer => unreachable, // TODO
3423 .composite_integer => return cg.todo("arith op for composite integers", .{}),
34243424 .integer, .strange_integer => res: {
34253425 const raw = switch (info.signedness) {
34263426 .signed => try cg.buildBinary(sop, lhs, rhs),
......@@ -3461,7 +3461,7 @@ fn abs(cg: *CodeGen, result_ty: Type, value: Temporary) !Temporary {
34613461 }
34623462 return try cg.normalize(abs_value, cg.arithmeticTypeInfo(result_ty));
34633463 },
3464 .composite_integer => unreachable, // TODO
3464 .composite_integer => return cg.todo("@abs for composite integers", .{}),
34653465 .bool => unreachable,
34663466 }
34673467}
......@@ -3489,7 +3489,7 @@ fn airAddSubOverflow(
34893489
34903490 const info = cg.arithmeticTypeInfo(lhs.ty);
34913491 switch (info.class) {
3492 .composite_integer => unreachable, // TODO
3492 .composite_integer => return cg.todo("add/sub-with-overflow for composite integers", .{}),
34933493 .strange_integer, .integer => {},
34943494 .float, .bool => unreachable,
34953495 }
......@@ -3539,7 +3539,7 @@ fn airMulOverflow(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
35393539
35403540 const info = cg.arithmeticTypeInfo(lhs.ty);
35413541 switch (info.class) {
3542 .composite_integer => unreachable, // TODO
3542 .composite_integer => return cg.todo("mul-with-overflow for composite integers", .{}),
35433543 .strange_integer, .integer => {},
35443544 .float, .bool => unreachable,
35453545 }
......@@ -3710,7 +3710,7 @@ fn airShlOverflow(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
37103710
37113711 const info = cg.arithmeticTypeInfo(base.ty);
37123712 switch (info.class) {
3713 .composite_integer => unreachable, // TODO
3713 .composite_integer => return cg.todo("shl-with-overflow for composite integers", .{}),
37143714 .integer, .strange_integer => {},
37153715 .float, .bool => unreachable,
37163716 }
......@@ -3761,7 +3761,7 @@ fn airClzCtz(cg: *CodeGen, inst: Air.Inst.Index, op: UnaryOp) !?Id {
37613761
37623762 const info = cg.arithmeticTypeInfo(operand.ty);
37633763 switch (info.class) {
3764 .composite_integer => unreachable, // TODO
3764 .composite_integer => return cg.todo("@clz/@ctz for composite integers", .{}),
37653765 .integer, .strange_integer => {},
37663766 .float, .bool => unreachable,
37673767 }
......@@ -3846,7 +3846,7 @@ fn airReduce(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
38463846 .Mul => .OpFMul,
38473847 else => unreachable,
38483848 },
3849 .composite_integer => unreachable, // TODO
3849 .composite_integer => return cg.todo("@reduce for composite integers", .{}),
38503850 };
38513851
38523852 const needs_normalize = info.class == .strange_integer and
......@@ -4181,7 +4181,7 @@ fn cmp(
41814181
41824182 const info = cg.arithmeticTypeInfo(scalar_ty);
41834183 const pred: Opcode = switch (info.class) {
4184 .composite_integer => unreachable, // TODO
4184 .composite_integer => return cg.todo("comparison for composite integers", .{}),
41854185 .float => switch (op) {
41864186 .eq => .OpFOrdEqual,
41874187 .neq => .OpFUnordNotEqual,
......@@ -4449,7 +4449,7 @@ fn airNot(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
44494449 const result = switch (info.class) {
44504450 .bool => try cg.buildUnary(.l_not, operand),
44514451 .float => unreachable,
4452 .composite_integer => unreachable, // TODO
4452 .composite_integer => return cg.todo("bitwise not for composite integers", .{}),
44534453 .strange_integer, .integer => blk: {
44544454 const complement = try cg.buildUnary(.bit_not, operand);
44554455 break :blk try cg.normalize(complement, info);