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