Skip to content

Features 'rustc-dep-of-std' and 'extra_traits' don't work together #2064

Open
@osa1

Description

@osa1

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_attrs 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: bug

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions