From afaef3619458e6e8c79c15944fa871ca6cc5a58a Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 3 Dec 2020 17:07:13 -0700 Subject: [PATCH] stage1: compile error for pointer arithmetic on ptr-to-array See #2018 --- src/stage1/ir.cpp | 2 +- test/compile_errors.zig | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/stage1/ir.cpp b/src/stage1/ir.cpp index 347014f257..f4cb8a9aed 100644 --- a/src/stage1/ir.cpp +++ b/src/stage1/ir.cpp @@ -17841,7 +17841,7 @@ static bool is_pointer_arithmetic_allowed(ZigType *lhs_type, IrBinOp op) { return false; switch (lhs_type->data.pointer.ptr_len) { case PtrLenSingle: - return lhs_type->data.pointer.child_type->id == ZigTypeIdArray; + return false; case PtrLenUnknown: case PtrLenC: return true; diff --git a/test/compile_errors.zig b/test/compile_errors.zig index 3757415d23..0c003d8db1 100644 --- a/test/compile_errors.zig +++ b/test/compile_errors.zig @@ -2,6 +2,16 @@ const tests = @import("tests.zig"); const std = @import("std"); pub fn addCases(cases: *tests.CompileErrorContext) void { + cases.add("pointer arithmetic on pointer-to-array", + \\export fn foo() void { + \\ var x: [10]u8 = undefined; + \\ var y = &x; + \\ var z = y + 1; + \\} + , &[_][]const u8{ + "tmp.zig:4:17: error: integer value 1 cannot be coerced to type '*[10]u8'", + }); + cases.add("@Type() union payload is undefined", \\const Foo = @Type(@import("std").builtin.TypeInfo{ \\ .Struct = undefined,