Commit 3a5e20c
fix(typeck): reject non-path receivers for Vector/Mapping storage ops (#29432)
`Vector::{len,get,set,push,pop,swap_remove,clear}` and
`Mapping::{get,get_or_use,contains,set,remove}` assumed an
`Expression::Path` receiver downstream: storage_lowering for vectors,
codegen for mappings. Type-checking only verified the receiver's type.
- Read ops (`len`/`get`/`get_or_use`/`contains`) had no path check at
all, so a ternary of two storage vectors ICEd in storage_lowering
(#29428) and a ternary of two mappings produced invalid bytecode that
failed late at disassembly.
- Write ops already had an `is_local_path` check, but emitted the
"external vectors/mappings" diagnostic for a local ternary receiver,
which is misleading.
Add an `Expression::Path` pre-check to all eleven arms and emit a new
`ETYC0372191` for non-path receivers. The existing
"external vectors/mappings" diagnostic now only fires when the receiver
is an actual external path, which is what its wording describes.
Fixes #29428.
Co-authored-by: Mohammad Fawaz <mohammadfawaz@gmail.com>1 parent 3a6eba3 commit 3a5e20c
8 files changed
Lines changed: 285 additions & 4 deletions
File tree
- crates/passes/src
- errors
- type_checking
- tests
- expectations/compiler/storage
- tests/compiler/storage
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1063 | 1063 | | |
1064 | 1064 | | |
1065 | 1065 | | |
| 1066 | + | |
| 1067 | + | |
| 1068 | + | |
| 1069 | + | |
| 1070 | + | |
| 1071 | + | |
| 1072 | + | |
| 1073 | + | |
| 1074 | + | |
| 1075 | + | |
| 1076 | + | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
1066 | 1081 | | |
1067 | 1082 | | |
1068 | 1083 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
84 | 84 | | |
85 | 85 | | |
86 | 86 | | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
87 | 104 | | |
88 | 105 | | |
89 | 106 | | |
| |||
966 | 983 | | |
967 | 984 | | |
968 | 985 | | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
969 | 990 | | |
970 | 991 | | |
971 | 992 | | |
| |||
979 | 1000 | | |
980 | 1001 | | |
981 | 1002 | | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
982 | 1007 | | |
983 | 1008 | | |
984 | 1009 | | |
| |||
1005 | 1030 | | |
1006 | 1031 | | |
1007 | 1032 | | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
1008 | 1037 | | |
1009 | 1038 | | |
1010 | 1039 | | |
| |||
1021 | 1050 | | |
1022 | 1051 | | |
1023 | 1052 | | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
| 1056 | + | |
1024 | 1057 | | |
1025 | 1058 | | |
1026 | 1059 | | |
| |||
1047 | 1080 | | |
1048 | 1081 | | |
1049 | 1082 | | |
| 1083 | + | |
| 1084 | + | |
| 1085 | + | |
| 1086 | + | |
1050 | 1087 | | |
1051 | 1088 | | |
1052 | 1089 | | |
| |||
1082 | 1119 | | |
1083 | 1120 | | |
1084 | 1121 | | |
| 1122 | + | |
| 1123 | + | |
| 1124 | + | |
| 1125 | + | |
1085 | 1126 | | |
1086 | 1127 | | |
1087 | 1128 | | |
| |||
1095 | 1136 | | |
1096 | 1137 | | |
1097 | 1138 | | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
1098 | 1143 | | |
1099 | 1144 | | |
1100 | 1145 | | |
| |||
1123 | 1168 | | |
1124 | 1169 | | |
1125 | 1170 | | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
1126 | 1175 | | |
1127 | 1176 | | |
1128 | 1177 | | |
| |||
1141 | 1190 | | |
1142 | 1191 | | |
1143 | 1192 | | |
1144 | | - | |
1145 | | - | |
1146 | | - | |
| 1193 | + | |
1147 | 1194 | | |
1148 | | - | |
| 1195 | + | |
| 1196 | + | |
| 1197 | + | |
| 1198 | + | |
| 1199 | + | |
1149 | 1200 | | |
| 1201 | + | |
| 1202 | + | |
1150 | 1203 | | |
1151 | 1204 | | |
1152 | 1205 | | |
| |||
1159 | 1212 | | |
1160 | 1213 | | |
1161 | 1214 | | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
1162 | 1219 | | |
1163 | 1220 | | |
1164 | 1221 | | |
| |||
1182 | 1239 | | |
1183 | 1240 | | |
1184 | 1241 | | |
| 1242 | + | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
1185 | 1246 | | |
1186 | 1247 | | |
1187 | 1248 | | |
| |||
1202 | 1263 | | |
1203 | 1264 | | |
1204 | 1265 | | |
| 1266 | + | |
| 1267 | + | |
| 1268 | + | |
| 1269 | + | |
1205 | 1270 | | |
1206 | 1271 | | |
1207 | 1272 | | |
| |||
Lines changed: 21 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
Lines changed: 21 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
Lines changed: 49 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
Lines changed: 30 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
Lines changed: 33 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
Lines changed: 47 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
0 commit comments