BurntSushi / memchr

Optimized string search routines for Rust.
The Unlicense
792 stars 97 forks source link

Please add a feature to switch to a basic implementation #155

Open glandium opened 2 weeks ago

glandium commented 2 weeks ago

Behind this generic request, here is my actual problem: running code that uses memchr under miri fails with the following:

error: unsupported operation: can't call foreign function `llvm.aarch64.neon.umaxp.v16i8` on OS `macos`
    --> /Users/glandium/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/neon/mod.rs:1903:5
     |
1903 |     vpmaxq_u8_(a, b)
     |     ^^^^^^^^^^^^^^^^ can't call foreign function `llvm.aarch64.neon.umaxp.v16i8` on OS `macos`
     |
     = help: if this is a basic API commonly used on this target, please report an issue with Miri
     = help: however, note that Miri does not aim to support every FFI function out there; for instance, we will not support APIs for things such as GUIs, scripting languages, or databases

where the call to this function originates from memchr.

A feature that switches to use a dumb implementation could be useful for cases like this.

BurntSushi commented 2 weeks ago

The error message you got suggests reporting it to Miri. Have you done so? It seems unwise to add features to this crate to work around incomplete support in another tool.

glandium commented 1 week ago

Does that count as a "basic API commonly used", though?

BurntSushi commented 1 week ago

Does that count as a "basic API commonly used", though?

They did it for the x86-64 intrinsics. And the fact that memchr uses it makes it commonly used. ;-)

glandium commented 1 week ago

FWIW, I found the following on the miri repo: https://github.com/rust-lang/miri/issues/3172 is an existing issue about the aarch64 intrinsics. Nobody seems to be working on it. https://github.com/rust-lang/miri/issues/3243#issuecomment-1870535460 is a general recommendation to implement what this issue is asking for.