-
Notifications
You must be signed in to change notification settings - Fork 14k
Description
Hi there!
I'm trying to track down an issue we're having with nightly and cbindgen in https://github.com/rustls/rustls-ffi. In particular, we rely on cbindgen's functionality to map Cargo feature flags to C #define's and #if defined(xxx) guards. Since our codebase uses some macros, we also rely on cbindgen's parse.expand functionality, which in turn requires using nightly.
Sometime recently with a nightly update we observed the generated .h produced by cbindgen was no longer producing the required #if defined(XXX) guards.
I believe I've traced this down to something changing in the nightly toolchain such that -Zunpretty=expanded with --features enabled no longer produces expanded code decorated with the #[cfg(feature = "xxx")] annotations. I think this in turn means cbindgen doesn't associate the function with required features.
The reproduction I offer below doesn't use cbindgen at all, and so is hopefully easier to reason about.
Code
I tried cargo rustc --features=turbo-mode -- -Zunpretty=expanded with the following code using nightly:
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(feature = "turbo-mode")]
pub fn turbo_add(left: u64, right: u64) -> u64 {
left + right
}I expected to see this happen: I expected the produced output to show the turbo_add code annotated with the expected #[cfg(feature = "turbo-mode")] annotation:
#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2024::*;
#[macro_use]
extern crate std;
pub fn add(left: u64, right: u64) -> u64 { left + right }
#[cfg(feature = "turbo-mode")]
pub fn turbo_add(left: u64, right: u64) -> u64 { left + right }Instead, this happened: the output with the most recent nightly instead drops the annotation, producing:
#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2024::*;
#[macro_use]
extern crate std;
pub fn add(left: u64, right: u64) -> u64 { left + right }
pub fn turbo_add(left: u64, right: u64) -> u64 { left + right }I pushed a simple reproduction repo here: https://github.com/cpu/expand-test
Version it worked on
It most recently worked on: nightly-2025-03-25
Version with regression
The first failure I saw from this was on nightly-x86_64-unknown-linux-gnu - rustc 1.88.0-nightly (1799887 2025-03-29)
Backtrace
N/A