Skip to content

Commit a28fbf3

Browse files
committed
Sema: fix error message for bad pointer arithmetic
Closes #14388
1 parent 1f475de commit a28fbf3

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

src/Sema.zig

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12800,7 +12800,7 @@ fn zirDiv(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
1280012800
const lhs_zig_ty_tag = try lhs_ty.zigTypeTagOrPoison();
1280112801
const rhs_zig_ty_tag = try rhs_ty.zigTypeTagOrPoison();
1280212802
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
12803-
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty, .div);
12803+
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty);
1280412804

1280512805
const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
1280612806
const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
@@ -12960,7 +12960,7 @@ fn zirDivExact(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1296012960
const lhs_zig_ty_tag = try lhs_ty.zigTypeTagOrPoison();
1296112961
const rhs_zig_ty_tag = try rhs_ty.zigTypeTagOrPoison();
1296212962
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
12963-
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty, .div_exact);
12963+
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty);
1296412964

1296512965
const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
1296612966
const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
@@ -13123,7 +13123,7 @@ fn zirDivFloor(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1312313123
const lhs_zig_ty_tag = try lhs_ty.zigTypeTagOrPoison();
1312413124
const rhs_zig_ty_tag = try rhs_ty.zigTypeTagOrPoison();
1312513125
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
13126-
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty, .div_floor);
13126+
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty);
1312713127

1312813128
const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
1312913129
const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
@@ -13239,7 +13239,7 @@ fn zirDivTrunc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1323913239
const lhs_zig_ty_tag = try lhs_ty.zigTypeTagOrPoison();
1324013240
const rhs_zig_ty_tag = try rhs_ty.zigTypeTagOrPoison();
1324113241
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
13242-
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty, .div_trunc);
13242+
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty);
1324313243

1324413244
const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
1324513245
const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
@@ -13482,7 +13482,7 @@ fn zirModRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
1348213482
const lhs_zig_ty_tag = try lhs_ty.zigTypeTagOrPoison();
1348313483
const rhs_zig_ty_tag = try rhs_ty.zigTypeTagOrPoison();
1348413484
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
13485-
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty, .mod_rem);
13485+
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty);
1348613486

1348713487
const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
1348813488
const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
@@ -13665,7 +13665,7 @@ fn zirMod(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
1366513665
const lhs_zig_ty_tag = try lhs_ty.zigTypeTagOrPoison();
1366613666
const rhs_zig_ty_tag = try rhs_ty.zigTypeTagOrPoison();
1366713667
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
13668-
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty, .mod);
13668+
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty);
1366913669

1367013670
const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
1367113671
const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
@@ -13767,7 +13767,7 @@ fn zirRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
1376713767
const lhs_zig_ty_tag = try lhs_ty.zigTypeTagOrPoison();
1376813768
const rhs_zig_ty_tag = try rhs_ty.zigTypeTagOrPoison();
1376913769
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
13770-
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty, .rem);
13770+
try sema.checkInvalidPtrArithmetic(block, src, lhs_ty);
1377113771

1377213772
const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
1377313773
const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
@@ -14107,12 +14107,7 @@ fn analyzeArithmetic(
1410714107
const air_tag: Air.Inst.Tag = switch (zir_tag) {
1410814108
.add => .ptr_add,
1410914109
.sub => .ptr_sub,
14110-
else => return sema.fail(
14111-
block,
14112-
src,
14113-
"invalid pointer arithmetic operand: '{s}''",
14114-
.{@tagName(zir_tag)},
14115-
),
14110+
else => return sema.fail(block, src, "invalid pointer arithmetic operator", .{}),
1411614111
};
1411714112
return sema.analyzePtrArithmetic(block, src, lhs, rhs, air_tag, lhs_src, rhs_src);
1411814113
},
@@ -20029,16 +20024,15 @@ fn checkInvalidPtrArithmetic(
2002920024
block: *Block,
2003020025
src: LazySrcLoc,
2003120026
ty: Type,
20032-
zir_tag: Zir.Inst.Tag,
2003320027
) CompileError!void {
2003420028
switch (try ty.zigTypeTagOrPoison()) {
2003520029
.Pointer => switch (ty.ptrSize()) {
2003620030
.One, .Slice => return,
2003720031
.Many, .C => return sema.fail(
2003820032
block,
2003920033
src,
20040-
"invalid pointer arithmetic operand: '{s}''",
20041-
.{@tagName(zir_tag)},
20034+
"invalid pointer arithmetic operator",
20035+
.{},
2004220036
),
2004320037
},
2004420038
else => return,

0 commit comments

Comments
 (0)