Commit 2b5bd56a67

Jacob Young <jacobly0@users.noreply.github.com>
2023-08-12 04:45:55
AstGen: fix src loc for invalid coercions in tuple literals
1 parent ffc116d
Changed files (2)
src/AstGen.zig
@@ -11359,7 +11359,10 @@ const GenZir = struct {
             parent_gz.instructions.items.len -= src - dst;
             as_scope.instructions_top = GenZir.unstacked_top;
             // as_scope now unstacked, can add new instructions to parent_gz
-            const casted_result = try parent_gz.addBin(.as, dest_type, result);
+            const casted_result = try parent_gz.addPlNode(.as_node, src_node, Zir.Inst.As{
+                .dest_type = dest_type,
+                .operand = result,
+            });
             return rvalue(parent_gz, ri, casted_result, src_node);
         } else {
             // implicitly move all as_scope instructions to parent_gz
test/cases/compile_errors/invalid_coercion_in_aggregate_literal.zig
@@ -0,0 +1,22 @@
+export fn invalidArrayElem() u8 {
+    const array_literal = [1]u8{@as(u8, 256)};
+    return array_literal[0];
+}
+
+export fn invalidTupleElem() u8 {
+    const tuple_literal = struct { u8 }{@as(u8, 256)};
+    return tuple_literal[0];
+}
+
+export fn invalidStructField() u8 {
+    const struct_literal = struct { field: u8 }{ .field = @as(u8, 256) };
+    return struct_literal.field;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :2:41: error: type 'u8' cannot represent integer value '256'
+// :7:49: error: type 'u8' cannot represent integer value '256'
+// :12:67: error: type 'u8' cannot represent integer value '256'