Description
openedon Feb 10, 2021
These features individually work, but if I enable both I get hundreds of build errors.
The repro I have is: clone rust repo, update library/test/Cargo.toml
to add features = ['rustc-dep-of-std', 'extra_traits']
to libc
. If you add only rustc-dep-of-std
the crate builds fine. But if you add both you get a few hundred build errors, most in the form "X not found, try core::blah::X". Diff for the repro:
diff --git a/library/test/Cargo.toml b/library/test/Cargo.toml
index 226557430df..80e964e84f5 100644
--- a/library/test/Cargo.toml
+++ b/library/test/Cargo.toml
@@ -13,7 +13,7 @@ getopts = { version = "0.2.21", features = ['rustc-dep-of-std'] }
term = { path = "../term" }
std = { path = "../std" }
core = { path = "../core" }
-libc = { version = "0.2", default-features = false }
+libc = { version = "0.2", default-features = false, features = ['rustc-dep-of-std', 'extra_traits'] }
panic_unwind = { path = "../panic_unwind" }
panic_abort = { path = "../panic_abort" }
I was able to most of the build errors for my platform by just prefixing Debug
with core::fmt:Debug
, and the same for other symbols from core (Eq
, PartialEq
, ...). I also tried tweaking cfg_attr
s in lib.rs
but couldn't make this work with just cfg_attr
tweaks.
Remaining issues are fixed by adding a few anonymous lifetime annotations, like &core::fmt::Formatter<'_>
instead of &Formatter
.
Why is this needed?
I was hoping to use the ctrlc
crate in rustc's test runner, which uses nix
, which uses libc
with the 'extra_traits' feature. Without 'extra_traits' it's possible to use libc in rustc test runner without the 'rustc-dep-of-std' feature, but with 'extra_traits' we need 'rustc-dep-of-std' too.
I'm happy to submit a PR to add prefixes to symbols like Debug
, Formatter
, PartialEq
, etc. but I'm not sure if that's the best way to fix this. It's easily possiblewith a combination of fd
and sed
, but the diff is large.