| ... | @@ -486,15 +486,19 @@ pub const Block = struct { | ... | @@ -486,15 +486,19 @@ pub const Block = struct { |
| 486 | wad.* = undefined; | 486 | wad.* = undefined; |
| 487 | } | 487 | } |
| 488 | | 488 | |
| 489 | pub fn finish(wad: *WipAnonDecl, ty: Type, val: Value) !*Decl { | 489 | pub fn finish(wad: *WipAnonDecl, ty: Type, val: Value, alignment: u32) !*Decl { |
| 490 | const sema = wad.block.sema; | 490 | const sema = wad.block.sema; |
| 491 | // Do this ahead of time because `createAnonymousDecl` depends on calling | 491 | // Do this ahead of time because `createAnonymousDecl` depends on calling |
| 492 | // `type.hasRuntimeBits()`. | 492 | // `type.hasRuntimeBits()`. |
| 493 | _ = try sema.typeHasRuntimeBits(wad.block, wad.src, ty); | 493 | _ = try sema.typeHasRuntimeBits(wad.block, wad.src, ty); |
| | 494 | const align_val = if (alignment != 0) blk: { |
| | 495 | break :blk try Value.Tag.int_u64.create(wad.arena(), alignment); |
| | 496 | } else Value.@"null"; |
| 494 | const new_decl = try sema.mod.createAnonymousDecl(wad.block, .{ | 497 | const new_decl = try sema.mod.createAnonymousDecl(wad.block, .{ |
| 495 | .ty = ty, | 498 | .ty = ty, |
| 496 | .val = val, | 499 | .val = val, |
| 497 | }); | 500 | }); |
| | 501 | new_decl.align_val = align_val; |
| 498 | errdefer sema.mod.abortAnonDecl(new_decl); | 502 | errdefer sema.mod.abortAnonDecl(new_decl); |
| 499 | try new_decl.finalizeNewArena(&wad.new_decl_arena); | 503 | try new_decl.finalizeNewArena(&wad.new_decl_arena); |
| 500 | wad.finished = true; | 504 | wad.finished = true; |
| ... | @@ -1644,6 +1648,7 @@ fn zirCoerceResultPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileE | ... | @@ -1644,6 +1648,7 @@ fn zirCoerceResultPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileE |
| 1644 | iac.data.decl = try anon_decl.finish( | 1648 | iac.data.decl = try anon_decl.finish( |
| 1645 | try pointee_ty.copy(anon_decl.arena()), | 1649 | try pointee_ty.copy(anon_decl.arena()), |
| 1646 | Value.undef, | 1650 | Value.undef, |
| | 1651 | iac.data.alignment, |
| 1647 | ); | 1652 | ); |
| 1648 | if (iac.data.alignment != 0) { | 1653 | if (iac.data.alignment != 0) { |
| 1649 | try sema.resolveTypeLayout(block, src, pointee_ty); | 1654 | try sema.resolveTypeLayout(block, src, pointee_ty); |
| ... | @@ -2711,6 +2716,7 @@ fn zirResolveInferredAlloc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Com | ... | @@ -2711,6 +2716,7 @@ fn zirResolveInferredAlloc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Com |
| 2711 | const new_decl = try anon_decl.finish( | 2716 | const new_decl = try anon_decl.finish( |
| 2712 | try final_elem_ty.copy(anon_decl.arena()), | 2717 | try final_elem_ty.copy(anon_decl.arena()), |
| 2713 | try store_val.copy(anon_decl.arena()), | 2718 | try store_val.copy(anon_decl.arena()), |
| | 2719 | inferred_alloc.data.alignment, |
| 2714 | ); | 2720 | ); |
| 2715 | break :d new_decl; | 2721 | break :d new_decl; |
| 2716 | }; | 2722 | }; |
| ... | @@ -3503,8 +3509,8 @@ fn storeToInferredAllocComptime( | ... | @@ -3503,8 +3509,8 @@ fn storeToInferredAllocComptime( |
| 3503 | iac.data.decl = try anon_decl.finish( | 3509 | iac.data.decl = try anon_decl.finish( |
| 3504 | try operand_ty.copy(anon_decl.arena()), | 3510 | try operand_ty.copy(anon_decl.arena()), |
| 3505 | try operand_val.copy(anon_decl.arena()), | 3511 | try operand_val.copy(anon_decl.arena()), |
| | 3512 | iac.data.alignment, |
| 3506 | ); | 3513 | ); |
| 3507 | // TODO set the alignment on the decl | | |
| 3508 | return; | 3514 | return; |
| 3509 | } else { | 3515 | } else { |
| 3510 | return sema.failWithNeededComptime(block, src); | 3516 | return sema.failWithNeededComptime(block, src); |
| ... | @@ -3583,6 +3589,7 @@ fn addStrLit(sema: *Sema, block: *Block, zir_bytes: []const u8) CompileError!Air | ... | @@ -3583,6 +3589,7 @@ fn addStrLit(sema: *Sema, block: *Block, zir_bytes: []const u8) CompileError!Air |
| 3583 | const new_decl = try anon_decl.finish( | 3589 | const new_decl = try anon_decl.finish( |
| 3584 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), | 3590 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), |
| 3585 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), | 3591 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), |
| | 3592 | 0, // default alignment |
| 3586 | ); | 3593 | ); |
| 3587 | | 3594 | |
| 3588 | return sema.analyzeDeclRef(new_decl); | 3595 | return sema.analyzeDeclRef(new_decl); |
| ... | @@ -8147,6 +8154,7 @@ fn zirEmbedFile(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A | ... | @@ -8147,6 +8154,7 @@ fn zirEmbedFile(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A |
| 8147 | embed_file.owner_decl = try anon_decl.finish( | 8154 | embed_file.owner_decl = try anon_decl.finish( |
| 8148 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), embed_file.bytes.len), | 8155 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), embed_file.bytes.len), |
| 8149 | try Value.Tag.bytes.create(anon_decl.arena(), bytes_including_null), | 8156 | try Value.Tag.bytes.create(anon_decl.arena(), bytes_including_null), |
| | 8157 | 0, // default alignment |
| 8150 | ); | 8158 | ); |
| 8151 | | 8159 | |
| 8152 | return sema.analyzeDeclRef(embed_file.owner_decl); | 8160 | return sema.analyzeDeclRef(embed_file.owner_decl); |
| ... | @@ -8560,7 +8568,7 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -8560,7 +8568,7 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 8560 | .elem_type = try lhs_info.elem_type.copy(anon_decl.arena()), | 8568 | .elem_type = try lhs_info.elem_type.copy(anon_decl.arena()), |
| 8561 | }); | 8569 | }); |
| 8562 | const val = try Value.Tag.aggregate.create(anon_decl.arena(), buf); | 8570 | const val = try Value.Tag.aggregate.create(anon_decl.arena(), buf); |
| 8563 | const decl = try anon_decl.finish(ty, val); | 8571 | const decl = try anon_decl.finish(ty, val, 0); |
| 8564 | if (lhs_single_ptr or rhs_single_ptr) { | 8572 | if (lhs_single_ptr or rhs_single_ptr) { |
| 8565 | return sema.analyzeDeclRef(decl); | 8573 | return sema.analyzeDeclRef(decl); |
| 8566 | } else { | 8574 | } else { |
| ... | @@ -8733,7 +8741,7 @@ fn zirArrayMul(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -8733,7 +8741,7 @@ fn zirArrayMul(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 8733 | } | 8741 | } |
| 8734 | break :blk try Value.Tag.aggregate.create(anon_decl.arena(), buf); | 8742 | break :blk try Value.Tag.aggregate.create(anon_decl.arena(), buf); |
| 8735 | }; | 8743 | }; |
| 8736 | const decl = try anon_decl.finish(final_ty, val); | 8744 | const decl = try anon_decl.finish(final_ty, val, 0); |
| 8737 | if (is_single_ptr) { | 8745 | if (is_single_ptr) { |
| 8738 | return sema.analyzeDeclRef(decl); | 8746 | return sema.analyzeDeclRef(decl); |
| 8739 | } else { | 8747 | } else { |
| ... | @@ -10384,6 +10392,7 @@ fn zirBuiltinSrc( | ... | @@ -10384,6 +10392,7 @@ fn zirBuiltinSrc( |
| 10384 | const new_decl = try anon_decl.finish( | 10392 | const new_decl = try anon_decl.finish( |
| 10385 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len - 1), | 10393 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len - 1), |
| 10386 | try Value.Tag.bytes.create(anon_decl.arena(), bytes), | 10394 | try Value.Tag.bytes.create(anon_decl.arena(), bytes), |
| | 10395 | 0, // default alignment |
| 10387 | ); | 10396 | ); |
| 10388 | break :blk try Value.Tag.decl_ref.create(sema.arena, new_decl); | 10397 | break :blk try Value.Tag.decl_ref.create(sema.arena, new_decl); |
| 10389 | }; | 10398 | }; |
| ... | @@ -10395,6 +10404,7 @@ fn zirBuiltinSrc( | ... | @@ -10395,6 +10404,7 @@ fn zirBuiltinSrc( |
| 10395 | const new_decl = try anon_decl.finish( | 10404 | const new_decl = try anon_decl.finish( |
| 10396 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), name.len), | 10405 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), name.len), |
| 10397 | try Value.Tag.bytes.create(anon_decl.arena(), name[0 .. name.len + 1]), | 10406 | try Value.Tag.bytes.create(anon_decl.arena(), name[0 .. name.len + 1]), |
| | 10407 | 0, // default alignment |
| 10398 | ); | 10408 | ); |
| 10399 | break :blk try Value.Tag.decl_ref.create(sema.arena, new_decl); | 10409 | break :blk try Value.Tag.decl_ref.create(sema.arena, new_decl); |
| 10400 | }; | 10410 | }; |
| ... | @@ -10547,6 +10557,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -10547,6 +10557,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 10547 | params_anon_decl.arena(), | 10557 | params_anon_decl.arena(), |
| 10548 | param_vals, | 10558 | param_vals, |
| 10549 | ), | 10559 | ), |
| | 10560 | 0, // default alignment |
| 10550 | ); | 10561 | ); |
| 10551 | break :v try Value.Tag.slice.create(sema.arena, .{ | 10562 | break :v try Value.Tag.slice.create(sema.arena, .{ |
| 10552 | .ptr = try Value.Tag.decl_ref.create(sema.arena, new_decl), | 10563 | .ptr = try Value.Tag.decl_ref.create(sema.arena, new_decl), |
| ... | @@ -10736,6 +10747,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -10736,6 +10747,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 10736 | const new_decl = try anon_decl.finish( | 10747 | const new_decl = try anon_decl.finish( |
| 10737 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), | 10748 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), |
| 10738 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), | 10749 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), |
| | 10750 | 0, // default alignment |
| 10739 | ); | 10751 | ); |
| 10740 | break :v try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl); | 10752 | break :v try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl); |
| 10741 | }; | 10753 | }; |
| ... | @@ -10766,6 +10778,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -10766,6 +10778,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 10766 | fields_anon_decl.arena(), | 10778 | fields_anon_decl.arena(), |
| 10767 | vals, | 10779 | vals, |
| 10768 | ), | 10780 | ), |
| | 10781 | 0, // default alignment |
| 10769 | ); | 10782 | ); |
| 10770 | | 10783 | |
| 10771 | const new_decl_val = try Value.Tag.decl_ref.create(sema.arena, new_decl); | 10784 | const new_decl_val = try Value.Tag.decl_ref.create(sema.arena, new_decl); |
| ... | @@ -10844,6 +10857,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -10844,6 +10857,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 10844 | const new_decl = try anon_decl.finish( | 10857 | const new_decl = try anon_decl.finish( |
| 10845 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), | 10858 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), |
| 10846 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), | 10859 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), |
| | 10860 | 0, // default alignment |
| 10847 | ); | 10861 | ); |
| 10848 | break :v try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl); | 10862 | break :v try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl); |
| 10849 | }; | 10863 | }; |
| ... | @@ -10868,6 +10882,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -10868,6 +10882,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 10868 | fields_anon_decl.arena(), | 10882 | fields_anon_decl.arena(), |
| 10869 | enum_field_vals, | 10883 | enum_field_vals, |
| 10870 | ), | 10884 | ), |
| | 10885 | 0, // default alignment |
| 10871 | ); | 10886 | ); |
| 10872 | break :v try Value.Tag.decl_ref.create(sema.arena, new_decl); | 10887 | break :v try Value.Tag.decl_ref.create(sema.arena, new_decl); |
| 10873 | }; | 10888 | }; |
| ... | @@ -10936,6 +10951,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -10936,6 +10951,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 10936 | const new_decl = try anon_decl.finish( | 10951 | const new_decl = try anon_decl.finish( |
| 10937 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), | 10952 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), |
| 10938 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), | 10953 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), |
| | 10954 | 0, // default alignment |
| 10939 | ); | 10955 | ); |
| 10940 | break :v try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl); | 10956 | break :v try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl); |
| 10941 | }; | 10957 | }; |
| ... | @@ -10967,6 +10983,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -10967,6 +10983,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 10967 | fields_anon_decl.arena(), | 10983 | fields_anon_decl.arena(), |
| 10968 | try fields_anon_decl.arena().dupe(Value, union_field_vals), | 10984 | try fields_anon_decl.arena().dupe(Value, union_field_vals), |
| 10969 | ), | 10985 | ), |
| | 10986 | 0, // default alignment |
| 10970 | ); | 10987 | ); |
| 10971 | break :v try Value.Tag.slice.create(sema.arena, .{ | 10988 | break :v try Value.Tag.slice.create(sema.arena, .{ |
| 10972 | .ptr = try Value.Tag.decl_ref.create(sema.arena, new_decl), | 10989 | .ptr = try Value.Tag.decl_ref.create(sema.arena, new_decl), |
| ... | @@ -11044,6 +11061,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -11044,6 +11061,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 11044 | const new_decl = try anon_decl.finish( | 11061 | const new_decl = try anon_decl.finish( |
| 11045 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), | 11062 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), |
| 11046 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), | 11063 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), |
| | 11064 | 0, // default alignment |
| 11047 | ); | 11065 | ); |
| 11048 | break :v try Value.Tag.slice.create(fields_anon_decl.arena(), .{ | 11066 | break :v try Value.Tag.slice.create(fields_anon_decl.arena(), .{ |
| 11049 | .ptr = try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl), | 11067 | .ptr = try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl), |
| ... | @@ -11087,6 +11105,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -11087,6 +11105,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 11087 | const new_decl = try anon_decl.finish( | 11105 | const new_decl = try anon_decl.finish( |
| 11088 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), | 11106 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), |
| 11089 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), | 11107 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), |
| | 11108 | 0, // default alignment |
| 11090 | ); | 11109 | ); |
| 11091 | break :v try Value.Tag.slice.create(fields_anon_decl.arena(), .{ | 11110 | break :v try Value.Tag.slice.create(fields_anon_decl.arena(), .{ |
| 11092 | .ptr = try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl), | 11111 | .ptr = try Value.Tag.decl_ref.create(fields_anon_decl.arena(), new_decl), |
| ... | @@ -11132,6 +11151,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -11132,6 +11151,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 11132 | fields_anon_decl.arena(), | 11151 | fields_anon_decl.arena(), |
| 11133 | try fields_anon_decl.arena().dupe(Value, struct_field_vals), | 11152 | try fields_anon_decl.arena().dupe(Value, struct_field_vals), |
| 11134 | ), | 11153 | ), |
| | 11154 | 0, // default alignment |
| 11135 | ); | 11155 | ); |
| 11136 | break :v try Value.Tag.slice.create(sema.arena, .{ | 11156 | break :v try Value.Tag.slice.create(sema.arena, .{ |
| 11137 | .ptr = try Value.Tag.decl_ref.create(sema.arena, new_decl), | 11157 | .ptr = try Value.Tag.decl_ref.create(sema.arena, new_decl), |
| ... | @@ -11225,6 +11245,7 @@ fn typeInfoDecls( | ... | @@ -11225,6 +11245,7 @@ fn typeInfoDecls( |
| 11225 | const new_decl = try anon_decl.finish( | 11245 | const new_decl = try anon_decl.finish( |
| 11226 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), | 11246 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), |
| 11227 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), | 11247 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), |
| | 11248 | 0, // default alignment |
| 11228 | ); | 11249 | ); |
| 11229 | break :v try Value.Tag.slice.create(decls_anon_decl.arena(), .{ | 11250 | break :v try Value.Tag.slice.create(decls_anon_decl.arena(), .{ |
| 11230 | .ptr = try Value.Tag.decl_ref.create(decls_anon_decl.arena(), new_decl), | 11251 | .ptr = try Value.Tag.decl_ref.create(decls_anon_decl.arena(), new_decl), |
| ... | @@ -11251,6 +11272,7 @@ fn typeInfoDecls( | ... | @@ -11251,6 +11272,7 @@ fn typeInfoDecls( |
| 11251 | decls_anon_decl.arena(), | 11272 | decls_anon_decl.arena(), |
| 11252 | try decls_anon_decl.arena().dupe(Value, decls_vals), | 11273 | try decls_anon_decl.arena().dupe(Value, decls_vals), |
| 11253 | ), | 11274 | ), |
| | 11275 | 0, // default alignment |
| 11254 | ); | 11276 | ); |
| 11255 | return try Value.Tag.slice.create(sema.arena, .{ | 11277 | return try Value.Tag.slice.create(sema.arena, .{ |
| 11256 | .ptr = try Value.Tag.decl_ref.create(sema.arena, new_decl), | 11278 | .ptr = try Value.Tag.decl_ref.create(sema.arena, new_decl), |
| ... | @@ -12350,6 +12372,7 @@ fn addConstantMaybeRef( | ... | @@ -12350,6 +12372,7 @@ fn addConstantMaybeRef( |
| 12350 | const decl = try anon_decl.finish( | 12372 | const decl = try anon_decl.finish( |
| 12351 | try ty.copy(anon_decl.arena()), | 12373 | try ty.copy(anon_decl.arena()), |
| 12352 | try val.copy(anon_decl.arena()), | 12374 | try val.copy(anon_decl.arena()), |
| | 12375 | 0, // default alignment |
| 12353 | ); | 12376 | ); |
| 12354 | return sema.analyzeDeclRef(decl); | 12377 | return sema.analyzeDeclRef(decl); |
| 12355 | } | 12378 | } |
| ... | @@ -13227,6 +13250,7 @@ fn zirTypeName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -13227,6 +13250,7 @@ fn zirTypeName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 13227 | const new_decl = try anon_decl.finish( | 13250 | const new_decl = try anon_decl.finish( |
| 13228 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), | 13251 | try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), bytes.len), |
| 13229 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), | 13252 | try Value.Tag.bytes.create(anon_decl.arena(), bytes[0 .. bytes.len + 1]), |
| | 13253 | 0, // default alignment |
| 13230 | ); | 13254 | ); |
| 13231 | | 13255 | |
| 13232 | return sema.analyzeDeclRef(new_decl); | 13256 | return sema.analyzeDeclRef(new_decl); |
| ... | @@ -15851,6 +15875,7 @@ fn safetyPanic( | ... | @@ -15851,6 +15875,7 @@ fn safetyPanic( |
| 15851 | break :msg_inst try sema.analyzeDeclRef(try anon_decl.finish( | 15875 | break :msg_inst try sema.analyzeDeclRef(try anon_decl.finish( |
| 15852 | try Type.Tag.array_u8.create(anon_decl.arena(), msg.len), | 15876 | try Type.Tag.array_u8.create(anon_decl.arena(), msg.len), |
| 15853 | try Value.Tag.bytes.create(anon_decl.arena(), msg), | 15877 | try Value.Tag.bytes.create(anon_decl.arena(), msg), |
| | 15878 | 0, // default alignment |
| 15854 | )); | 15879 | )); |
| 15855 | }; | 15880 | }; |
| 15856 | | 15881 | |
| ... | @@ -16080,6 +16105,7 @@ fn fieldPtr( | ... | @@ -16080,6 +16105,7 @@ fn fieldPtr( |
| 16080 | return sema.analyzeDeclRef(try anon_decl.finish( | 16105 | return sema.analyzeDeclRef(try anon_decl.finish( |
| 16081 | Type.usize, | 16106 | Type.usize, |
| 16082 | try Value.Tag.int_u64.create(anon_decl.arena(), inner_ty.arrayLen()), | 16107 | try Value.Tag.int_u64.create(anon_decl.arena(), inner_ty.arrayLen()), |
| | 16108 | 0, // default alignment |
| 16083 | )); | 16109 | )); |
| 16084 | } else { | 16110 | } else { |
| 16085 | return sema.fail( | 16111 | return sema.fail( |
| ... | @@ -16107,6 +16133,7 @@ fn fieldPtr( | ... | @@ -16107,6 +16133,7 @@ fn fieldPtr( |
| 16107 | return sema.analyzeDeclRef(try anon_decl.finish( | 16133 | return sema.analyzeDeclRef(try anon_decl.finish( |
| 16108 | try slice_ptr_ty.copy(anon_decl.arena()), | 16134 | try slice_ptr_ty.copy(anon_decl.arena()), |
| 16109 | try val.slicePtr().copy(anon_decl.arena()), | 16135 | try val.slicePtr().copy(anon_decl.arena()), |
| | 16136 | 0, // default alignment |
| 16110 | )); | 16137 | )); |
| 16111 | } | 16138 | } |
| 16112 | try sema.requireRuntimeBlock(block, src); | 16139 | try sema.requireRuntimeBlock(block, src); |
| ... | @@ -16126,6 +16153,7 @@ fn fieldPtr( | ... | @@ -16126,6 +16153,7 @@ fn fieldPtr( |
| 16126 | return sema.analyzeDeclRef(try anon_decl.finish( | 16153 | return sema.analyzeDeclRef(try anon_decl.finish( |
| 16127 | Type.usize, | 16154 | Type.usize, |
| 16128 | try Value.Tag.int_u64.create(anon_decl.arena(), val.sliceLen()), | 16155 | try Value.Tag.int_u64.create(anon_decl.arena(), val.sliceLen()), |
| | 16156 | 0, // default alignment |
| 16129 | )); | 16157 | )); |
| 16130 | } | 16158 | } |
| 16131 | try sema.requireRuntimeBlock(block, src); | 16159 | try sema.requireRuntimeBlock(block, src); |
| ... | @@ -16175,6 +16203,7 @@ fn fieldPtr( | ... | @@ -16175,6 +16203,7 @@ fn fieldPtr( |
| 16175 | return sema.analyzeDeclRef(try anon_decl.finish( | 16203 | return sema.analyzeDeclRef(try anon_decl.finish( |
| 16176 | try child_type.copy(anon_decl.arena()), | 16204 | try child_type.copy(anon_decl.arena()), |
| 16177 | try Value.Tag.@"error".create(anon_decl.arena(), .{ .name = name }), | 16205 | try Value.Tag.@"error".create(anon_decl.arena(), .{ .name = name }), |
| | 16206 | 0, // default alignment |
| 16178 | )); | 16207 | )); |
| 16179 | }, | 16208 | }, |
| 16180 | .Union => { | 16209 | .Union => { |
| ... | @@ -16191,6 +16220,7 @@ fn fieldPtr( | ... | @@ -16191,6 +16220,7 @@ fn fieldPtr( |
| 16191 | return sema.analyzeDeclRef(try anon_decl.finish( | 16220 | return sema.analyzeDeclRef(try anon_decl.finish( |
| 16192 | try enum_ty.copy(anon_decl.arena()), | 16221 | try enum_ty.copy(anon_decl.arena()), |
| 16193 | try Value.Tag.enum_field_index.create(anon_decl.arena(), field_index_u32), | 16222 | try Value.Tag.enum_field_index.create(anon_decl.arena(), field_index_u32), |
| | 16223 | 0, // default alignment |
| 16194 | )); | 16224 | )); |
| 16195 | } | 16225 | } |
| 16196 | } | 16226 | } |
| ... | @@ -16211,6 +16241,7 @@ fn fieldPtr( | ... | @@ -16211,6 +16241,7 @@ fn fieldPtr( |
| 16211 | return sema.analyzeDeclRef(try anon_decl.finish( | 16241 | return sema.analyzeDeclRef(try anon_decl.finish( |
| 16212 | try child_type.copy(anon_decl.arena()), | 16242 | try child_type.copy(anon_decl.arena()), |
| 16213 | try Value.Tag.enum_field_index.create(anon_decl.arena(), field_index_u32), | 16243 | try Value.Tag.enum_field_index.create(anon_decl.arena(), field_index_u32), |
| | 16244 | 0, // default alignment |
| 16214 | )); | 16245 | )); |
| 16215 | }, | 16246 | }, |
| 16216 | .Struct, .Opaque => { | 16247 | .Struct, .Opaque => { |
| ... | @@ -16522,10 +16553,8 @@ fn structFieldPtrByIndex( | ... | @@ -16522,10 +16553,8 @@ fn structFieldPtrByIndex( |
| 16522 | const decl = try anon_decl.finish( | 16553 | const decl = try anon_decl.finish( |
| 16523 | try field.ty.copy(anon_decl.arena()), | 16554 | try field.ty.copy(anon_decl.arena()), |
| 16524 | try field.default_val.copy(anon_decl.arena()), | 16555 | try field.default_val.copy(anon_decl.arena()), |
| | 16556 | ptr_ty_data.@"align", |
| 16525 | ); | 16557 | ); |
| 16526 | if (ptr_ty_data.@"align" != 0) { | | |
| 16527 | decl.align_val = field.abi_align; | | |
| 16528 | } | | |
| 16529 | return sema.analyzeDeclRef(decl); | 16558 | return sema.analyzeDeclRef(decl); |
| 16530 | } | 16559 | } |
| 16531 | | 16560 | |
| ... | @@ -19114,6 +19143,7 @@ fn refValue(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type, val: Value) ! | ... | @@ -19114,6 +19143,7 @@ fn refValue(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type, val: Value) ! |
| 19114 | const decl = try anon_decl.finish( | 19143 | const decl = try anon_decl.finish( |
| 19115 | try ty.copy(anon_decl.arena()), | 19144 | try ty.copy(anon_decl.arena()), |
| 19116 | try val.copy(anon_decl.arena()), | 19145 | try val.copy(anon_decl.arena()), |
| | 19146 | 0, // default alignment |
| 19117 | ); | 19147 | ); |
| 19118 | try sema.mod.declareDeclDependency(sema.owner_decl, decl); | 19148 | try sema.mod.declareDeclDependency(sema.owner_decl, decl); |
| 19119 | return try Value.Tag.decl_ref.create(sema.arena, decl); | 19149 | return try Value.Tag.decl_ref.create(sema.arena, decl); |
| ... | @@ -19170,6 +19200,7 @@ fn analyzeRef( | ... | @@ -19170,6 +19200,7 @@ fn analyzeRef( |
| 19170 | return sema.analyzeDeclRef(try anon_decl.finish( | 19200 | return sema.analyzeDeclRef(try anon_decl.finish( |
| 19171 | try operand_ty.copy(anon_decl.arena()), | 19201 | try operand_ty.copy(anon_decl.arena()), |
| 19172 | try val.copy(anon_decl.arena()), | 19202 | try val.copy(anon_decl.arena()), |
| | 19203 | 0, // default alignment |
| 19173 | )); | 19204 | )); |
| 19174 | } | 19205 | } |
| 19175 | | 19206 | |
| ... | @@ -21614,6 +21645,7 @@ fn analyzeComptimeAlloc( | ... | @@ -21614,6 +21645,7 @@ fn analyzeComptimeAlloc( |
| 21614 | // sub-fields. So we need to initialize with undef to allow the mechanism to expand | 21645 | // sub-fields. So we need to initialize with undef to allow the mechanism to expand |
| 21615 | // into fields/elements and have those overridden with stored values. | 21646 | // into fields/elements and have those overridden with stored values. |
| 21616 | Value.undef, | 21647 | Value.undef, |
| | 21648 | alignment, |
| 21617 | ); | 21649 | ); |
| 21618 | decl.align_val = align_val; | 21650 | decl.align_val = align_val; |
| 21619 | | 21651 | |