| ... | ... | @@ -70,6 +70,7 @@ generic_owner: InternPool.Index = .none, |
| 70 | 70 | /// instantiation can point back to the instantiation site in addition to the |
| 71 | 71 | /// declaration site. |
| 72 | 72 | generic_call_src: LazySrcLoc = .unneeded, |
| 73 | generic_bound_arg_src: ?LazySrcLoc = null, |
| 73 | 74 | /// Corresponds to `generic_call_src`. |
| 74 | 75 | generic_call_decl: Decl.OptionalIndex = .none, |
| 75 | 76 | /// The key is types that must be fully resolved prior to machine code |
| ... | ... | @@ -7077,16 +7078,19 @@ fn analyzeCall( |
| 7077 | 7078 | const parent_fn_ret_ty_ies = sema.fn_ret_ty_ies; |
| 7078 | 7079 | const parent_generic_owner = sema.generic_owner; |
| 7079 | 7080 | const parent_generic_call_src = sema.generic_call_src; |
| 7081 | const parent_generic_bound_arg_src = sema.generic_bound_arg_src; |
| 7080 | 7082 | const parent_generic_call_decl = sema.generic_call_decl; |
| 7081 | 7083 | sema.fn_ret_ty = bare_return_type; |
| 7082 | 7084 | sema.fn_ret_ty_ies = null; |
| 7083 | 7085 | sema.generic_owner = .none; |
| 7084 | 7086 | sema.generic_call_src = .unneeded; |
| 7087 | sema.generic_bound_arg_src = null; |
| 7085 | 7088 | sema.generic_call_decl = .none; |
| 7086 | 7089 | defer sema.fn_ret_ty = parent_fn_ret_ty; |
| 7087 | 7090 | defer sema.fn_ret_ty_ies = parent_fn_ret_ty_ies; |
| 7088 | 7091 | defer sema.generic_owner = parent_generic_owner; |
| 7089 | 7092 | defer sema.generic_call_src = parent_generic_call_src; |
| 7093 | defer sema.generic_bound_arg_src = parent_generic_bound_arg_src; |
| 7090 | 7094 | defer sema.generic_call_decl = parent_generic_call_decl; |
| 7091 | 7095 | |
| 7092 | 7096 | if (module_fn.analysis(ip).inferred_error_set) { |
| ... | ... | @@ -7545,6 +7549,7 @@ fn instantiateGenericCall( |
| 7545 | 7549 | .comptime_args = comptime_args, |
| 7546 | 7550 | .generic_owner = generic_owner, |
| 7547 | 7551 | .generic_call_src = call_src, |
| 7552 | .generic_bound_arg_src = bound_arg_src, |
| 7548 | 7553 | .generic_call_decl = block.src_decl.toOptional(), |
| 7549 | 7554 | .branch_quota = sema.branch_quota, |
| 7550 | 7555 | .branch_count = sema.branch_count, |
| ... | ... | @@ -8583,17 +8588,20 @@ fn resolveGenericBody( |
| 8583 | 8588 | const prev_no_partial_func_type = sema.no_partial_func_ty; |
| 8584 | 8589 | const prev_generic_owner = sema.generic_owner; |
| 8585 | 8590 | const prev_generic_call_src = sema.generic_call_src; |
| 8591 | const prev_generic_bound_arg_src = sema.generic_bound_arg_src; |
| 8586 | 8592 | const prev_generic_call_decl = sema.generic_call_decl; |
| 8587 | 8593 | block.params = .{}; |
| 8588 | 8594 | sema.no_partial_func_ty = true; |
| 8589 | 8595 | sema.generic_owner = .none; |
| 8590 | 8596 | sema.generic_call_src = .unneeded; |
| 8597 | sema.generic_bound_arg_src = null; |
| 8591 | 8598 | sema.generic_call_decl = .none; |
| 8592 | 8599 | defer { |
| 8593 | 8600 | block.params = prev_params; |
| 8594 | 8601 | sema.no_partial_func_ty = prev_no_partial_func_type; |
| 8595 | 8602 | sema.generic_owner = prev_generic_owner; |
| 8596 | 8603 | sema.generic_call_src = prev_generic_call_src; |
| 8604 | sema.generic_bound_arg_src = prev_generic_bound_arg_src; |
| 8597 | 8605 | sema.generic_call_decl = prev_generic_call_decl; |
| 8598 | 8606 | } |
| 8599 | 8607 | |
| ... | ... | @@ -9235,17 +9243,20 @@ fn zirParam( |
| 9235 | 9243 | const prev_no_partial_func_type = sema.no_partial_func_ty; |
| 9236 | 9244 | const prev_generic_owner = sema.generic_owner; |
| 9237 | 9245 | const prev_generic_call_src = sema.generic_call_src; |
| 9246 | const prev_generic_bound_arg_src = sema.generic_bound_arg_src; |
| 9238 | 9247 | const prev_generic_call_decl = sema.generic_call_decl; |
| 9239 | 9248 | block.params = .{}; |
| 9240 | 9249 | sema.no_partial_func_ty = true; |
| 9241 | 9250 | sema.generic_owner = .none; |
| 9242 | 9251 | sema.generic_call_src = .unneeded; |
| 9252 | sema.generic_bound_arg_src = null; |
| 9243 | 9253 | sema.generic_call_decl = .none; |
| 9244 | 9254 | defer { |
| 9245 | 9255 | block.params = prev_params; |
| 9246 | 9256 | sema.no_partial_func_ty = prev_no_partial_func_type; |
| 9247 | 9257 | sema.generic_owner = prev_generic_owner; |
| 9248 | 9258 | sema.generic_call_src = prev_generic_call_src; |
| 9259 | sema.generic_bound_arg_src = prev_generic_bound_arg_src; |
| 9249 | 9260 | sema.generic_call_decl = prev_generic_call_decl; |
| 9250 | 9261 | } |
| 9251 | 9262 | |
| ... | ... | @@ -9319,10 +9330,12 @@ fn zirParam( |
| 9319 | 9330 | sema.comptime_args[param_index] = val.toIntern(); |
| 9320 | 9331 | return; |
| 9321 | 9332 | } |
| 9322 | | const arg_src: LazySrcLoc = if (sema.generic_call_src == .node_offset) .{ .call_arg = .{ |
| 9333 | const arg_src: LazySrcLoc = if (param_index == 0 and sema.generic_bound_arg_src != null) |
| 9334 | sema.generic_bound_arg_src.? |
| 9335 | else if (sema.generic_call_src == .node_offset) .{ .call_arg = .{ |
| 9323 | 9336 | .decl = sema.generic_call_decl.unwrap().?, |
| 9324 | 9337 | .call_node_offset = sema.generic_call_src.node_offset.x, |
| 9325 | | .arg_index = param_index, |
| 9338 | .arg_index = param_index - @intFromBool(sema.generic_bound_arg_src != null), |
| 9326 | 9339 | } } else src; |
| 9327 | 9340 | const msg = msg: { |
| 9328 | 9341 | const src_loc = arg_src.toSrcLoc(mod.declPtr(block.src_decl), mod); |
| ... | ... | @@ -9385,10 +9398,12 @@ fn zirParamAnytype( |
| 9385 | 9398 | sema.comptime_args[param_index] = opv.toIntern(); |
| 9386 | 9399 | return; |
| 9387 | 9400 | } |
| 9388 | | const arg_src: LazySrcLoc = if (sema.generic_call_src == .node_offset) .{ .call_arg = .{ |
| 9401 | const arg_src: LazySrcLoc = if (param_index == 0 and sema.generic_bound_arg_src != null) |
| 9402 | sema.generic_bound_arg_src.? |
| 9403 | else if (sema.generic_call_src == .node_offset) .{ .call_arg = .{ |
| 9389 | 9404 | .decl = sema.generic_call_decl.unwrap().?, |
| 9390 | 9405 | .call_node_offset = sema.generic_call_src.node_offset.x, |
| 9391 | | .arg_index = param_index, |
| 9406 | .arg_index = param_index - @intFromBool(sema.generic_bound_arg_src != null), |
| 9392 | 9407 | } } else src; |
| 9393 | 9408 | |
| 9394 | 9409 | if (comptime_syntax) { |