Ignore symbol shim clash when symbol is provided by compiler_builtins
When this happens, we ignore the symbol from `compiler_builtins` in favor of Miri's builtin support. This allows Miri to target platforms like wasm32-unknown-unknown, where functions like `memcmp` are provided by `compiler_builtins`.
This commit is contained in:
parent
e1968dd612
commit
54be8aad79
@ -943,7 +943,16 @@ fn check_abi_and_shim_symbol_clash(
|
||||
link_name: Symbol,
|
||||
) -> InterpResult<'tcx, ()> {
|
||||
self.check_abi(abi, exp_abi)?;
|
||||
if let Some((body, _)) = self.eval_context_mut().lookup_exported_symbol(link_name)? {
|
||||
if let Some((body, instance)) = self.eval_context_mut().lookup_exported_symbol(link_name)? {
|
||||
// If compiler-builtins is providing the symbol, then don't treat it as a clash.
|
||||
// We'll use our built-in implementation in `emulate_foreign_item_by_name` for increased
|
||||
// performance. Note that this means we won't catch any undefined behavior in
|
||||
// compiler-builtins when running other crates, but Miri can still be run on
|
||||
// compiler-builtins itself (or any crate that uses it as a normal dependency)
|
||||
if self.eval_context_ref().tcx.is_compiler_builtins(instance.def_id().krate) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
throw_machine_stop!(TerminationInfo::SymbolShimClashing {
|
||||
link_name,
|
||||
span: body.span.data(),
|
||||
|
Loading…
Reference in New Issue
Block a user