aboutsummaryrefslogtreecommitdiff
path: root/test/cases/compile_errors
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-09-20 22:02:36 -0400
committerGitHub <noreply@github.com>2022-09-20 22:02:36 -0400
commit62ecc154d9ad065aee57d81afd3a478dd8360fb7 (patch)
tree52f17b58d87a2ef83f2a1607f0aecbee31c33661 /test/cases/compile_errors
parent521c753fda3cd5ebb79752287ef3c87d84f8d5c3 (diff)
parenteef653904916dc19540458199366807f8837bf98 (diff)
downloadzig-62ecc154d9ad065aee57d81afd3a478dd8360fb7.tar.gz
zig-62ecc154d9ad065aee57d81afd3a478dd8360fb7.zip
Merge pull request #12904 from Vexu/ptrcast
stage2: pointer casting fixes and improvements
Diffstat (limited to 'test/cases/compile_errors')
-rw-r--r--test/cases/compile_errors/alignOf_bad_type.zig9
-rw-r--r--test/cases/compile_errors/attempted_implicit_cast_from_const_T_to_sliceT.zig1
-rw-r--r--test/cases/compile_errors/implicit_cast_between_C_pointer_and_Zig_pointer-bad_const-align-child.zig47
-rw-r--r--test/cases/compile_errors/implicit_cast_const_array_to_mutable_slice.zig26
-rw-r--r--test/cases/compile_errors/implicitly_increasing_slice_alignment.zig (renamed from test/cases/compile_errors/stage1/obj/implicitly_increasing_slice_alignment.zig)7
-rw-r--r--test/cases/compile_errors/increase_pointer_alignment_in_ptrCast.zig (renamed from test/cases/compile_errors/stage1/obj/increase_pointer_alignment_in_ptrCast.zig)8
-rw-r--r--test/cases/compile_errors/issue_5221_invalid_struct_init_type_referenced_by_typeInfo_and_passed_into_function.zig (renamed from test/cases/compile_errors/stage1/obj/issue_5221_invalid_struct_init_type_referenced_by_typeInfo_and_passed_into_function.zig)6
-rw-r--r--test/cases/compile_errors/load_too_many_bytes_from_comptime_reinterpreted_pointer.zig2
-rw-r--r--test/cases/compile_errors/peer_cast_then_implicit_cast_const_pointer_to_mutable_C_pointer.zig11
-rw-r--r--test/cases/compile_errors/pointer_attributes_checked_when_coercing_pointer_to_anon_literal.zig24
-rw-r--r--test/cases/compile_errors/ptrCast_discards_const_qualifier.zig (renamed from test/cases/compile_errors/stage1/obj/ptrCast_discards_const_qualifier.zig)4
-rw-r--r--test/cases/compile_errors/reading_past_end_of_pointer_casted_array.zig2
-rw-r--r--test/cases/compile_errors/slice_cannot_have_its_bytes_reinterpreted.zig2
-rw-r--r--test/cases/compile_errors/stage1/obj/implicit_cast_between_C_pointer_and_Zig_pointer-bad_const-align-child.zig42
-rw-r--r--test/cases/compile_errors/stage1/obj/implicit_cast_const_array_to_mutable_slice.zig12
-rw-r--r--test/cases/compile_errors/stage1/obj/peer_cast_then_implicit_cast_const_pointer_to_mutable_C_pointer.zig11
-rw-r--r--test/cases/compile_errors/stage1/obj/pointer_attributes_checked_when_coercing_pointer_to_anon_literal.zig24
17 files changed, 133 insertions, 105 deletions
diff --git a/test/cases/compile_errors/alignOf_bad_type.zig b/test/cases/compile_errors/alignOf_bad_type.zig
new file mode 100644
index 0000000000..5408c21314
--- /dev/null
+++ b/test/cases/compile_errors/alignOf_bad_type.zig
@@ -0,0 +1,9 @@
+export fn entry() usize {
+ return @alignOf(noreturn);
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :2:21: error: no align available for type 'noreturn'
diff --git a/test/cases/compile_errors/attempted_implicit_cast_from_const_T_to_sliceT.zig b/test/cases/compile_errors/attempted_implicit_cast_from_const_T_to_sliceT.zig
index 0634b4696f..ad3b0a7254 100644
--- a/test/cases/compile_errors/attempted_implicit_cast_from_const_T_to_sliceT.zig
+++ b/test/cases/compile_errors/attempted_implicit_cast_from_const_T_to_sliceT.zig
@@ -9,3 +9,4 @@ export fn entry() void {
// target=native
//
// :3:22: error: expected type '[]u32', found '*const u32'
+// :3:22: note: cast discards const qualifier
diff --git a/test/cases/compile_errors/implicit_cast_between_C_pointer_and_Zig_pointer-bad_const-align-child.zig b/test/cases/compile_errors/implicit_cast_between_C_pointer_and_Zig_pointer-bad_const-align-child.zig
new file mode 100644
index 0000000000..78261f182f
--- /dev/null
+++ b/test/cases/compile_errors/implicit_cast_between_C_pointer_and_Zig_pointer-bad_const-align-child.zig
@@ -0,0 +1,47 @@
+export fn a() void {
+ var x: [*c]u8 = undefined;
+ var y: *align(4) u8 = x;
+ _ = y;
+}
+export fn b() void {
+ var x: [*c]const u8 = undefined;
+ var y: *u8 = x;
+ _ = y;
+}
+export fn c() void {
+ var x: [*c]u8 = undefined;
+ var y: *u32 = x;
+ _ = y;
+}
+export fn d() void {
+ var y: *align(1) u32 = undefined;
+ var x: [*c]u32 = y;
+ _ = x;
+}
+export fn e() void {
+ var y: *const u8 = undefined;
+ var x: [*c]u8 = y;
+ _ = x;
+}
+export fn f() void {
+ var y: *u8 = undefined;
+ var x: [*c]u32 = y;
+ _ = x;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :3:27: error: expected type '*align(4) u8', found '[*c]u8'
+// :3:27: note: pointer alignment '1' cannot cast into pointer alignment '4'
+// :8:18: error: expected type '*u8', found '[*c]const u8'
+// :8:18: note: cast discards const qualifier
+// :13:19: error: expected type '*u32', found '[*c]u8'
+// :13:19: note: pointer type child 'u8' cannot cast into pointer type child 'u32'
+// :18:22: error: expected type '[*c]u32', found '*align(1) u32'
+// :18:22: note: pointer alignment '1' cannot cast into pointer alignment '4'
+// :23:21: error: expected type '[*c]u8', found '*const u8'
+// :23:21: note: cast discards const qualifier
+// :28:22: error: expected type '[*c]u32', found '*u8'
+// :28:22: note: pointer type child 'u8' cannot cast into pointer type child 'u32'
diff --git a/test/cases/compile_errors/implicit_cast_const_array_to_mutable_slice.zig b/test/cases/compile_errors/implicit_cast_const_array_to_mutable_slice.zig
new file mode 100644
index 0000000000..2a80b9ffbc
--- /dev/null
+++ b/test/cases/compile_errors/implicit_cast_const_array_to_mutable_slice.zig
@@ -0,0 +1,26 @@
+export fn entry() void {
+ const buffer: [1]u8 = [_]u8{8};
+ const sliceA: []u8 = &buffer;
+ _ = sliceA;
+}
+export fn entry1() void {
+ const str: *const [0:0]u8 = "";
+ const slice: [:0]u8 = str;
+ _ = slice;
+}
+export fn entry2() void {
+ const str: *const [0:0]u8 = "";
+ const many: [*]u8 = str;
+ _ = many;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :3:26: error: expected type '[]u8', found '*const [1]u8'
+// :3:26: note: cast discards const qualifier
+// :8:27: error: expected type '[:0]u8', found '*const [0:0]u8'
+// :8:27: note: cast discards const qualifier
+// :13:25: error: expected type '[*]u8', found '*const [0:0]u8'
+// :13:25: note: cast discards const qualifier
diff --git a/test/cases/compile_errors/stage1/obj/implicitly_increasing_slice_alignment.zig b/test/cases/compile_errors/implicitly_increasing_slice_alignment.zig
index 2e5c201b5d..84ec6464f4 100644
--- a/test/cases/compile_errors/stage1/obj/implicitly_increasing_slice_alignment.zig
+++ b/test/cases/compile_errors/implicitly_increasing_slice_alignment.zig
@@ -14,9 +14,8 @@ fn bar(x: []u32) void {
}
// error
-// backend=stage1
+// backend=stage2
// target=native
//
-// tmp.zig:9:26: error: cast increases pointer alignment
-// tmp.zig:9:26: note: '*align(1) u32' has alignment 1
-// tmp.zig:9:26: note: '*[1]u32' has alignment 4
+// :9:22: error: expected type '*[1]u32', found '*align(1) u32'
+// :9:22: note: pointer alignment '1' cannot cast into pointer alignment '4'
diff --git a/test/cases/compile_errors/stage1/obj/increase_pointer_alignment_in_ptrCast.zig b/test/cases/compile_errors/increase_pointer_alignment_in_ptrCast.zig
index f3f67ca4c6..9cc5ed3a42 100644
--- a/test/cases/compile_errors/stage1/obj/increase_pointer_alignment_in_ptrCast.zig
+++ b/test/cases/compile_errors/increase_pointer_alignment_in_ptrCast.zig
@@ -5,9 +5,9 @@ export fn entry() u32 {
}
// error
-// backend=stage1
+// backend=stage2
// target=native
//
-// tmp.zig:3:17: error: cast increases pointer alignment
-// tmp.zig:3:38: note: '*u8' has alignment 1
-// tmp.zig:3:26: note: '*u32' has alignment 4
+// :3:17: error: cast increases pointer alignment
+// :3:32: note: '*u8' has alignment '1'
+// :3:26: note: '*u32' has alignment '4'
diff --git a/test/cases/compile_errors/stage1/obj/issue_5221_invalid_struct_init_type_referenced_by_typeInfo_and_passed_into_function.zig b/test/cases/compile_errors/issue_5221_invalid_struct_init_type_referenced_by_typeInfo_and_passed_into_function.zig
index a622ceb44e..abcccb659e 100644
--- a/test/cases/compile_errors/stage1/obj/issue_5221_invalid_struct_init_type_referenced_by_typeInfo_and_passed_into_function.zig
+++ b/test/cases/compile_errors/issue_5221_invalid_struct_init_type_referenced_by_typeInfo_and_passed_into_function.zig
@@ -9,8 +9,8 @@ export fn foo() void {
}
// error
-// backend=stage1
+// backend=stage2
// target=native
//
-// :5:28: error: cannot cast pointer to array literal to slice type '[]u8'
-// :5:28: note: cast discards const qualifier
+// :4:22: error: expected type '[]u8', found '*const [3:0]u8'
+// :4:22: note: cast discards const qualifier
diff --git a/test/cases/compile_errors/load_too_many_bytes_from_comptime_reinterpreted_pointer.zig b/test/cases/compile_errors/load_too_many_bytes_from_comptime_reinterpreted_pointer.zig
index a86fbc0127..baeb3e8c82 100644
--- a/test/cases/compile_errors/load_too_many_bytes_from_comptime_reinterpreted_pointer.zig
+++ b/test/cases/compile_errors/load_too_many_bytes_from_comptime_reinterpreted_pointer.zig
@@ -1,5 +1,5 @@
export fn entry() void {
- const float: f32 = 5.99999999999994648725e-01;
+ const float: f32 align(@alignOf(i64)) = 5.99999999999994648725e-01;
const float_ptr = &float;
const int_ptr = @ptrCast(*const i64, float_ptr);
const int_val = int_ptr.*;
diff --git a/test/cases/compile_errors/peer_cast_then_implicit_cast_const_pointer_to_mutable_C_pointer.zig b/test/cases/compile_errors/peer_cast_then_implicit_cast_const_pointer_to_mutable_C_pointer.zig
new file mode 100644
index 0000000000..fd01927889
--- /dev/null
+++ b/test/cases/compile_errors/peer_cast_then_implicit_cast_const_pointer_to_mutable_C_pointer.zig
@@ -0,0 +1,11 @@
+export fn func() void {
+ var strValue: [*c]u8 = undefined;
+ strValue = strValue orelse "";
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :3:32: error: expected type '[*c]u8', found '*const [0:0]u8'
+// :3:32: note: cast discards const qualifier
diff --git a/test/cases/compile_errors/pointer_attributes_checked_when_coercing_pointer_to_anon_literal.zig b/test/cases/compile_errors/pointer_attributes_checked_when_coercing_pointer_to_anon_literal.zig
new file mode 100644
index 0000000000..c0a0b06af0
--- /dev/null
+++ b/test/cases/compile_errors/pointer_attributes_checked_when_coercing_pointer_to_anon_literal.zig
@@ -0,0 +1,24 @@
+comptime {
+ const c: [][]const u8 = &.{ "hello", "world" };
+ _ = c;
+}
+comptime {
+ const c: *[2][]const u8 = &.{ "hello", "world" };
+ _ = c;
+}
+const S = struct { a: u8 = 1, b: u32 = 2 };
+comptime {
+ const c: *S = &.{ .a = 2 };
+ _ = c;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :2:29: error: expected type '[][]const u8', found '*const tuple{comptime *const [5:0]u8 = "hello", comptime *const [5:0]u8 = "world"}'
+// :2:29: note: cast discards const qualifier
+// :6:31: error: expected type '*[2][]const u8', found '*const tuple{comptime *const [5:0]u8 = "hello", comptime *const [5:0]u8 = "world"}'
+// :6:31: note: cast discards const qualifier
+// :11:19: error: expected type '*tmp.S', found '*const struct{comptime a: comptime_int = 2}'
+// :11:19: note: cast discards const qualifier
diff --git a/test/cases/compile_errors/stage1/obj/ptrCast_discards_const_qualifier.zig b/test/cases/compile_errors/ptrCast_discards_const_qualifier.zig
index 1a90ff73f8..a2fea4ff11 100644
--- a/test/cases/compile_errors/stage1/obj/ptrCast_discards_const_qualifier.zig
+++ b/test/cases/compile_errors/ptrCast_discards_const_qualifier.zig
@@ -5,7 +5,7 @@ export fn entry() void {
}
// error
-// backend=stage1
+// backend=stage2
// target=native
//
-// tmp.zig:3:15: error: cast discards const qualifier
+// :3:15: error: cast discards const qualifier
diff --git a/test/cases/compile_errors/reading_past_end_of_pointer_casted_array.zig b/test/cases/compile_errors/reading_past_end_of_pointer_casted_array.zig
index 906b292753..d3d9b03ff5 100644
--- a/test/cases/compile_errors/reading_past_end_of_pointer_casted_array.zig
+++ b/test/cases/compile_errors/reading_past_end_of_pointer_casted_array.zig
@@ -1,7 +1,7 @@
comptime {
const array: [4]u8 = "aoeu".*;
const sub_array = array[1..];
- const int_ptr = @ptrCast(*const u24, sub_array);
+ const int_ptr = @ptrCast(*const u24, @alignCast(@alignOf(u24), sub_array));
const deref = int_ptr.*;
_ = deref;
}
diff --git a/test/cases/compile_errors/slice_cannot_have_its_bytes_reinterpreted.zig b/test/cases/compile_errors/slice_cannot_have_its_bytes_reinterpreted.zig
index 2280345e15..5fab9c90a9 100644
--- a/test/cases/compile_errors/slice_cannot_have_its_bytes_reinterpreted.zig
+++ b/test/cases/compile_errors/slice_cannot_have_its_bytes_reinterpreted.zig
@@ -1,5 +1,5 @@
export fn foo() void {
- const bytes = [1]u8{ 0xfa } ** 16;
+ const bytes align(@alignOf([]const u8)) = [1]u8{0xfa} ** 16;
var value = @ptrCast(*const []const u8, &bytes).*;
_ = value;
}
diff --git a/test/cases/compile_errors/stage1/obj/implicit_cast_between_C_pointer_and_Zig_pointer-bad_const-align-child.zig b/test/cases/compile_errors/stage1/obj/implicit_cast_between_C_pointer_and_Zig_pointer-bad_const-align-child.zig
deleted file mode 100644
index 6ff155b591..0000000000
--- a/test/cases/compile_errors/stage1/obj/implicit_cast_between_C_pointer_and_Zig_pointer-bad_const-align-child.zig
+++ /dev/null
@@ -1,42 +0,0 @@
-export fn a() void {
- var x: [*c]u8 = undefined;
- var y: *align(4) u8 = x;
- _ = y;
-}
-export fn b() void {
- var x: [*c]const u8 = undefined;
- var y: *u8 = x;
- _ = y;
-}
-export fn c() void {
- var x: [*c]u8 = undefined;
- var y: *u32 = x;
- _ = y;
-}
-export fn d() void {
- var y: *align(1) u32 = undefined;
- var x: [*c]u32 = y;
- _ = x;
-}
-export fn e() void {
- var y: *const u8 = undefined;
- var x: [*c]u8 = y;
- _ = x;
-}
-export fn f() void {
- var y: *u8 = undefined;
- var x: [*c]u32 = y;
- _ = x;
-}
-
-// error
-// backend=stage1
-// target=native
-//
-// tmp.zig:3:27: error: cast increases pointer alignment
-// tmp.zig:8:18: error: cast discards const qualifier
-// tmp.zig:13:19: error: expected type '*u32', found '[*c]u8'
-// tmp.zig:13:19: note: pointer type child 'u8' cannot cast into pointer type child 'u32'
-// tmp.zig:18:22: error: cast increases pointer alignment
-// tmp.zig:23:21: error: cast discards const qualifier
-// tmp.zig:28:22: error: expected type '[*c]u32', found '*u8'
diff --git a/test/cases/compile_errors/stage1/obj/implicit_cast_const_array_to_mutable_slice.zig b/test/cases/compile_errors/stage1/obj/implicit_cast_const_array_to_mutable_slice.zig
deleted file mode 100644
index 3f22cbed6b..0000000000
--- a/test/cases/compile_errors/stage1/obj/implicit_cast_const_array_to_mutable_slice.zig
+++ /dev/null
@@ -1,12 +0,0 @@
-export fn entry() void {
- const buffer: [1]u8 = [_]u8{8};
- const sliceA: []u8 = &buffer;
- _ = sliceA;
-}
-
-// error
-// backend=stage1
-// target=native
-//
-// tmp.zig:3:27: error: cannot cast pointer to array literal to slice type '[]u8'
-// tmp.zig:3:27: note: cast discards const qualifier
diff --git a/test/cases/compile_errors/stage1/obj/peer_cast_then_implicit_cast_const_pointer_to_mutable_C_pointer.zig b/test/cases/compile_errors/stage1/obj/peer_cast_then_implicit_cast_const_pointer_to_mutable_C_pointer.zig
deleted file mode 100644
index 7d18e760c3..0000000000
--- a/test/cases/compile_errors/stage1/obj/peer_cast_then_implicit_cast_const_pointer_to_mutable_C_pointer.zig
+++ /dev/null
@@ -1,11 +0,0 @@
-export fn func() void {
- var strValue: [*c]u8 = undefined;
- strValue = strValue orelse "";
-}
-
-// error
-// backend=stage1
-// target=native
-//
-// tmp.zig:3:32: error: expected type '[*c]u8', found '*const [0:0]u8'
-// tmp.zig:3:32: note: cast discards const qualifier
diff --git a/test/cases/compile_errors/stage1/obj/pointer_attributes_checked_when_coercing_pointer_to_anon_literal.zig b/test/cases/compile_errors/stage1/obj/pointer_attributes_checked_when_coercing_pointer_to_anon_literal.zig
deleted file mode 100644
index 8456c8afcb..0000000000
--- a/test/cases/compile_errors/stage1/obj/pointer_attributes_checked_when_coercing_pointer_to_anon_literal.zig
+++ /dev/null
@@ -1,24 +0,0 @@
-comptime {
- const c: [][]const u8 = &.{"hello", "world" };
- _ = c;
-}
-comptime {
- const c: *[2][]const u8 = &.{"hello", "world" };
- _ = c;
-}
-const S = struct {a: u8 = 1, b: u32 = 2};
-comptime {
- const c: *S = &.{};
- _ = c;
-}
-
-// error
-// backend=stage1
-// target=native
-//
-// tmp.zig:2:31: error: cannot cast pointer to array literal to slice type '[][]const u8'
-// tmp.zig:2:31: note: cast discards const qualifier
-// tmp.zig:6:33: error: cannot cast pointer to array literal to '*[2][]const u8'
-// tmp.zig:6:33: note: cast discards const qualifier
-// tmp.zig:11:21: error: expected type '*S', found '*const struct:11:21'
-// tmp.zig:11:21: note: cast discards const qualifier