@@ -173,14 +173,27 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
173173 continue ;
174174 } ;
175175 if symbol_name == link_name {
176- if let Some ( ( instance, original_cnum) ) = instance_and_crate {
177- throw_machine_stop ! ( TerminationInfo :: MultipleSymbolDefinitions {
178- link_name,
179- first: tcx. def_span( instance. def_id( ) ) . data( ) ,
180- first_crate: tcx. crate_name( original_cnum) ,
181- second: tcx. def_span( def_id) . data( ) ,
182- second_crate: tcx. crate_name( cnum) ,
183- } ) ;
176+ if let Some ( ( original_instance, original_cnum) ) = instance_and_crate {
177+ // Make sure we are consistent wrt what is 'first' and 'second'.
178+ let original_span = tcx. def_span ( original_instance. def_id ( ) ) . data ( ) ;
179+ let span = tcx. def_span ( def_id) . data ( ) ;
180+ if original_span < span {
181+ throw_machine_stop ! ( TerminationInfo :: MultipleSymbolDefinitions {
182+ link_name,
183+ first: original_span,
184+ first_crate: tcx. crate_name( original_cnum) ,
185+ second: span,
186+ second_crate: tcx. crate_name( cnum) ,
187+ } ) ;
188+ } else {
189+ throw_machine_stop ! ( TerminationInfo :: MultipleSymbolDefinitions {
190+ link_name,
191+ first: span,
192+ first_crate: tcx. crate_name( cnum) ,
193+ second: original_span,
194+ second_crate: tcx. crate_name( original_cnum) ,
195+ } ) ;
196+ }
184197 }
185198 if !matches ! ( tcx. def_kind( def_id) , DefKind :: Fn | DefKind :: AssocFn ) {
186199 throw_ub_format ! (
0 commit comments