| ... | ... | @@ -6857,4 +6857,299 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 6857 | 6857 | "tmp.zig:7:32: error: destination type 'u16' has size 2 but source type '[]u8' has size 16", |
| 6858 | 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 | } |