authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2024-03-05 08:15:28+00:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2024-03-06 21:26:38+00:00
loge043fe474ffe07d1503c6cb70e01983b8d07a1ba
treea4cfce82b6a4239f2a1d203e211db29345b4c1e3
parent20403ee41d67b02faedbee97a94fc8b9fd3781e0
signaturelock-open Commit is signed but in an unrecognized format.

Fix incorrectly resolved merge conflicts

To be honest, I can't be bothered to figure out which commits these changes should be in.

3 files changed, 115 insertions(+), 110 deletions(-)

src/Sema.zig+5-5
...@@ -2674,7 +2674,7 @@ fn analyzeAsInt(...@@ -2674,7 +2674,7 @@ fn analyzeAsInt(
2674fn getCaptures(sema: *Sema, block: *Block, extra_index: usize, captures_len: u32) ![]InternPool.CaptureValue {2674fn getCaptures(sema: *Sema, block: *Block, extra_index: usize, captures_len: u32) ![]InternPool.CaptureValue {
2675 const zcu = sema.mod;2675 const zcu = sema.mod;
2676 const ip = &zcu.intern_pool;2676 const ip = &zcu.intern_pool;
2677 const parent_captures: InternPool.CaptureValue.Slice = zcu.namespacePtr(block.namespace).ty.getCaptures(zcu);2677 const parent_captures: InternPool.CaptureValue.Slice = zcu.namespacePtr(block.namespace).getType(zcu).getCaptures(zcu);
26782678
2679 const captures = try sema.arena.alloc(InternPool.CaptureValue, captures_len);2679 const captures = try sema.arena.alloc(InternPool.CaptureValue, captures_len);
26802680
...@@ -2796,7 +2796,7 @@ fn zirStructDecl(...@@ -2796,7 +2796,7 @@ fn zirStructDecl(
2796 .decl_index = new_decl_index,2796 .decl_index = new_decl_index,
2797 .file_scope = block.getFileScope(mod),2797 .file_scope = block.getFileScope(mod),
2798 })).toOptional() else .none;2798 })).toOptional() else .none;
2799 errdefer mod.destroyNamespace(new_namespace_index);2799 errdefer if (new_namespace_index.unwrap()) |ns| mod.destroyNamespace(ns);
28002800
2801 if (new_namespace_index.unwrap()) |ns| {2801 if (new_namespace_index.unwrap()) |ns| {
2802 const decls = sema.code.bodySlice(extra_index, decls_len);2802 const decls = sema.code.bodySlice(extra_index, decls_len);
...@@ -17268,7 +17268,7 @@ fn zirThis(...@@ -17268,7 +17268,7 @@ fn zirThis(
17268fn zirClosureGet(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref {17268fn zirClosureGet(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref {
17269 const mod = sema.mod;17269 const mod = sema.mod;
17270 const ip = &mod.intern_pool;17270 const ip = &mod.intern_pool;
17271 const captures = mod.namespacePtr(block.namespace).ty.getCaptures(mod);17271 const captures = mod.namespacePtr(block.namespace).getType(mod).getCaptures(mod);
1727217272
17273 const src_node: i32 = @bitCast(extended.operand);17273 const src_node: i32 = @bitCast(extended.operand);
17274 const src = LazySrcLoc.nodeOffset(src_node);17274 const src = LazySrcLoc.nodeOffset(src_node);
...@@ -21787,7 +21787,7 @@ fn reifyUnion(...@@ -21787,7 +21787,7 @@ fn reifyUnion(
21787 errdefer msg.destroy(gpa);21787 errdefer msg.destroy(gpa);
2178821788
21789 const src_decl = mod.declPtr(block.src_decl);21789 const src_decl = mod.declPtr(block.src_decl);
21790 try sema.explainWhyTypeIsNotExtern(msg, src.toSrcLoc(src_decl, mod), field_ty, .union_field);21790 try sema.explainWhyTypeIsNotExtern(msg, src_decl.toSrcLoc(src, mod), field_ty, .union_field);
2179121791
21792 try sema.addDeclaredHereNote(msg, field_ty);21792 try sema.addDeclaredHereNote(msg, field_ty);
21793 break :msg msg;21793 break :msg msg;
...@@ -21798,7 +21798,7 @@ fn reifyUnion(...@@ -21798,7 +21798,7 @@ fn reifyUnion(
21798 errdefer msg.destroy(gpa);21798 errdefer msg.destroy(gpa);
2179921799
21800 const src_decl = mod.declPtr(block.src_decl);21800 const src_decl = mod.declPtr(block.src_decl);
21801 try sema.explainWhyTypeIsNotPacked(msg, src.toSrcLoc(src_decl, mod), field_ty);21801 try sema.explainWhyTypeIsNotPacked(msg, src_decl.toSrcLoc(src, mod), field_ty);
2180221802
21803 try sema.addDeclaredHereNote(msg, field_ty);21803 try sema.addDeclaredHereNote(msg, field_ty);
21804 break :msg msg;21804 break :msg msg;
src/codegen/c.zig+108-103
...@@ -1376,70 +1376,24 @@ pub const DeclGen = struct {...@@ -1376,70 +1376,24 @@ pub const DeclGen = struct {
1376 }1376 }
1377 try writer.writeByte('}');1377 try writer.writeByte('}');
1378 },1378 },
1379 .struct_type => |struct_type| switch (struct_type.layout) {1379 .struct_type => {
1380 .Auto, .Extern => {1380 const struct_type = ip.loadStructType(ty.toIntern());
1381 if (!location.isInitializer()) {1381 switch (struct_type.layout) {
1382 try writer.writeByte('(');1382 .Auto, .Extern => {
1383 try dg.renderType(writer, ty);1383 if (!location.isInitializer()) {
1384 try writer.writeByte(')');
1385 }
1386
1387 try writer.writeByte('{');
1388 var empty = true;
1389 for (0..struct_type.field_types.len) |field_index| {
1390 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1391 if (struct_type.fieldIsComptime(ip, field_index)) continue;
1392 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
1393
1394 if (!empty) try writer.writeByte(',');
1395 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {
1396 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{
1397 .ty = field_ty.toIntern(),
1398 .storage = .{ .u64 = bytes[field_index] },
1399 } }),
1400 .elems => |elems| elems[field_index],
1401 .repeated_elem => |elem| elem,
1402 };
1403 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), initializer_type);
1404
1405 empty = false;
1406 }
1407 try writer.writeByte('}');
1408 },
1409 .Packed => {
1410 const int_info = ty.intInfo(mod);
1411
1412 const bits = Type.smallestUnsignedBits(int_info.bits - 1);
1413 const bit_offset_ty = try mod.intType(.unsigned, bits);
1414
1415 var bit_offset: u64 = 0;
1416 var eff_num_fields: usize = 0;
1417
1418 for (0..struct_type.field_types.len) |field_index| {
1419 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1420 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
1421 eff_num_fields += 1;
1422 }
1423
1424 if (eff_num_fields == 0) {
1425 try writer.writeByte('(');
1426 try dg.renderValue(writer, ty, Value.undef, initializer_type);
1427 try writer.writeByte(')');
1428 } else if (ty.bitSize(mod) > 64) {
1429 // zig_or_u128(zig_or_u128(zig_shl_u128(a, a_off), zig_shl_u128(b, b_off)), zig_shl_u128(c, c_off))
1430 var num_or = eff_num_fields - 1;
1431 while (num_or > 0) : (num_or -= 1) {
1432 try writer.writeAll("zig_or_");
1433 try dg.renderTypeForBuiltinFnName(writer, ty);
1434 try writer.writeByte('(');1384 try writer.writeByte('(');
1385 try dg.renderType(writer, ty);
1386 try writer.writeByte(')');
1435 }1387 }
14361388
1437 var eff_index: usize = 0;1389 try writer.writeByte('{');
1438 var needs_closing_paren = false;1390 var empty = true;
1439 for (0..struct_type.field_types.len) |field_index| {1391 for (0..struct_type.field_types.len) |field_index| {
1440 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);1392 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1393 if (struct_type.fieldIsComptime(ip, field_index)) continue;
1441 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;1394 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
14421395
1396 if (!empty) try writer.writeByte(',');
1443 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {1397 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {
1444 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{1398 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{
1445 .ty = field_ty.toIntern(),1399 .ty = field_ty.toIntern(),
...@@ -1448,62 +1402,113 @@ pub const DeclGen = struct {...@@ -1448,62 +1402,113 @@ pub const DeclGen = struct {
1448 .elems => |elems| elems[field_index],1402 .elems => |elems| elems[field_index],
1449 .repeated_elem => |elem| elem,1403 .repeated_elem => |elem| elem,
1450 };1404 };
1451 const cast_context = IntCastContext{ .value = .{ .value = Value.fromInterned(field_val) } };1405 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), initializer_type);
1452 if (bit_offset != 0) {
1453 try writer.writeAll("zig_shl_");
1454 try dg.renderTypeForBuiltinFnName(writer, ty);
1455 try writer.writeByte('(');
1456 try dg.renderIntCast(writer, ty, cast_context, field_ty, .FunctionArgument);
1457 try writer.writeAll(", ");
1458 const bit_offset_val = try mod.intValue(bit_offset_ty, bit_offset);
1459 try dg.renderValue(writer, bit_offset_ty, bit_offset_val, .FunctionArgument);
1460 try writer.writeByte(')');
1461 } else {
1462 try dg.renderIntCast(writer, ty, cast_context, field_ty, .FunctionArgument);
1463 }
1464
1465 if (needs_closing_paren) try writer.writeByte(')');
1466 if (eff_index != eff_num_fields - 1) try writer.writeAll(", ");
14671406
1468 bit_offset += field_ty.bitSize(mod);1407 empty = false;
1469 needs_closing_paren = true;
1470 eff_index += 1;
1471 }1408 }
1472 } else {1409 try writer.writeByte('}');
1473 try writer.writeByte('(');1410 },
1474 // a << a_off | b << b_off | c << c_off1411 .Packed => {
1475 var empty = true;1412 const int_info = ty.intInfo(mod);
1413
1414 const bits = Type.smallestUnsignedBits(int_info.bits - 1);
1415 const bit_offset_ty = try mod.intType(.unsigned, bits);
1416
1417 var bit_offset: u64 = 0;
1418 var eff_num_fields: usize = 0;
1419
1476 for (0..struct_type.field_types.len) |field_index| {1420 for (0..struct_type.field_types.len) |field_index| {
1477 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);1421 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1478 if (struct_type.fieldIsComptime(ip, field_index)) continue;
1479 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;1422 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
1423 eff_num_fields += 1;
1424 }
14801425
1481 if (!empty) try writer.writeByte(',');1426 if (eff_num_fields == 0) {
1482 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {1427 try writer.writeByte('(');
1483 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{1428 try dg.renderValue(writer, ty, Value.undef, initializer_type);
1484 .ty = field_ty.toIntern(),1429 try writer.writeByte(')');
1485 .storage = .{ .u64 = bytes[field_index] },1430 } else if (ty.bitSize(mod) > 64) {
1486 } }),1431 // zig_or_u128(zig_or_u128(zig_shl_u128(a, a_off), zig_shl_u128(b, b_off)), zig_shl_u128(c, c_off))
1487 .elems => |elems| elems[field_index],1432 var num_or = eff_num_fields - 1;
1488 .repeated_elem => |elem| elem,1433 while (num_or > 0) : (num_or -= 1) {
1489 };1434 try writer.writeAll("zig_or_");
1490 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), initializer_type);1435 try dg.renderTypeForBuiltinFnName(writer, ty);
1436 try writer.writeByte('(');
1437 }
14911438
1492 if (bit_offset != 0) {1439 var eff_index: usize = 0;
1493 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), .Other);1440 var needs_closing_paren = false;
1494 try writer.writeAll(" << ");1441 for (0..struct_type.field_types.len) |field_index| {
1495 const bit_offset_val = try mod.intValue(bit_offset_ty, bit_offset);1442 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1496 try dg.renderValue(writer, bit_offset_ty, bit_offset_val, .FunctionArgument);1443 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
1497 } else {1444
1498 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), .Other);1445 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {
1446 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{
1447 .ty = field_ty.toIntern(),
1448 .storage = .{ .u64 = bytes[field_index] },
1449 } }),
1450 .elems => |elems| elems[field_index],
1451 .repeated_elem => |elem| elem,
1452 };
1453 const cast_context = IntCastContext{ .value = .{ .value = Value.fromInterned(field_val) } };
1454 if (bit_offset != 0) {
1455 try writer.writeAll("zig_shl_");
1456 try dg.renderTypeForBuiltinFnName(writer, ty);
1457 try writer.writeByte('(');
1458 try dg.renderIntCast(writer, ty, cast_context, field_ty, .FunctionArgument);
1459 try writer.writeAll(", ");
1460 const bit_offset_val = try mod.intValue(bit_offset_ty, bit_offset);
1461 try dg.renderValue(writer, bit_offset_ty, bit_offset_val, .FunctionArgument);
1462 try writer.writeByte(')');
1463 } else {
1464 try dg.renderIntCast(writer, ty, cast_context, field_ty, .FunctionArgument);
1465 }
1466
1467 if (needs_closing_paren) try writer.writeByte(')');
1468 if (eff_index != eff_num_fields - 1) try writer.writeAll(", ");
1469
1470 bit_offset += field_ty.bitSize(mod);
1471 needs_closing_paren = true;
1472 eff_index += 1;
1499 }1473 }
1474 } else {
1475 try writer.writeByte('(');
1476 // a << a_off | b << b_off | c << c_off
1477 var empty = true;
1478 for (0..struct_type.field_types.len) |field_index| {
1479 const field_ty = Type.fromInterned(struct_type.field_types.get(ip)[field_index]);
1480 if (!field_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
15001481
1501 bit_offset += field_ty.bitSize(mod);1482 if (!empty) try writer.writeAll(" | ");
1502 empty = false;1483 try writer.writeByte('(');
1484 try dg.renderType(writer, ty);
1485 try writer.writeByte(')');
1486
1487 const field_val = switch (ip.indexToKey(val.ip_index).aggregate.storage) {
1488 .bytes => |bytes| try ip.get(mod.gpa, .{ .int = .{
1489 .ty = field_ty.toIntern(),
1490 .storage = .{ .u64 = bytes[field_index] },
1491 } }),
1492 .elems => |elems| elems[field_index],
1493 .repeated_elem => |elem| elem,
1494 };
1495
1496 if (bit_offset != 0) {
1497 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), .Other);
1498 try writer.writeAll(" << ");
1499 const bit_offset_val = try mod.intValue(bit_offset_ty, bit_offset);
1500 try dg.renderValue(writer, bit_offset_ty, bit_offset_val, .FunctionArgument);
1501 } else {
1502 try dg.renderValue(writer, field_ty, Value.fromInterned(field_val), .Other);
1503 }
1504
1505 bit_offset += field_ty.bitSize(mod);
1506 empty = false;
1507 }
1508 try writer.writeByte(')');
1503 }1509 }
1504 try writer.writeByte('}');1510 },
1505 }1511 }
1506 },
1507 },1512 },
1508 else => unreachable,1513 else => unreachable,
1509 },1514 },
src/codegen/llvm.zig+2-2
...@@ -2642,7 +2642,7 @@ pub const Object = struct {...@@ -2642,7 +2642,7 @@ pub const Object = struct {
2642 else2642 else
2643 try o.builder.debugForwardReference();2643 try o.builder.debugForwardReference();
26442644
2645 const tag_type = union_type.loadTagType();2645 const tag_type = union_type.loadTagType(ip);
26462646
2647 for (0..tag_type.names.len) |field_index| {2647 for (0..tag_type.names.len) |field_index| {
2648 const field_ty = union_type.field_types.get(ip)[field_index];2648 const field_ty = union_type.field_types.get(ip)[field_index];
...@@ -3552,7 +3552,7 @@ pub const Object = struct {...@@ -3552,7 +3552,7 @@ pub const Object = struct {
3552 const gop = try o.type_map.getOrPut(o.gpa, t.toIntern());3552 const gop = try o.type_map.getOrPut(o.gpa, t.toIntern());
3553 if (!gop.found_existing) {3553 if (!gop.found_existing) {
3554 const decl = mod.declPtr(ip.loadOpaqueType(t.toIntern()).decl);3554 const decl = mod.declPtr(ip.loadOpaqueType(t.toIntern()).decl);
3555 const name = try o.builder.string(ip.stringToSlice(try decl.getFullyQualifiedName(mod)));3555 const name = try o.builder.string(ip.stringToSlice(try decl.fullyQualifiedName(mod)));
3556 gop.value_ptr.* = try o.builder.opaqueType(name);3556 gop.value_ptr.* = try o.builder.opaqueType(name);
3557 }3557 }
3558 return gop.value_ptr.*;3558 return gop.value_ptr.*;