@@ -203,6 +203,9 @@ static auto CheckRedeclParam(Context& context, bool is_implicit_param,
203203 SemIR::InstId prev_param_pattern_id,
204204 SemIR::SpecificId prev_specific_id, bool diagnose,
205205 bool check_self) -> bool {
206+ auto orig_new_param_pattern_id = new_param_pattern_id;
207+ auto orig_prev_param_pattern_id = prev_param_pattern_id;
208+
206209 // TODO: Consider differentiating between type and name mistakes. For now,
207210 // taking the simpler approach because I also think we may want to refactor
208211 // params.
@@ -218,9 +221,10 @@ static auto CheckRedeclParam(Context& context, bool is_implicit_param,
218221 " redeclaration differs at {0:implicit |}parameter {1}" ,
219222 Diagnostics::BoolAsSelect, int32_t );
220223 context.emitter ()
221- .Build (new_param_pattern_id , RedeclParamDiffers, is_implicit_param,
224+ .Build (orig_new_param_pattern_id , RedeclParamDiffers, is_implicit_param,
222225 param_index + 1 )
223- .Note (prev_param_pattern_id, RedeclParamPrevious, is_implicit_param)
226+ .Note (orig_prev_param_pattern_id, RedeclParamPrevious,
227+ is_implicit_param)
224228 .Emit ();
225229 };
226230
@@ -232,21 +236,24 @@ static auto CheckRedeclParam(Context& context, bool is_implicit_param,
232236 }
233237
234238 if (new_param_pattern.Is <SemIR::AddrPattern>()) {
235- new_param_pattern = context.insts ().Get (
236- new_param_pattern.As <SemIR::AddrPattern>().inner_id );
237- prev_param_pattern = context.insts ().Get (
238- prev_param_pattern.As <SemIR::AddrPattern>().inner_id );
239+ new_param_pattern_id = new_param_pattern.As <SemIR::AddrPattern>().inner_id ;
240+ new_param_pattern = context.insts ().Get (new_param_pattern_id);
241+ prev_param_pattern_id =
242+ prev_param_pattern.As <SemIR::AddrPattern>().inner_id ;
243+ prev_param_pattern = context.insts ().Get (prev_param_pattern_id);
239244 if (new_param_pattern.kind () != prev_param_pattern.kind ()) {
240245 emit_diagnostic ();
241246 return false ;
242247 }
243248 }
244249
245250 if (new_param_pattern.Is <SemIR::AnyParamPattern>()) {
246- new_param_pattern = context.insts ().Get (
247- new_param_pattern.As <SemIR::ValueParamPattern>().subpattern_id );
248- prev_param_pattern = context.insts ().Get (
249- prev_param_pattern.As <SemIR::ValueParamPattern>().subpattern_id );
251+ new_param_pattern_id =
252+ new_param_pattern.As <SemIR::ValueParamPattern>().subpattern_id ;
253+ new_param_pattern = context.insts ().Get (new_param_pattern_id);
254+ prev_param_pattern_id =
255+ prev_param_pattern.As <SemIR::ValueParamPattern>().subpattern_id ;
256+ prev_param_pattern = context.insts ().Get (prev_param_pattern_id);
250257 if (new_param_pattern.kind () != prev_param_pattern.kind ()) {
251258 emit_diagnostic ();
252259 return false ;
@@ -267,8 +274,8 @@ static auto CheckRedeclParam(Context& context, bool is_implicit_param,
267274 return true ;
268275 }
269276
270- auto prev_param_type_id = SemIR::GetTypeInSpecific (
271- context.sem_ir (), prev_specific_id, prev_param_pattern. type_id () );
277+ auto prev_param_type_id = SemIR::GetTypeOfInstInSpecific (
278+ context.sem_ir (), prev_specific_id, prev_param_pattern_id );
272279 if (!context.types ().AreEqualAcrossDeclarations (new_param_pattern.type_id (),
273280 prev_param_type_id)) {
274281 if (!diagnose) {
@@ -280,9 +287,11 @@ static auto CheckRedeclParam(Context& context, bool is_implicit_param,
280287 Diagnostics::BoolAsSelect, int32_t , SemIR::TypeId,
281288 SemIR::TypeId);
282289 context.emitter ()
283- .Build (new_param_pattern_id, RedeclParamDiffersType, is_implicit_param,
284- param_index + 1 , prev_param_type_id, new_param_pattern.type_id ())
285- .Note (prev_param_pattern_id, RedeclParamPrevious, is_implicit_param)
290+ .Build (orig_new_param_pattern_id, RedeclParamDiffersType,
291+ is_implicit_param, param_index + 1 , prev_param_type_id,
292+ new_param_pattern.type_id ())
293+ .Note (orig_prev_param_pattern_id, RedeclParamPrevious,
294+ is_implicit_param)
286295 .Emit ();
287296 return false ;
288297 }
0 commit comments