| ... | ... | @@ -5466,19 +5466,24 @@ fn addStrLitNoAlias(sema: *Sema, bytes: []const u8) CompileError!Air.Inst.Ref { |
| 5466 | 5466 | .ty = array_ty.toIntern(), |
| 5467 | 5467 | .storage = .{ .bytes = bytes }, |
| 5468 | 5468 | } }); |
| 5469 | | const ptr_ty = try sema.ptrType(.{ |
| 5470 | | .child = array_ty.toIntern(), |
| 5469 | return anonDeclRef(sema, val); |
| 5470 | } |
| 5471 | |
| 5472 | fn anonDeclRef(sema: *Sema, val: InternPool.Index) CompileError!Air.Inst.Ref { |
| 5473 | const mod = sema.mod; |
| 5474 | const ptr_ty = (try sema.ptrType(.{ |
| 5475 | .child = mod.intern_pool.typeOf(val), |
| 5471 | 5476 | .flags = .{ |
| 5472 | 5477 | .alignment = .none, |
| 5473 | 5478 | .is_const = true, |
| 5474 | 5479 | .address_space = .generic, |
| 5475 | 5480 | }, |
| 5476 | | }); |
| 5481 | })).toIntern(); |
| 5477 | 5482 | return Air.internedToRef(try mod.intern(.{ .ptr = .{ |
| 5478 | | .ty = ptr_ty.toIntern(), |
| 5483 | .ty = ptr_ty, |
| 5479 | 5484 | .addr = .{ .anon_decl = .{ |
| 5480 | 5485 | .val = val, |
| 5481 | | .orig_ty = ptr_ty.toIntern(), |
| 5486 | .orig_ty = ptr_ty, |
| 5482 | 5487 | } }, |
| 5483 | 5488 | } })); |
| 5484 | 5489 | } |
| ... | ... | @@ -10740,7 +10745,7 @@ const SwitchProngAnalysis = struct { |
| 10740 | 10745 | return block.addStructFieldVal(spa.operand, field_index, field_ty); |
| 10741 | 10746 | } |
| 10742 | 10747 | } else if (capture_byref) { |
| 10743 | | return sema.addConstantMaybeRef(block, operand_ty, item_val, true); |
| 10748 | return anonDeclRef(sema, item_val.toIntern()); |
| 10744 | 10749 | } else { |
| 10745 | 10750 | return inline_case_capture; |
| 10746 | 10751 | } |
| ... | ... | @@ -13765,10 +13770,10 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 13765 | 13770 | const coerced_elem_val = try sema.resolveConstValue(block, .unneeded, coerced_elem_val_inst, undefined); |
| 13766 | 13771 | element_vals[elem_i] = try coerced_elem_val.intern(resolved_elem_ty, mod); |
| 13767 | 13772 | } |
| 13768 | | return sema.addConstantMaybeRef(block, result_ty, (try mod.intern(.{ .aggregate = .{ |
| 13773 | return sema.addConstantMaybeRef(try mod.intern(.{ .aggregate = .{ |
| 13769 | 13774 | .ty = result_ty.toIntern(), |
| 13770 | 13775 | .storage = .{ .elems = element_vals }, |
| 13771 | | } })).toValue(), ptr_addrspace != null); |
| 13776 | } }), ptr_addrspace != null); |
| 13772 | 13777 | } else break :rs rhs_src; |
| 13773 | 13778 | } else lhs_src; |
| 13774 | 13779 | |
| ... | ... | @@ -14034,7 +14039,7 @@ fn zirArrayMul(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 14034 | 14039 | .storage = .{ .elems = element_vals }, |
| 14035 | 14040 | } }); |
| 14036 | 14041 | }; |
| 14037 | | return sema.addConstantMaybeRef(block, result_ty, val.toValue(), ptr_addrspace != null); |
| 14042 | return sema.addConstantMaybeRef(val, ptr_addrspace != null); |
| 14038 | 14043 | } |
| 14039 | 14044 | |
| 14040 | 14045 | try sema.requireRuntimeBlock(block, src, lhs_src); |
| ... | ... | @@ -19022,10 +19027,7 @@ fn zirStructInitEmptyResult(sema: *Sema, block: *Block, inst: Zir.Inst.Index, is |
| 19022 | 19027 | |
| 19023 | 19028 | if (is_byref) { |
| 19024 | 19029 | const init_val = (try sema.resolveValue(init_ref)).?; |
| 19025 | | var anon_decl = try block.startAnonDecl(); |
| 19026 | | defer anon_decl.deinit(); |
| 19027 | | const decl = try anon_decl.finish(init_ty, init_val, .none); |
| 19028 | | return sema.analyzeDeclRef(decl); |
| 19030 | return anonDeclRef(sema, init_val.toIntern()); |
| 19029 | 19031 | } else { |
| 19030 | 19032 | return init_ref; |
| 19031 | 19033 | } |
| ... | ... | @@ -19248,7 +19250,7 @@ fn zirStructInit( |
| 19248 | 19250 | } })).toValue(); |
| 19249 | 19251 | const final_val_inst = try sema.coerce(block, result_ty, Air.internedToRef(struct_val.toIntern()), src); |
| 19250 | 19252 | const final_val = (try sema.resolveValue(final_val_inst)).?; |
| 19251 | | return sema.addConstantMaybeRef(block, resolved_ty, final_val, is_ref); |
| 19253 | return sema.addConstantMaybeRef(final_val.toIntern(), is_ref); |
| 19252 | 19254 | } |
| 19253 | 19255 | |
| 19254 | 19256 | if (try sema.typeRequiresComptime(resolved_ty)) { |
| ... | ... | @@ -19408,7 +19410,7 @@ fn finishStructInit( |
| 19408 | 19410 | } }); |
| 19409 | 19411 | const final_val_inst = try sema.coerce(block, result_ty, Air.internedToRef(struct_val), init_src); |
| 19410 | 19412 | const final_val = (try sema.resolveValue(final_val_inst)).?; |
| 19411 | | return sema.addConstantMaybeRef(block, result_ty, final_val, is_ref); |
| 19413 | return sema.addConstantMaybeRef(final_val.toIntern(), is_ref); |
| 19412 | 19414 | }; |
| 19413 | 19415 | |
| 19414 | 19416 | if (try sema.typeRequiresComptime(struct_ty)) { |
| ... | ... | @@ -19561,7 +19563,7 @@ fn structInitAnon( |
| 19561 | 19563 | .ty = tuple_ty, |
| 19562 | 19564 | .storage = .{ .elems = values }, |
| 19563 | 19565 | } }); |
| 19564 | | return sema.addConstantMaybeRef(block, tuple_ty.toType(), tuple_val.toValue(), is_ref); |
| 19566 | return sema.addConstantMaybeRef(tuple_val, is_ref); |
| 19565 | 19567 | }; |
| 19566 | 19568 | |
| 19567 | 19569 | sema.requireRuntimeBlock(block, .unneeded, null) catch |err| switch (err) { |
| ... | ... | @@ -19727,7 +19729,8 @@ fn zirArrayInit( |
| 19727 | 19729 | .storage = .{ .elems = elem_vals }, |
| 19728 | 19730 | } }); |
| 19729 | 19731 | const result_ref = try sema.coerce(block, result_ty, Air.internedToRef(arr_val), src); |
| 19730 | | return sema.addConstantMaybeRef(block, result_ty, (try sema.resolveValue(result_ref)).?, is_ref); |
| 19732 | const result_val = (try sema.resolveValue(result_ref)).?; |
| 19733 | return sema.addConstantMaybeRef(result_val.toIntern(), is_ref); |
| 19731 | 19734 | }; |
| 19732 | 19735 | |
| 19733 | 19736 | sema.requireRuntimeBlock(block, .unneeded, null) catch |err| switch (err) { |
| ... | ... | @@ -19846,7 +19849,7 @@ fn arrayInitAnon( |
| 19846 | 19849 | .ty = tuple_ty, |
| 19847 | 19850 | .storage = .{ .elems = values }, |
| 19848 | 19851 | } }); |
| 19849 | | return sema.addConstantMaybeRef(block, tuple_ty.toType(), tuple_val.toValue(), is_ref); |
| 19852 | return sema.addConstantMaybeRef(tuple_val, is_ref); |
| 19850 | 19853 | }; |
| 19851 | 19854 | |
| 19852 | 19855 | try sema.requireRuntimeBlock(block, src, runtime_src); |
| ... | ... | @@ -19881,23 +19884,8 @@ fn arrayInitAnon( |
| 19881 | 19884 | return block.addAggregateInit(tuple_ty.toType(), element_refs); |
| 19882 | 19885 | } |
| 19883 | 19886 | |
| 19884 | | fn addConstantMaybeRef( |
| 19885 | | sema: *Sema, |
| 19886 | | block: *Block, |
| 19887 | | ty: Type, |
| 19888 | | val: Value, |
| 19889 | | is_ref: bool, |
| 19890 | | ) !Air.Inst.Ref { |
| 19891 | | if (!is_ref) return Air.internedToRef(val.toIntern()); |
| 19892 | | |
| 19893 | | var anon_decl = try block.startAnonDecl(); |
| 19894 | | defer anon_decl.deinit(); |
| 19895 | | const decl = try anon_decl.finish( |
| 19896 | | ty, |
| 19897 | | val, |
| 19898 | | .none, // default alignment |
| 19899 | | ); |
| 19900 | | return sema.analyzeDeclRef(decl); |
| 19887 | fn addConstantMaybeRef(sema: *Sema, val: InternPool.Index, is_ref: bool) !Air.Inst.Ref { |
| 19888 | return if (is_ref) anonDeclRef(sema, val) else Air.internedToRef(val); |
| 19901 | 19889 | } |
| 19902 | 19890 | |
| 19903 | 19891 | fn zirFieldTypeRef(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { |