| ... | @@ -6857,4 +6857,299 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { | ... | @@ -6857,4 +6857,299 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 6857 | "tmp.zig:7:32: error: destination type 'u16' has size 2 but source type '[]u8' has size 16", | 6857 | "tmp.zig:7:32: error: destination type 'u16' has size 2 but source type '[]u8' has size 16", |
| 6858 | "tmp.zig:7:37: note: referenced here", | 6858 | "tmp.zig:7:37: note: referenced here", |
| 6859 | }); | 6859 | }); |
| | 6860 | |
| | 6861 | cases.add("comptime slice-sentinel is out of bounds (unterminated)", |
| | 6862 | \\export fn foo_array() void { |
| | 6863 | \\ comptime { |
| | 6864 | \\ var target = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6865 | \\ const slice = target[0..14 :0]; |
| | 6866 | \\ } |
| | 6867 | \\} |
| | 6868 | \\export fn foo_ptr_array() void { |
| | 6869 | \\ comptime { |
| | 6870 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6871 | \\ var target = &buf; |
| | 6872 | \\ const slice = target[0..14 :0]; |
| | 6873 | \\ } |
| | 6874 | \\} |
| | 6875 | \\export fn foo_vector_ConstPtrSpecialBaseArray() void { |
| | 6876 | \\ comptime { |
| | 6877 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6878 | \\ var target: [*]u8 = &buf; |
| | 6879 | \\ const slice = target[0..14 :0]; |
| | 6880 | \\ } |
| | 6881 | \\} |
| | 6882 | \\export fn foo_vector_ConstPtrSpecialRef() void { |
| | 6883 | \\ comptime { |
| | 6884 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6885 | \\ var target: [*]u8 = @ptrCast([*]u8, &buf); |
| | 6886 | \\ const slice = target[0..14 :0]; |
| | 6887 | \\ } |
| | 6888 | \\} |
| | 6889 | \\export fn foo_cvector_ConstPtrSpecialBaseArray() void { |
| | 6890 | \\ comptime { |
| | 6891 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6892 | \\ var target: [*c]u8 = &buf; |
| | 6893 | \\ const slice = target[0..14 :0]; |
| | 6894 | \\ } |
| | 6895 | \\} |
| | 6896 | \\export fn foo_cvector_ConstPtrSpecialRef() void { |
| | 6897 | \\ comptime { |
| | 6898 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6899 | \\ var target: [*c]u8 = @ptrCast([*c]u8, &buf); |
| | 6900 | \\ const slice = target[0..14 :0]; |
| | 6901 | \\ } |
| | 6902 | \\} |
| | 6903 | \\export fn foo_slice() void { |
| | 6904 | \\ comptime { |
| | 6905 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6906 | \\ var target: []u8 = &buf; |
| | 6907 | \\ const slice = target[0..14 :0]; |
| | 6908 | \\ } |
| | 6909 | \\} |
| | 6910 | , &[_][]const u8{ |
| | 6911 | ":4:29: error: slice-sentinel is out of bounds", |
| | 6912 | ":11:29: error: slice-sentinel is out of bounds", |
| | 6913 | ":18:29: error: slice-sentinel is out of bounds", |
| | 6914 | ":25:29: error: slice-sentinel is out of bounds", |
| | 6915 | ":32:29: error: slice-sentinel is out of bounds", |
| | 6916 | ":39:29: error: slice-sentinel is out of bounds", |
| | 6917 | ":46:29: error: slice-sentinel is out of bounds", |
| | 6918 | }); |
| | 6919 | |
| | 6920 | cases.add("comptime slice-sentinel is out of bounds (terminated)", |
| | 6921 | \\export fn foo_array() void { |
| | 6922 | \\ comptime { |
| | 6923 | \\ var target = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6924 | \\ const slice = target[0..15 :1]; |
| | 6925 | \\ } |
| | 6926 | \\} |
| | 6927 | \\export fn foo_ptr_array() void { |
| | 6928 | \\ comptime { |
| | 6929 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6930 | \\ var target = &buf; |
| | 6931 | \\ const slice = target[0..15 :0]; |
| | 6932 | \\ } |
| | 6933 | \\} |
| | 6934 | \\export fn foo_vector_ConstPtrSpecialBaseArray() void { |
| | 6935 | \\ comptime { |
| | 6936 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6937 | \\ var target: [*]u8 = &buf; |
| | 6938 | \\ const slice = target[0..15 :0]; |
| | 6939 | \\ } |
| | 6940 | \\} |
| | 6941 | \\export fn foo_vector_ConstPtrSpecialRef() void { |
| | 6942 | \\ comptime { |
| | 6943 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6944 | \\ var target: [*]u8 = @ptrCast([*]u8, &buf); |
| | 6945 | \\ const slice = target[0..15 :0]; |
| | 6946 | \\ } |
| | 6947 | \\} |
| | 6948 | \\export fn foo_cvector_ConstPtrSpecialBaseArray() void { |
| | 6949 | \\ comptime { |
| | 6950 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6951 | \\ var target: [*c]u8 = &buf; |
| | 6952 | \\ const slice = target[0..15 :0]; |
| | 6953 | \\ } |
| | 6954 | \\} |
| | 6955 | \\export fn foo_cvector_ConstPtrSpecialRef() void { |
| | 6956 | \\ comptime { |
| | 6957 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6958 | \\ var target: [*c]u8 = @ptrCast([*c]u8, &buf); |
| | 6959 | \\ const slice = target[0..15 :0]; |
| | 6960 | \\ } |
| | 6961 | \\} |
| | 6962 | \\export fn foo_slice() void { |
| | 6963 | \\ comptime { |
| | 6964 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6965 | \\ var target: []u8 = &buf; |
| | 6966 | \\ const slice = target[0..15 :0]; |
| | 6967 | \\ } |
| | 6968 | \\} |
| | 6969 | , &[_][]const u8{ |
| | 6970 | ":4:29: error: out of bounds slice", |
| | 6971 | ":11:29: error: out of bounds slice", |
| | 6972 | ":18:29: error: out of bounds slice", |
| | 6973 | ":25:29: error: out of bounds slice", |
| | 6974 | ":32:29: error: out of bounds slice", |
| | 6975 | ":39:29: error: out of bounds slice", |
| | 6976 | ":46:29: error: out of bounds slice", |
| | 6977 | }); |
| | 6978 | |
| | 6979 | cases.add("comptime slice-sentinel does not match memory at target index (unterminated)", |
| | 6980 | \\export fn foo_array() void { |
| | 6981 | \\ comptime { |
| | 6982 | \\ var target = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6983 | \\ const slice = target[0..3 :0]; |
| | 6984 | \\ } |
| | 6985 | \\} |
| | 6986 | \\export fn foo_ptr_array() void { |
| | 6987 | \\ comptime { |
| | 6988 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6989 | \\ var target = &buf; |
| | 6990 | \\ const slice = target[0..3 :0]; |
| | 6991 | \\ } |
| | 6992 | \\} |
| | 6993 | \\export fn foo_vector_ConstPtrSpecialBaseArray() void { |
| | 6994 | \\ comptime { |
| | 6995 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 6996 | \\ var target: [*]u8 = &buf; |
| | 6997 | \\ const slice = target[0..3 :0]; |
| | 6998 | \\ } |
| | 6999 | \\} |
| | 7000 | \\export fn foo_vector_ConstPtrSpecialRef() void { |
| | 7001 | \\ comptime { |
| | 7002 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7003 | \\ var target: [*]u8 = @ptrCast([*]u8, &buf); |
| | 7004 | \\ const slice = target[0..3 :0]; |
| | 7005 | \\ } |
| | 7006 | \\} |
| | 7007 | \\export fn foo_cvector_ConstPtrSpecialBaseArray() void { |
| | 7008 | \\ comptime { |
| | 7009 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7010 | \\ var target: [*c]u8 = &buf; |
| | 7011 | \\ const slice = target[0..3 :0]; |
| | 7012 | \\ } |
| | 7013 | \\} |
| | 7014 | \\export fn foo_cvector_ConstPtrSpecialRef() void { |
| | 7015 | \\ comptime { |
| | 7016 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7017 | \\ var target: [*c]u8 = @ptrCast([*c]u8, &buf); |
| | 7018 | \\ const slice = target[0..3 :0]; |
| | 7019 | \\ } |
| | 7020 | \\} |
| | 7021 | \\export fn foo_slice() void { |
| | 7022 | \\ comptime { |
| | 7023 | \\ var buf = [_]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7024 | \\ var target: []u8 = &buf; |
| | 7025 | \\ const slice = target[0..3 :0]; |
| | 7026 | \\ } |
| | 7027 | \\} |
| | 7028 | , &[_][]const u8{ |
| | 7029 | ":4:29: error: slice-sentinel does not match memory at target index", |
| | 7030 | ":11:29: error: slice-sentinel does not match memory at target index", |
| | 7031 | ":18:29: error: slice-sentinel does not match memory at target index", |
| | 7032 | ":25:29: error: slice-sentinel does not match memory at target index", |
| | 7033 | ":32:29: error: slice-sentinel does not match memory at target index", |
| | 7034 | ":39:29: error: slice-sentinel does not match memory at target index", |
| | 7035 | ":46:29: error: slice-sentinel does not match memory at target index", |
| | 7036 | }); |
| | 7037 | |
| | 7038 | cases.add("comptime slice-sentinel does not match memory at target index (terminated)", |
| | 7039 | \\export fn foo_array() void { |
| | 7040 | \\ comptime { |
| | 7041 | \\ var target = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7042 | \\ const slice = target[0..3 :0]; |
| | 7043 | \\ } |
| | 7044 | \\} |
| | 7045 | \\export fn foo_ptr_array() void { |
| | 7046 | \\ comptime { |
| | 7047 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7048 | \\ var target = &buf; |
| | 7049 | \\ const slice = target[0..3 :0]; |
| | 7050 | \\ } |
| | 7051 | \\} |
| | 7052 | \\export fn foo_vector_ConstPtrSpecialBaseArray() void { |
| | 7053 | \\ comptime { |
| | 7054 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7055 | \\ var target: [*]u8 = &buf; |
| | 7056 | \\ const slice = target[0..3 :0]; |
| | 7057 | \\ } |
| | 7058 | \\} |
| | 7059 | \\export fn foo_vector_ConstPtrSpecialRef() void { |
| | 7060 | \\ comptime { |
| | 7061 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7062 | \\ var target: [*]u8 = @ptrCast([*]u8, &buf); |
| | 7063 | \\ const slice = target[0..3 :0]; |
| | 7064 | \\ } |
| | 7065 | \\} |
| | 7066 | \\export fn foo_cvector_ConstPtrSpecialBaseArray() void { |
| | 7067 | \\ comptime { |
| | 7068 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7069 | \\ var target: [*c]u8 = &buf; |
| | 7070 | \\ const slice = target[0..3 :0]; |
| | 7071 | \\ } |
| | 7072 | \\} |
| | 7073 | \\export fn foo_cvector_ConstPtrSpecialRef() void { |
| | 7074 | \\ comptime { |
| | 7075 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7076 | \\ var target: [*c]u8 = @ptrCast([*c]u8, &buf); |
| | 7077 | \\ const slice = target[0..3 :0]; |
| | 7078 | \\ } |
| | 7079 | \\} |
| | 7080 | \\export fn foo_slice() void { |
| | 7081 | \\ comptime { |
| | 7082 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7083 | \\ var target: []u8 = &buf; |
| | 7084 | \\ const slice = target[0..3 :0]; |
| | 7085 | \\ } |
| | 7086 | \\} |
| | 7087 | , &[_][]const u8{ |
| | 7088 | ":4:29: error: slice-sentinel does not match memory at target index", |
| | 7089 | ":11:29: error: slice-sentinel does not match memory at target index", |
| | 7090 | ":18:29: error: slice-sentinel does not match memory at target index", |
| | 7091 | ":25:29: error: slice-sentinel does not match memory at target index", |
| | 7092 | ":32:29: error: slice-sentinel does not match memory at target index", |
| | 7093 | ":39:29: error: slice-sentinel does not match memory at target index", |
| | 7094 | ":46:29: error: slice-sentinel does not match memory at target index", |
| | 7095 | }); |
| | 7096 | |
| | 7097 | cases.add("comptime slice-sentinel does not match target-sentinel", |
| | 7098 | \\export fn foo_array() void { |
| | 7099 | \\ comptime { |
| | 7100 | \\ var target = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7101 | \\ const slice = target[0..14 :255]; |
| | 7102 | \\ } |
| | 7103 | \\} |
| | 7104 | \\export fn foo_ptr_array() void { |
| | 7105 | \\ comptime { |
| | 7106 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7107 | \\ var target = &buf; |
| | 7108 | \\ const slice = target[0..14 :255]; |
| | 7109 | \\ } |
| | 7110 | \\} |
| | 7111 | \\export fn foo_vector_ConstPtrSpecialBaseArray() void { |
| | 7112 | \\ comptime { |
| | 7113 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7114 | \\ var target: [*]u8 = &buf; |
| | 7115 | \\ const slice = target[0..14 :255]; |
| | 7116 | \\ } |
| | 7117 | \\} |
| | 7118 | \\export fn foo_vector_ConstPtrSpecialRef() void { |
| | 7119 | \\ comptime { |
| | 7120 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7121 | \\ var target: [*]u8 = @ptrCast([*]u8, &buf); |
| | 7122 | \\ const slice = target[0..14 :255]; |
| | 7123 | \\ } |
| | 7124 | \\} |
| | 7125 | \\export fn foo_cvector_ConstPtrSpecialBaseArray() void { |
| | 7126 | \\ comptime { |
| | 7127 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7128 | \\ var target: [*c]u8 = &buf; |
| | 7129 | \\ const slice = target[0..14 :255]; |
| | 7130 | \\ } |
| | 7131 | \\} |
| | 7132 | \\export fn foo_cvector_ConstPtrSpecialRef() void { |
| | 7133 | \\ comptime { |
| | 7134 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7135 | \\ var target: [*c]u8 = @ptrCast([*c]u8, &buf); |
| | 7136 | \\ const slice = target[0..14 :255]; |
| | 7137 | \\ } |
| | 7138 | \\} |
| | 7139 | \\export fn foo_slice() void { |
| | 7140 | \\ comptime { |
| | 7141 | \\ var buf = [_:0]u8{ 'a', 'b', 'c', 'd' } ++ [_]u8{undefined} ** 10; |
| | 7142 | \\ var target: []u8 = &buf; |
| | 7143 | \\ const slice = target[0..14 :255]; |
| | 7144 | \\ } |
| | 7145 | \\} |
| | 7146 | , &[_][]const u8{ |
| | 7147 | ":4:29: error: slice-sentinel does not match target-sentinel", |
| | 7148 | ":11:29: error: slice-sentinel does not match target-sentinel", |
| | 7149 | ":18:29: error: slice-sentinel does not match target-sentinel", |
| | 7150 | ":25:29: error: slice-sentinel does not match target-sentinel", |
| | 7151 | ":32:29: error: slice-sentinel does not match target-sentinel", |
| | 7152 | ":39:29: error: slice-sentinel does not match target-sentinel", |
| | 7153 | ":46:29: error: slice-sentinel does not match target-sentinel", |
| | 7154 | }); |
| 6860 | } | 7155 | } |