@@ -173,14 +173,27 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
173
173
continue ;
174
174
} ;
175
175
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
+ }
184
197
}
185
198
if !matches ! ( tcx. def_kind( def_id) , DefKind :: Fn | DefKind :: AssocFn ) {
186
199
throw_ub_format ! (
0 commit comments