mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 17:24:06 +00:00
015e9371e0
debug-fmt-detail option I'd like to propose a new option that makes `#[derive(Debug)]` generate no-op implementations that don't print anything, and makes `{:?}` in format strings a no-op. There are a couple of motivations for this: 1. A more thorough stripping of debug symbols. Binaries stripped of debug symbols still retain some of them through `Debug` implementations. It's hard to avoid that without compiler's help, because debug formatting can be used in many places, including dependencies, and their loggers, asserts, panics, etc. * In my testing it gives about 2% binary size reduction on top of all other binary-minimizing best practices (including `panic_immediate_abort`). There are targets like Web WASM or embedded where users pay attention to binary sizes. * Users distributing closed-source binaries may not want to "leak" any symbol names as a matter of principle. 2. Adds ability to test whether code depends on specifics of the `Debug` format implementation in unwise ways (e.g. trying to get data unavailable via public interface, or using it as a serialization format). Because current Rust's debug implementation doesn't change, there's a risk of it becoming a fragile de-facto API that [won't be possible to change in the future](https://www.hyrumslaw.com/). An option that "breaks" it can act as a [grease](https://www.rfc-editor.org/rfc/rfc8701.html). This implementation is a `-Z fmt-debug=opt` flag that takes: * `full` — the default, current state. * `none` — makes derived `Debug` and `{:?}` no-ops. Explicit `impl Debug for T` implementations are left unharmed, but `{:?}` format won't use them, so they may get dead-code eliminated if they aren't invoked directly. * `shallow` — makes derived `Debug` print only the type's name, without recursing into fields. Fieldless enums print their variant names. `{:?}` works. The `shallow` option is a compromise between minimizing the `Debug` code, and compatibility. There are popular proc-macro crates that use `Debug::fmt` as a way to convert enum values into their Rust source code. There's a corresponding `cfg` flag: `#[cfg(fmt_debug = "none")]` that can be used in user code to react to this setting to minimize custom `Debug` implementations or remove unnecessary formatting helper functions.
259 lines
11 KiB
Plaintext
259 lines
11 KiB
Plaintext
warning: unexpected `cfg` condition name: `widnows`
|
|
--> $DIR/mix.rs:13:7
|
|
|
|
|
LL | #[cfg(widnows)]
|
|
| ^^^^^^^ help: there is a config with a similar name: `windows`
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(widnows)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
= note: `#[warn(unexpected_cfgs)]` on by default
|
|
|
|
warning: unexpected `cfg` condition value: (none)
|
|
--> $DIR/mix.rs:17:7
|
|
|
|
|
LL | #[cfg(feature)]
|
|
| ^^^^^^^- help: specify a config value: `= "foo"`
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `bar`
|
|
--> $DIR/mix.rs:24:7
|
|
|
|
|
LL | #[cfg(feature = "bar")]
|
|
| ^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("bar"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `zebra`
|
|
--> $DIR/mix.rs:28:7
|
|
|
|
|
LL | #[cfg(feature = "zebra")]
|
|
| ^^^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `uu`
|
|
--> $DIR/mix.rs:32:12
|
|
|
|
|
LL | #[cfg_attr(uu, test)]
|
|
| ^^
|
|
|
|
|
= help: expected names are: `clippy`, `debug_assertions`, `doc`, `doctest`, `feature`, `fmt_debug`, `miri`, `overflow_checks`, `panic`, `proc_macro`, `relocation_model`, `rustfmt`, `sanitize`, `sanitizer_cfi_generalize_pointers`, `sanitizer_cfi_normalize_integers`, `target_abi`, `target_arch`, `target_endian`, `target_env`, `target_family`, `target_feature`, `target_has_atomic`, `target_has_atomic_equal_alignment`, `target_has_atomic_load_store`, `target_os`, `target_pointer_width`, `target_thread_local`, `target_vendor`, `test`, `ub_checks`, `unix`, and `windows`
|
|
= help: to expect this configuration use `--check-cfg=cfg(uu)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `widnows`
|
|
--> $DIR/mix.rs:41:10
|
|
|
|
|
LL | cfg!(widnows);
|
|
| ^^^^^^^ help: there is a config with a similar name: `windows`
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(widnows)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `bar`
|
|
--> $DIR/mix.rs:44:10
|
|
|
|
|
LL | cfg!(feature = "bar");
|
|
| ^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("bar"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `zebra`
|
|
--> $DIR/mix.rs:46:10
|
|
|
|
|
LL | cfg!(feature = "zebra");
|
|
| ^^^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `xxx`
|
|
--> $DIR/mix.rs:48:10
|
|
|
|
|
LL | cfg!(xxx = "foo");
|
|
| ^^^^^^^^^^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx, values("foo"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `xxx`
|
|
--> $DIR/mix.rs:50:10
|
|
|
|
|
LL | cfg!(xxx);
|
|
| ^^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `xxx`
|
|
--> $DIR/mix.rs:52:14
|
|
|
|
|
LL | cfg!(any(xxx, windows));
|
|
| ^^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `bad`
|
|
--> $DIR/mix.rs:54:14
|
|
|
|
|
LL | cfg!(any(feature = "bad", windows));
|
|
| ^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("bad"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `xxx`
|
|
--> $DIR/mix.rs:56:23
|
|
|
|
|
LL | cfg!(any(windows, xxx));
|
|
| ^^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `xxx`
|
|
--> $DIR/mix.rs:58:20
|
|
|
|
|
LL | cfg!(all(unix, xxx));
|
|
| ^^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `aa`
|
|
--> $DIR/mix.rs:60:14
|
|
|
|
|
LL | cfg!(all(aa, bb));
|
|
| ^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(aa)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `bb`
|
|
--> $DIR/mix.rs:60:18
|
|
|
|
|
LL | cfg!(all(aa, bb));
|
|
| ^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(bb)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `aa`
|
|
--> $DIR/mix.rs:63:14
|
|
|
|
|
LL | cfg!(any(aa, bb));
|
|
| ^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(aa)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `bb`
|
|
--> $DIR/mix.rs:63:18
|
|
|
|
|
LL | cfg!(any(aa, bb));
|
|
| ^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(bb)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `zebra`
|
|
--> $DIR/mix.rs:66:20
|
|
|
|
|
LL | cfg!(any(unix, feature = "zebra"));
|
|
| ^^^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `xxx`
|
|
--> $DIR/mix.rs:68:14
|
|
|
|
|
LL | cfg!(any(xxx, feature = "zebra"));
|
|
| ^^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `zebra`
|
|
--> $DIR/mix.rs:68:19
|
|
|
|
|
LL | cfg!(any(xxx, feature = "zebra"));
|
|
| ^^^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `xxx`
|
|
--> $DIR/mix.rs:71:14
|
|
|
|
|
LL | cfg!(any(xxx, unix, xxx));
|
|
| ^^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition name: `xxx`
|
|
--> $DIR/mix.rs:71:25
|
|
|
|
|
LL | cfg!(any(xxx, unix, xxx));
|
|
| ^^^
|
|
|
|
|
= help: to expect this configuration use `--check-cfg=cfg(xxx)`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `zebra`
|
|
--> $DIR/mix.rs:74:14
|
|
|
|
|
LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
|
|
| ^^^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `zebra`
|
|
--> $DIR/mix.rs:74:33
|
|
|
|
|
LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
|
|
| ^^^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `zebra`
|
|
--> $DIR/mix.rs:74:52
|
|
|
|
|
LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
|
|
| ^^^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `feature` are: `foo`
|
|
= help: to expect this configuration use `--check-cfg=cfg(feature, values("zebra"))`
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: unexpected `cfg` condition value: `zebra`
|
|
--> $DIR/mix.rs:78:10
|
|
|
|
|
LL | cfg!(target_feature = "zebra");
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
= note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `amx-bf16`, `amx-complex`, `amx-fp16`, `amx-int8`, `amx-tile`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, and `avx512vpopcntdq` and 239 more
|
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
|
|
|
warning: 27 warnings emitted
|
|
|