| ... | ... | @@ -360,16 +360,11 @@ const ResultInfo = struct { |
| 360 | 360 | }; |
| 361 | 361 | }; |
| 362 | 362 | |
| 363 | | /// TODO: modify Sema to remove in favour of `coerced_align_ri` |
| 364 | | const align_ri: ResultInfo = .{ .rl = .{ .ty = .u29_type } }; |
| 365 | 363 | const coerced_align_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .u29_type } }; |
| 366 | | /// TODO: modify Sema to remove in favour of `coerced_addrspace_ri` |
| 367 | | const addrspace_ri: ResultInfo = .{ .rl = .{ .ty = .address_space_type } }; |
| 368 | 364 | const coerced_addrspace_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .address_space_type } }; |
| 369 | 365 | const coerced_linksection_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }; |
| 370 | | const bool_ri: ResultInfo = .{ .rl = .{ .ty = .bool_type } }; |
| 371 | | const type_ri: ResultInfo = .{ .rl = .{ .ty = .type_type } }; |
| 372 | 366 | const coerced_type_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .type_type } }; |
| 367 | const coerced_bool_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .bool_type } }; |
| 373 | 368 | |
| 374 | 369 | fn typeExpr(gz: *GenZir, scope: *Scope, type_node: Ast.Node.Index) InnerError!Zir.Inst.Ref { |
| 375 | 370 | return comptimeExpr(gz, scope, coerced_type_ri, type_node); |
| ... | ... | @@ -786,7 +781,7 @@ fn expr(gz: *GenZir, scope: *Scope, ri: ResultInfo, node: Ast.Node.Index) InnerE |
| 786 | 781 | .bool_and => return boolBinOp(gz, scope, ri, node, .bool_br_and), |
| 787 | 782 | .bool_or => return boolBinOp(gz, scope, ri, node, .bool_br_or), |
| 788 | 783 | |
| 789 | | .bool_not => return simpleUnOp(gz, scope, ri, node, bool_ri, node_datas[node].lhs, .bool_not), |
| 784 | .bool_not => return simpleUnOp(gz, scope, ri, node, coerced_bool_ri, node_datas[node].lhs, .bool_not), |
| 790 | 785 | .bit_not => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, node_datas[node].lhs, .bit_not), |
| 791 | 786 | |
| 792 | 787 | .negation => return negation(gz, scope, ri, node), |
| ... | ... | @@ -1372,7 +1367,7 @@ fn fnProtoExpr( |
| 1372 | 1367 | }; |
| 1373 | 1368 | |
| 1374 | 1369 | const align_ref: Zir.Inst.Ref = if (fn_proto.ast.align_expr == 0) .none else inst: { |
| 1375 | | break :inst try expr(&block_scope, scope, align_ri, fn_proto.ast.align_expr); |
| 1370 | break :inst try expr(&block_scope, scope, coerced_align_ri, fn_proto.ast.align_expr); |
| 1376 | 1371 | }; |
| 1377 | 1372 | |
| 1378 | 1373 | if (fn_proto.ast.addrspace_expr != 0) { |
| ... | ... | @@ -1387,7 +1382,7 @@ fn fnProtoExpr( |
| 1387 | 1382 | try expr( |
| 1388 | 1383 | &block_scope, |
| 1389 | 1384 | scope, |
| 1390 | | .{ .rl = .{ .ty = .calling_convention_type } }, |
| 1385 | .{ .rl = .{ .coerced_ty = .calling_convention_type } }, |
| 1391 | 1386 | fn_proto.ast.callconv_expr, |
| 1392 | 1387 | ) |
| 1393 | 1388 | else |
| ... | ... | @@ -3136,7 +3131,7 @@ fn varDecl( |
| 3136 | 3131 | } |
| 3137 | 3132 | |
| 3138 | 3133 | const align_inst: Zir.Inst.Ref = if (var_decl.ast.align_node != 0) |
| 3139 | | try expr(gz, scope, align_ri, var_decl.ast.align_node) |
| 3134 | try expr(gz, scope, coerced_align_ri, var_decl.ast.align_node) |
| 3140 | 3135 | else |
| 3141 | 3136 | .none; |
| 3142 | 3137 | |
| ... | ... | @@ -3505,7 +3500,7 @@ fn assignDestructureMaybeDecls( |
| 3505 | 3500 | const this_lhs_comptime = is_comptime or (is_const and rhs_is_comptime); |
| 3506 | 3501 | |
| 3507 | 3502 | const align_inst: Zir.Inst.Ref = if (full.ast.align_node != 0) |
| 3508 | | try expr(gz, scope, align_ri, full.ast.align_node) |
| 3503 | try expr(gz, scope, coerced_align_ri, full.ast.align_node) |
| 3509 | 3504 | else |
| 3510 | 3505 | .none; |
| 3511 | 3506 | |
| ... | ... | @@ -3783,7 +3778,7 @@ fn ptrType( |
| 3783 | 3778 | gz.astgen.source_line = source_line; |
| 3784 | 3779 | gz.astgen.source_column = source_column; |
| 3785 | 3780 | |
| 3786 | | addrspace_ref = try expr(gz, scope, addrspace_ri, ptr_info.ast.addrspace_node); |
| 3781 | addrspace_ref = try expr(gz, scope, coerced_addrspace_ri, ptr_info.ast.addrspace_node); |
| 3787 | 3782 | trailing_count += 1; |
| 3788 | 3783 | } |
| 3789 | 3784 | if (ptr_info.ast.align_node != 0) { |
| ... | ... | @@ -4176,7 +4171,7 @@ fn fnDecl( |
| 4176 | 4171 | var addrspace_gz = decl_gz.makeSubBlock(params_scope); |
| 4177 | 4172 | defer addrspace_gz.unstack(); |
| 4178 | 4173 | const addrspace_ref: Zir.Inst.Ref = if (fn_proto.ast.addrspace_expr == 0) .none else inst: { |
| 4179 | | const inst = try expr(&decl_gz, params_scope, addrspace_ri, fn_proto.ast.addrspace_expr); |
| 4174 | const inst = try expr(&decl_gz, params_scope, coerced_addrspace_ri, fn_proto.ast.addrspace_expr); |
| 4180 | 4175 | if (addrspace_gz.instructionsSlice().len == 0) { |
| 4181 | 4176 | // In this case we will send a len=0 body which can be encoded more efficiently. |
| 4182 | 4177 | break :inst inst; |
| ... | ... | @@ -4431,7 +4426,7 @@ fn globalVarDecl( |
| 4431 | 4426 | try expr( |
| 4432 | 4427 | &block_scope, |
| 4433 | 4428 | &block_scope.base, |
| 4434 | | .{ .rl = .{ .ty = .type_type } }, |
| 4429 | coerced_type_ri, |
| 4435 | 4430 | var_decl.ast.type_node, |
| 4436 | 4431 | ) |
| 4437 | 4432 | else |
| ... | ... | @@ -5254,7 +5249,7 @@ fn unionDeclInner( |
| 5254 | 5249 | return astgen.failNode(member_node, "union field missing type", .{}); |
| 5255 | 5250 | } |
| 5256 | 5251 | if (have_align) { |
| 5257 | | const align_inst = try expr(&block_scope, &block_scope.base, .{ .rl = .{ .ty = .u32_type } }, member.ast.align_expr); |
| 5252 | const align_inst = try expr(&block_scope, &block_scope.base, coerced_align_ri, member.ast.align_expr); |
| 5258 | 5253 | wip_members.appendToField(@intFromEnum(align_inst)); |
| 5259 | 5254 | any_aligned_fields = true; |
| 5260 | 5255 | } |
| ... | ... | @@ -5522,7 +5517,7 @@ fn containerDecl( |
| 5522 | 5517 | namespace.base.tag = .enum_namespace; |
| 5523 | 5518 | |
| 5524 | 5519 | const arg_inst: Zir.Inst.Ref = if (container_decl.ast.arg != 0) |
| 5525 | | try comptimeExpr(&block_scope, &namespace.base, .{ .rl = .{ .ty = .type_type } }, container_decl.ast.arg) |
| 5520 | try comptimeExpr(&block_scope, &namespace.base, coerced_type_ri, container_decl.ast.arg) |
| 5526 | 5521 | else |
| 5527 | 5522 | .none; |
| 5528 | 5523 | |
| ... | ... | @@ -6079,7 +6074,7 @@ fn arrayAccess( |
| 6079 | 6074 | |
| 6080 | 6075 | const cursor = maybeAdvanceSourceCursorToMainToken(gz, node); |
| 6081 | 6076 | |
| 6082 | | const rhs = try expr(gz, scope, .{ .rl = .{ .ty = .usize_type } }, node_datas[node].rhs); |
| 6077 | const rhs = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, node_datas[node].rhs); |
| 6083 | 6078 | try emitDbgStmt(gz, cursor); |
| 6084 | 6079 | |
| 6085 | 6080 | return gz.addPlNode(.elem_ptr_node, node, Zir.Inst.Bin{ .lhs = lhs, .rhs = rhs }); |
| ... | ... | @@ -6089,7 +6084,7 @@ fn arrayAccess( |
| 6089 | 6084 | |
| 6090 | 6085 | const cursor = maybeAdvanceSourceCursorToMainToken(gz, node); |
| 6091 | 6086 | |
| 6092 | | const rhs = try expr(gz, scope, .{ .rl = .{ .ty = .usize_type } }, node_datas[node].rhs); |
| 6087 | const rhs = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, node_datas[node].rhs); |
| 6093 | 6088 | try emitDbgStmt(gz, cursor); |
| 6094 | 6089 | |
| 6095 | 6090 | return rvalue(gz, ri, try gz.addPlNode(.elem_val_node, node, Zir.Inst.Bin{ .lhs = lhs, .rhs = rhs }), node); |
| ... | ... | @@ -6157,12 +6152,12 @@ fn boolBinOp( |
| 6157 | 6152 | const tree = astgen.tree; |
| 6158 | 6153 | const node_datas = tree.nodes.items(.data); |
| 6159 | 6154 | |
| 6160 | | const lhs = try expr(gz, scope, bool_ri, node_datas[node].lhs); |
| 6155 | const lhs = try expr(gz, scope, coerced_bool_ri, node_datas[node].lhs); |
| 6161 | 6156 | const bool_br = (try gz.addPlNodePayloadIndex(zir_tag, node, undefined)).toIndex().?; |
| 6162 | 6157 | |
| 6163 | 6158 | var rhs_scope = gz.makeSubBlock(scope); |
| 6164 | 6159 | defer rhs_scope.unstack(); |
| 6165 | | const rhs = try expr(&rhs_scope, &rhs_scope.base, bool_ri, node_datas[node].rhs); |
| 6160 | const rhs = try expr(&rhs_scope, &rhs_scope.base, coerced_bool_ri, node_datas[node].rhs); |
| 6166 | 6161 | if (!gz.refIsNoReturn(rhs)) { |
| 6167 | 6162 | _ = try rhs_scope.addBreakWithSrcNode(.break_inline, bool_br, rhs, node_datas[node].rhs); |
| 6168 | 6163 | } |
| ... | ... | @@ -6230,7 +6225,7 @@ fn ifExpr( |
| 6230 | 6225 | .bool_bit = try block_scope.addUnNode(tag, optional, if_full.ast.cond_expr), |
| 6231 | 6226 | }; |
| 6232 | 6227 | } else { |
| 6233 | | const cond = try expr(&block_scope, &block_scope.base, bool_ri, if_full.ast.cond_expr); |
| 6228 | const cond = try expr(&block_scope, &block_scope.base, coerced_bool_ri, if_full.ast.cond_expr); |
| 6234 | 6229 | break :c .{ |
| 6235 | 6230 | .inst = cond, |
| 6236 | 6231 | .bool_bit = cond, |
| ... | ... | @@ -6476,7 +6471,7 @@ fn whileExpr( |
| 6476 | 6471 | .bool_bit = try cond_scope.addUnNode(tag, optional, while_full.ast.cond_expr), |
| 6477 | 6472 | }; |
| 6478 | 6473 | } else { |
| 6479 | | const cond = try expr(&cond_scope, &cond_scope.base, bool_ri, while_full.ast.cond_expr); |
| 6474 | const cond = try expr(&cond_scope, &cond_scope.base, coerced_bool_ri, while_full.ast.cond_expr); |
| 6480 | 6475 | break :c .{ |
| 6481 | 6476 | .inst = cond, |
| 6482 | 6477 | .bool_bit = cond, |
| ... | ... | @@ -8052,7 +8047,7 @@ fn ret(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Inst.Ref |
| 8052 | 8047 | .rl = .{ .ptr = .{ .inst = try gz.addNode(.ret_ptr, node) } }, |
| 8053 | 8048 | .ctx = .@"return", |
| 8054 | 8049 | } else .{ |
| 8055 | | .rl = .{ .ty = astgen.fn_ret_ty }, |
| 8050 | .rl = .{ .coerced_ty = astgen.fn_ret_ty }, |
| 8056 | 8051 | .ctx = .@"return", |
| 8057 | 8052 | }; |
| 8058 | 8053 | const prev_anon_name_strategy = gz.anon_name_strategy; |
| ... | ... | @@ -8688,7 +8683,7 @@ fn unionInit( |
| 8688 | 8683 | params: []const Ast.Node.Index, |
| 8689 | 8684 | ) InnerError!Zir.Inst.Ref { |
| 8690 | 8685 | const union_type = try typeExpr(gz, scope, params[0]); |
| 8691 | | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[1]); |
| 8686 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[1]); |
| 8692 | 8687 | const field_type = try gz.addPlNode(.field_type_ref, node, Zir.Inst.FieldTypeRef{ |
| 8693 | 8688 | .container_type = union_type, |
| 8694 | 8689 | .field_name = field_name, |
| ... | ... | @@ -9001,12 +8996,12 @@ fn builtinCall( |
| 9001 | 8996 | if (ri.rl == .ref or ri.rl == .ref_coerced_ty) { |
| 9002 | 8997 | return gz.addPlNode(.field_ptr_named, node, Zir.Inst.FieldNamed{ |
| 9003 | 8998 | .lhs = try expr(gz, scope, .{ .rl = .ref }, params[0]), |
| 9004 | | .field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[1]), |
| 8999 | .field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[1]), |
| 9005 | 9000 | }); |
| 9006 | 9001 | } |
| 9007 | 9002 | const result = try gz.addPlNode(.field_val_named, node, Zir.Inst.FieldNamed{ |
| 9008 | 9003 | .lhs = try expr(gz, scope, .{ .rl = .none }, params[0]), |
| 9009 | | .field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[1]), |
| 9004 | .field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[1]), |
| 9010 | 9005 | }); |
| 9011 | 9006 | return rvalue(gz, ri, result, node); |
| 9012 | 9007 | }, |
| ... | ... | @@ -9133,7 +9128,7 @@ fn builtinCall( |
| 9133 | 9128 | return rvalue(gz, ri, .void_value, node); |
| 9134 | 9129 | }, |
| 9135 | 9130 | .set_align_stack => { |
| 9136 | | const order = try expr(gz, scope, align_ri, params[0]); |
| 9131 | const order = try expr(gz, scope, coerced_align_ri, params[0]); |
| 9137 | 9132 | _ = try gz.addExtendedPayload(.set_align_stack, Zir.Inst.UnNode{ |
| 9138 | 9133 | .node = gz.nodeIndexToRelative(node), |
| 9139 | 9134 | .operand = order, |
| ... | ... | @@ -9175,32 +9170,32 @@ fn builtinCall( |
| 9175 | 9170 | .bit_size_of => return simpleUnOpType(gz, scope, ri, node, params[0], .bit_size_of), |
| 9176 | 9171 | .align_of => return simpleUnOpType(gz, scope, ri, node, params[0], .align_of), |
| 9177 | 9172 | |
| 9178 | | .int_from_ptr => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_ptr), |
| 9179 | | .compile_error => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .compile_error), |
| 9180 | | .set_eval_branch_quota => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .u32_type } }, params[0], .set_eval_branch_quota), |
| 9181 | | .int_from_enum => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_enum), |
| 9182 | | .int_from_bool => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_bool), |
| 9183 | | .embed_file => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .embed_file), |
| 9184 | | .error_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .anyerror_type } }, params[0], .error_name), |
| 9185 | | .set_runtime_safety => return simpleUnOp(gz, scope, ri, node, bool_ri, params[0], .set_runtime_safety), |
| 9186 | | .sqrt => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .sqrt), |
| 9187 | | .sin => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .sin), |
| 9188 | | .cos => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .cos), |
| 9189 | | .tan => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .tan), |
| 9190 | | .exp => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .exp), |
| 9191 | | .exp2 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .exp2), |
| 9192 | | .log => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log), |
| 9193 | | .log2 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log2), |
| 9194 | | .log10 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log10), |
| 9195 | | .abs => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .abs), |
| 9196 | | .floor => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .floor), |
| 9197 | | .ceil => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .ceil), |
| 9198 | | .trunc => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .trunc), |
| 9199 | | .round => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .round), |
| 9200 | | .tag_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .tag_name), |
| 9201 | | .type_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .type_name), |
| 9202 | | .Frame => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_type), |
| 9203 | | .frame_size => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_size), |
| 9173 | .int_from_ptr => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_ptr), |
| 9174 | .compile_error => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[0], .compile_error), |
| 9175 | .set_eval_branch_quota => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .u32_type } }, params[0], .set_eval_branch_quota), |
| 9176 | .int_from_enum => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_enum), |
| 9177 | .int_from_bool => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_bool), |
| 9178 | .embed_file => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[0], .embed_file), |
| 9179 | .error_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .anyerror_type } }, params[0], .error_name), |
| 9180 | .set_runtime_safety => return simpleUnOp(gz, scope, ri, node, coerced_bool_ri, params[0], .set_runtime_safety), |
| 9181 | .sqrt => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .sqrt), |
| 9182 | .sin => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .sin), |
| 9183 | .cos => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .cos), |
| 9184 | .tan => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .tan), |
| 9185 | .exp => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .exp), |
| 9186 | .exp2 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .exp2), |
| 9187 | .log => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log), |
| 9188 | .log2 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log2), |
| 9189 | .log10 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log10), |
| 9190 | .abs => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .abs), |
| 9191 | .floor => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .floor), |
| 9192 | .ceil => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .ceil), |
| 9193 | .trunc => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .trunc), |
| 9194 | .round => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .round), |
| 9195 | .tag_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .tag_name), |
| 9196 | .type_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .type_name), |
| 9197 | .Frame => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_type), |
| 9198 | .frame_size => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_size), |
| 9204 | 9199 | |
| 9205 | 9200 | .int_from_float => return typeCast(gz, scope, ri, node, params[0], .int_from_float, builtin_name), |
| 9206 | 9201 | .float_from_int => return typeCast(gz, scope, ri, node, params[0], .float_from_int, builtin_name), |
| ... | ... | @@ -9238,7 +9233,7 @@ fn builtinCall( |
| 9238 | 9233 | }, |
| 9239 | 9234 | .panic => { |
| 9240 | 9235 | try emitDbgNode(gz, node); |
| 9241 | | return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .panic); |
| 9236 | return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[0], .panic); |
| 9242 | 9237 | }, |
| 9243 | 9238 | .trap => { |
| 9244 | 9239 | try emitDbgNode(gz, node); |
| ... | ... | @@ -9327,7 +9322,7 @@ fn builtinCall( |
| 9327 | 9322 | }, |
| 9328 | 9323 | .c_define => { |
| 9329 | 9324 | if (!gz.c_import) return gz.astgen.failNode(node, "C define valid only inside C import block", .{}); |
| 9330 | | const name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0]); |
| 9325 | const name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[0]); |
| 9331 | 9326 | const value = try comptimeExpr(gz, scope, .{ .rl = .none }, params[1]); |
| 9332 | 9327 | const result = try gz.addExtendedPayload(.c_define, Zir.Inst.BinNode{ |
| 9333 | 9328 | .node = gz.nodeIndexToRelative(node), |
| ... | ... | @@ -9348,7 +9343,7 @@ fn builtinCall( |
| 9348 | 9343 | return rvalue(gz, ri, result, node); |
| 9349 | 9344 | }, |
| 9350 | 9345 | .reduce => { |
| 9351 | | const op = try expr(gz, scope, .{ .rl = .{ .ty = .reduce_op_type } }, params[0]); |
| 9346 | const op = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .reduce_op_type } }, params[0]); |
| 9352 | 9347 | const scalar = try expr(gz, scope, .{ .rl = .none }, params[1]); |
| 9353 | 9348 | const result = try gz.addPlNode(.reduce, node, Zir.Inst.Bin{ |
| 9354 | 9349 | .lhs = op, |
| ... | ... | @@ -9424,7 +9419,7 @@ fn builtinCall( |
| 9424 | 9419 | }, |
| 9425 | 9420 | .field_parent_ptr => { |
| 9426 | 9421 | const parent_type = try typeExpr(gz, scope, params[0]); |
| 9427 | | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[1]); |
| 9422 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[1]); |
| 9428 | 9423 | const result = try gz.addPlNode(.field_parent_ptr, node, Zir.Inst.FieldParentPtr{ |
| 9429 | 9424 | .parent_type = parent_type, |
| 9430 | 9425 | .field_name = field_name, |
| ... | ... | @@ -9561,7 +9556,7 @@ fn hasDeclOrField( |
| 9561 | 9556 | tag: Zir.Inst.Tag, |
| 9562 | 9557 | ) InnerError!Zir.Inst.Ref { |
| 9563 | 9558 | const container_type = try typeExpr(gz, scope, lhs_node); |
| 9564 | | const name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, rhs_node); |
| 9559 | const name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, rhs_node); |
| 9565 | 9560 | const result = try gz.addPlNode(tag, node, Zir.Inst.Bin{ |
| 9566 | 9561 | .lhs = container_type, |
| 9567 | 9562 | .rhs = name, |
| ... | ... | @@ -9711,7 +9706,7 @@ fn simpleCBuiltin( |
| 9711 | 9706 | ) InnerError!Zir.Inst.Ref { |
| 9712 | 9707 | const name: []const u8 = if (tag == .c_undef) "C undef" else "C include"; |
| 9713 | 9708 | if (!gz.c_import) return gz.astgen.failNode(node, "{s} valid only inside C import block", .{name}); |
| 9714 | | const operand = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, operand_node); |
| 9709 | const operand = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, operand_node); |
| 9715 | 9710 | _ = try gz.addExtendedPayload(tag, Zir.Inst.UnNode{ |
| 9716 | 9711 | .node = gz.nodeIndexToRelative(node), |
| 9717 | 9712 | .operand = operand, |
| ... | ... | @@ -9729,7 +9724,7 @@ fn offsetOf( |
| 9729 | 9724 | tag: Zir.Inst.Tag, |
| 9730 | 9725 | ) InnerError!Zir.Inst.Ref { |
| 9731 | 9726 | const type_inst = try typeExpr(gz, scope, lhs_node); |
| 9732 | | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, rhs_node); |
| 9727 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, rhs_node); |
| 9733 | 9728 | const result = try gz.addPlNode(tag, node, Zir.Inst.Bin{ |
| 9734 | 9729 | .lhs = type_inst, |
| 9735 | 9730 | .rhs = field_name, |
| ... | ... | @@ -13148,7 +13143,7 @@ const GenZir = struct { |
| 13148 | 13143 | fn addRet(gz: *GenZir, ri: ResultInfo, operand: Zir.Inst.Ref, node: Ast.Node.Index) !void { |
| 13149 | 13144 | switch (ri.rl) { |
| 13150 | 13145 | .ptr => |ptr_res| _ = try gz.addUnNode(.ret_load, ptr_res.inst, node), |
| 13151 | | .ty => _ = try gz.addUnNode(.ret_node, operand, node), |
| 13146 | .coerced_ty => _ = try gz.addUnNode(.ret_node, operand, node), |
| 13152 | 13147 | else => unreachable, |
| 13153 | 13148 | } |
| 13154 | 13149 | } |