| ... | @@ -6361,6 +6361,7 @@ fn analyzeCall( | ... | @@ -6361,6 +6361,7 @@ fn analyzeCall( |
| 6361 | is_comptime_call, | 6361 | is_comptime_call, |
| 6362 | &should_memoize, | 6362 | &should_memoize, |
| 6363 | memoized_call_key, | 6363 | memoized_call_key, |
| | 6364 | func_ty_info.param_types, |
| 6364 | ) catch |err| switch (err) { | 6365 | ) catch |err| switch (err) { |
| 6365 | error.NeededSourceLocation => { | 6366 | error.NeededSourceLocation => { |
| 6366 | _ = sema.inst_map.remove(inst); | 6367 | _ = sema.inst_map.remove(inst); |
| ... | @@ -6376,6 +6377,7 @@ fn analyzeCall( | ... | @@ -6376,6 +6377,7 @@ fn analyzeCall( |
| 6376 | is_comptime_call, | 6377 | is_comptime_call, |
| 6377 | &should_memoize, | 6378 | &should_memoize, |
| 6378 | memoized_call_key, | 6379 | memoized_call_key, |
| | 6380 | func_ty_info.param_types, |
| 6379 | ); | 6381 | ); |
| 6380 | return error.AnalysisFail; | 6382 | return error.AnalysisFail; |
| 6381 | }, | 6383 | }, |
| ... | @@ -6612,6 +6614,7 @@ fn analyzeInlineCallArg( | ... | @@ -6612,6 +6614,7 @@ fn analyzeInlineCallArg( |
| 6612 | is_comptime_call: bool, | 6614 | is_comptime_call: bool, |
| 6613 | should_memoize: *bool, | 6615 | should_memoize: *bool, |
| 6614 | memoized_call_key: Module.MemoizedCall.Key, | 6616 | memoized_call_key: Module.MemoizedCall.Key, |
| | 6617 | raw_param_types: []const Type, |
| 6615 | ) !void { | 6618 | ) !void { |
| 6616 | const zir_tags = sema.code.instructions.items(.tag); | 6619 | const zir_tags = sema.code.instructions.items(.tag); |
| 6617 | switch (zir_tags[inst]) { | 6620 | switch (zir_tags[inst]) { |
| ... | @@ -6622,8 +6625,12 @@ fn analyzeInlineCallArg( | ... | @@ -6622,8 +6625,12 @@ fn analyzeInlineCallArg( |
| 6622 | const param_src = pl_tok.src(); | 6625 | const param_src = pl_tok.src(); |
| 6623 | const extra = sema.code.extraData(Zir.Inst.Param, pl_tok.payload_index); | 6626 | const extra = sema.code.extraData(Zir.Inst.Param, pl_tok.payload_index); |
| 6624 | const param_body = sema.code.extra[extra.end..][0..extra.data.body_len]; | 6627 | const param_body = sema.code.extra[extra.end..][0..extra.data.body_len]; |
| 6625 | const param_ty_inst = try sema.resolveBody(param_block, param_body, inst); | 6628 | const param_ty = param_ty: { |
| 6626 | const param_ty = try sema.analyzeAsType(param_block, param_src, param_ty_inst); | 6629 | const raw_param_ty = raw_param_types[arg_i.*]; |
| | 6630 | if (raw_param_ty.tag() != .generic_poison) break :param_ty raw_param_ty; |
| | 6631 | const param_ty_inst = try sema.resolveBody(param_block, param_body, inst); |
| | 6632 | break :param_ty try sema.analyzeAsType(param_block, param_src, param_ty_inst); |
| | 6633 | }; |
| 6627 | new_fn_info.param_types[arg_i.*] = param_ty; | 6634 | new_fn_info.param_types[arg_i.*] = param_ty; |
| 6628 | const uncasted_arg = uncasted_args[arg_i.*]; | 6635 | const uncasted_arg = uncasted_args[arg_i.*]; |
| 6629 | if (try sema.typeRequiresComptime(param_ty)) { | 6636 | if (try sema.typeRequiresComptime(param_ty)) { |