| ... | ... | @@ -7911,6 +7911,10 @@ pub const Metadata = enum(u32) { |
| 7911 | 7911 | align_in_bits_lo: u32, |
| 7912 | 7912 | align_in_bits_hi: u32, |
| 7913 | 7913 | fields_tuple: Metadata, |
| 7914 | flags: packed struct(u32) { |
| 7915 | is_byref: bool, |
| 7916 | pad: u31 = 0, |
| 7917 | }, |
| 7914 | 7918 | |
| 7915 | 7919 | pub fn bitSize(self: CompositeType) u64 { |
| 7916 | 7920 | return @as(u64, self.size_in_bits_hi) << 32 | self.size_in_bits_lo; |
| ... | ... | @@ -11638,7 +11642,17 @@ fn addMetadataExtraAssumeCapacity(self: *Builder, extra: anytype) Metadata.Item. |
| 11638 | 11642 | u32 => value, |
| 11639 | 11643 | MetadataString, Metadata, Variable.Index, Value => @intFromEnum(value), |
| 11640 | 11644 | Metadata.DIFlags => @bitCast(value), |
| 11641 | | else => @compileError("bad field type: " ++ @typeName(field.type)), |
| 11645 | else => blk: { |
| 11646 | switch (@typeInfo(field.type)) { |
| 11647 | .Struct => |s| { |
| 11648 | if (s.backing_integer == u32) |
| 11649 | break :blk @bitCast(value); |
| 11650 | @compileLog(s.layout, s.backing_integer); |
| 11651 | }, |
| 11652 | else => {}, |
| 11653 | } |
| 11654 | @compileError("bad field type: " ++ @typeName(field.type)); |
| 11655 | }, |
| 11642 | 11656 | }); |
| 11643 | 11657 | } |
| 11644 | 11658 | return result; |
| ... | ... | @@ -11677,7 +11691,7 @@ fn metadataExtraDataTrail( |
| 11677 | 11691 | u32 => value, |
| 11678 | 11692 | MetadataString, Metadata, Variable.Index, Value => @enumFromInt(value), |
| 11679 | 11693 | Metadata.DIFlags => @bitCast(value), |
| 11680 | | else => @compileError("bad field type: " ++ @typeName(field.type)), |
| 11694 | else => @bitCast(value), |
| 11681 | 11695 | }; |
| 11682 | 11696 | return .{ |
| 11683 | 11697 | .data = result, |
| ... | ... | @@ -11844,6 +11858,7 @@ pub fn debugStructType( |
| 11844 | 11858 | size_in_bits: u64, |
| 11845 | 11859 | align_in_bits: u64, |
| 11846 | 11860 | fields_tuple: Metadata, |
| 11861 | is_byref: bool, |
| 11847 | 11862 | ) Allocator.Error!Metadata { |
| 11848 | 11863 | try self.ensureUnusedMetadataCapacity(1, Metadata.CompositeType, 0); |
| 11849 | 11864 | return self.debugStructTypeAssumeCapacity( |
| ... | ... | @@ -11855,6 +11870,7 @@ pub fn debugStructType( |
| 11855 | 11870 | size_in_bits, |
| 11856 | 11871 | align_in_bits, |
| 11857 | 11872 | fields_tuple, |
| 11873 | is_byref, |
| 11858 | 11874 | ); |
| 11859 | 11875 | } |
| 11860 | 11876 | |
| ... | ... | @@ -11868,6 +11884,7 @@ pub fn debugUnionType( |
| 11868 | 11884 | size_in_bits: u64, |
| 11869 | 11885 | align_in_bits: u64, |
| 11870 | 11886 | fields_tuple: Metadata, |
| 11887 | is_byref: bool, |
| 11871 | 11888 | ) Allocator.Error!Metadata { |
| 11872 | 11889 | try self.ensureUnusedMetadataCapacity(1, Metadata.CompositeType, 0); |
| 11873 | 11890 | return self.debugUnionTypeAssumeCapacity( |
| ... | ... | @@ -11879,6 +11896,7 @@ pub fn debugUnionType( |
| 11879 | 11896 | size_in_bits, |
| 11880 | 11897 | align_in_bits, |
| 11881 | 11898 | fields_tuple, |
| 11899 | is_byref, |
| 11882 | 11900 | ); |
| 11883 | 11901 | } |
| 11884 | 11902 | |
| ... | ... | @@ -12400,6 +12418,7 @@ fn debugStructTypeAssumeCapacity( |
| 12400 | 12418 | size_in_bits: u64, |
| 12401 | 12419 | align_in_bits: u64, |
| 12402 | 12420 | fields_tuple: Metadata, |
| 12421 | is_byref: bool, |
| 12403 | 12422 | ) Metadata { |
| 12404 | 12423 | assert(!self.strip); |
| 12405 | 12424 | return self.debugCompositeTypeAssumeCapacity( |
| ... | ... | @@ -12412,6 +12431,7 @@ fn debugStructTypeAssumeCapacity( |
| 12412 | 12431 | size_in_bits, |
| 12413 | 12432 | align_in_bits, |
| 12414 | 12433 | fields_tuple, |
| 12434 | is_byref, |
| 12415 | 12435 | ); |
| 12416 | 12436 | } |
| 12417 | 12437 | |
| ... | ... | @@ -12425,6 +12445,7 @@ fn debugUnionTypeAssumeCapacity( |
| 12425 | 12445 | size_in_bits: u64, |
| 12426 | 12446 | align_in_bits: u64, |
| 12427 | 12447 | fields_tuple: Metadata, |
| 12448 | is_byref: bool, |
| 12428 | 12449 | ) Metadata { |
| 12429 | 12450 | assert(!self.strip); |
| 12430 | 12451 | return self.debugCompositeTypeAssumeCapacity( |
| ... | ... | @@ -12437,6 +12458,7 @@ fn debugUnionTypeAssumeCapacity( |
| 12437 | 12458 | size_in_bits, |
| 12438 | 12459 | align_in_bits, |
| 12439 | 12460 | fields_tuple, |
| 12461 | is_byref, |
| 12440 | 12462 | ); |
| 12441 | 12463 | } |
| 12442 | 12464 | |
| ... | ... | @@ -12462,6 +12484,7 @@ fn debugEnumerationTypeAssumeCapacity( |
| 12462 | 12484 | size_in_bits, |
| 12463 | 12485 | align_in_bits, |
| 12464 | 12486 | fields_tuple, |
| 12487 | false, // is_byref |
| 12465 | 12488 | ); |
| 12466 | 12489 | } |
| 12467 | 12490 | |
| ... | ... | @@ -12487,6 +12510,7 @@ fn debugArrayTypeAssumeCapacity( |
| 12487 | 12510 | size_in_bits, |
| 12488 | 12511 | align_in_bits, |
| 12489 | 12512 | fields_tuple, |
| 12513 | size_in_bits > 0, // is_byref |
| 12490 | 12514 | ); |
| 12491 | 12515 | } |
| 12492 | 12516 | |
| ... | ... | @@ -12512,6 +12536,7 @@ fn debugVectorTypeAssumeCapacity( |
| 12512 | 12536 | size_in_bits, |
| 12513 | 12537 | align_in_bits, |
| 12514 | 12538 | fields_tuple, |
| 12539 | false, |
| 12515 | 12540 | ); |
| 12516 | 12541 | } |
| 12517 | 12542 | |
| ... | ... | @@ -12526,6 +12551,7 @@ fn debugCompositeTypeAssumeCapacity( |
| 12526 | 12551 | size_in_bits: u64, |
| 12527 | 12552 | align_in_bits: u64, |
| 12528 | 12553 | fields_tuple: Metadata, |
| 12554 | is_byref: bool, |
| 12529 | 12555 | ) Metadata { |
| 12530 | 12556 | assert(!self.strip); |
| 12531 | 12557 | return self.metadataSimpleAssumeCapacity(tag, Metadata.CompositeType{ |
| ... | ... | @@ -12539,6 +12565,7 @@ fn debugCompositeTypeAssumeCapacity( |
| 12539 | 12565 | .align_in_bits_lo = @truncate(align_in_bits), |
| 12540 | 12566 | .align_in_bits_hi = @truncate(align_in_bits >> 32), |
| 12541 | 12567 | .fields_tuple = fields_tuple, |
| 12568 | .flags = .{ .is_byref = is_byref }, |
| 12542 | 12569 | }); |
| 12543 | 12570 | } |
| 12544 | 12571 | |
| ... | ... | @@ -13973,7 +14000,11 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co |
| 13973 | 14000 | .underlying_type = extra.underlying_type, |
| 13974 | 14001 | .size_in_bits = extra.bitSize(), |
| 13975 | 14002 | .align_in_bits = extra.bitAlign(), |
| 13976 | | .flags = if (kind == .composite_vector_type) .{ .Vector = true } else .{}, |
| 14003 | .flags = .{ |
| 14004 | .Vector = kind == .composite_vector_type, |
| 14005 | .EnumClass = kind == .composite_enumeration_type, |
| 14006 | .TypePassbyReference = extra.flags.is_byref, |
| 14007 | }, |
| 13977 | 14008 | .elements = extra.fields_tuple, |
| 13978 | 14009 | }, metadata_adapter); |
| 13979 | 14010 | }, |