Skip to content

Conversation

tgross35
Copy link
Contributor

@tgross35 tgross35 commented Aug 9, 2025

Currently Debug implementations are gated behind the extra-traits feature. My understanding is that historically, this was for two reasons:

  1. Debug implementations for unions were unsound
  2. Concerns about compile time

The first was resolved a while ago by adding a "manual derive" opaque implementation, in 6faa521 ("fix: make Debug impl for unions opaque"). Regarding the second reason, compile times for the current main on my machine are (cleaning in between, with the 2025-08-06 nightly):

  $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.79s
  $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.64s
  $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.08s
  $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.85s

And with this patch applied:

  $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.89s
  $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.70s
  $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.15s
  $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.86s

That is a microbenchmark but it shows that there probably isn't anything to worry about.

Thus, remove the Debug implementation from the feature = "extra_traitts" gating.

Another advantage of doing this is that it should allow many crates to remove the enable for extra_traits, giving us a better idea of who wants Debug vs. who is actually using the Eq/Hash implementations.

Link: #3880

@rustbot
Copy link
Collaborator

rustbot commented Aug 9, 2025

Some changes occurred in solarish module

cc @jclulow, @pfmooney

Some changes occurred in OpenBSD module

cc @semarie

@tgross35
Copy link
Contributor Author

sigh ctest bugs...

@tgross35 tgross35 force-pushed the always-debug branch 2 times, most recently from 3b31fa6 to 18304d1 Compare August 10, 2025 00:20
@tgross35 tgross35 added the needs-ctest-next Blocked until ctest-next is the default label Aug 10, 2025
@tgross35
Copy link
Contributor Author

@rustbot blocked

@tgross35 tgross35 force-pushed the always-debug branch 2 times, most recently from b4830f2 to 72577e7 Compare September 19, 2025 06:42
@rustbot
Copy link
Collaborator

rustbot commented Sep 19, 2025

Some changes occurred in OpenBSD module

cc @semarie

Some changes occurred in the Android module

cc @maurer

@tgross35 tgross35 force-pushed the always-debug branch 2 times, most recently from 0bb646d to c21ce4b Compare September 19, 2025 19:18
@tgross35 tgross35 added this pull request to the merge queue Sep 22, 2025
@tgross35 tgross35 removed the needs-ctest-next Blocked until ctest-next is the default label Sep 22, 2025
@tgross35 tgross35 added the stable-nominated This PR should be considered for cherry-pick to libc's stable release branch label Sep 22, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Sep 22, 2025
@tgross35 tgross35 enabled auto-merge September 22, 2025 09:03
Currently `Debug` implementations are gated behind the `extra-traits`
feature. My understanding is that historically, this was for two
reasons:

1. `Debug` implementations for unions were unsound
2. Concerns about compile time

The first was resolved a while ago by adding a "manual derive" opaque
implementation, in 6faa521 ("fix: make Debug impl for unions
opaque"). Regarding the second reason, compile times for the current
`main` on my machine are (cleaning in between, with the 2025-08-06
nightly):

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.79s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.64s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.08s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.85s

And with this patch applied:

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.89s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.70s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.15s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.86s

That is a microbenchmark but it shows that there probably isn't anything
to worry about.

Thus, remove the `Debug` implementation from the `feature =
"extra_traitts"` gating.

Another advantage of doing this is that it should allow many crates to
remove the enable for `extra_traits`, giving us a better idea of who
wants `Debug` vs. who is actually using the `Eq`/`Hash` implementations.

Link: rust-lang#3880
@tgross35 tgross35 added this pull request to the merge queue Sep 23, 2025
Merged via the queue into rust-lang:main with commit a6e7563 Sep 23, 2025
51 of 52 checks passed
tgross35 added a commit to tgross35/rust-libc that referenced this pull request Sep 23, 2025
Currently `Debug` implementations are gated behind the `extra-traits`
feature. My understanding is that historically, this was for two
reasons:

1. `Debug` implementations for unions were unsound
2. Concerns about compile time

The first was resolved a while ago by adding a "manual derive" opaque
implementation, in 6faa521 ("fix: make Debug impl for unions
opaque"). Regarding the second reason, compile times for the current
`main` on my machine are (cleaning in between, with the 2025-08-06
nightly):

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.79s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.64s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.08s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.85s

And with this patch applied:

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.89s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.70s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.15s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.86s

That is a microbenchmark but it shows that there probably isn't anything
to worry about.

Thus, remove the `Debug` implementation from the `feature =
"extra_traitts"` gating.

Another advantage of doing this is that it should allow many crates to
remove the enable for `extra_traits`, giving us a better idea of who
wants `Debug` vs. who is actually using the `Eq`/`Hash` implementations.

Link: rust-lang#3880

(backport <rust-lang#4624>)
(cherry picked from commit a6e7563)
[ needed to apply in a few more places - Trevor ]
@tgross35 tgross35 mentioned this pull request Sep 23, 2025
tgross35 added a commit to tgross35/rust-libc that referenced this pull request Sep 23, 2025
Currently `Debug` implementations are gated behind the `extra-traits`
feature. My understanding is that historically, this was for two
reasons:

1. `Debug` implementations for unions were unsound
2. Concerns about compile time

The first was resolved a while ago by adding a "manual derive" opaque
implementation, in 6faa521 ("fix: make Debug impl for unions
opaque"). Regarding the second reason, compile times for the current
`main` on my machine are (cleaning in between, with the 2025-08-06
nightly):

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.79s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.64s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.08s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.85s

And with this patch applied:

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.89s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.70s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.15s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.86s

That is a microbenchmark but it shows that there probably isn't anything
to worry about.

Thus, remove the `Debug` implementation from the `feature =
"extra_traitts"` gating.

Another advantage of doing this is that it should allow many crates to
remove the enable for `extra_traits`, giving us a better idea of who
wants `Debug` vs. who is actually using the `Eq`/`Hash` implementations.

Link: rust-lang#3880

(backport <rust-lang#4624>)
(cherry picked from commit a6e7563)
[ needed to apply in a few more places, including the e! macro
  definition - Trevor ]
tgross35 added a commit to tgross35/rust-libc that referenced this pull request Sep 23, 2025
Currently `Debug` implementations are gated behind the `extra-traits`
feature. My understanding is that historically, this was for two
reasons:

1. `Debug` implementations for unions were unsound
2. Concerns about compile time

The first was resolved a while ago by adding a "manual derive" opaque
implementation, in 6faa521 ("fix: make Debug impl for unions
opaque"). Regarding the second reason, compile times for the current
`main` on my machine are (cleaning in between, with the 2025-08-06
nightly):

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.79s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.64s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.08s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.85s

And with this patch applied:

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.89s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.70s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.15s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.86s

That is a microbenchmark but it shows that there probably isn't anything
to worry about.

Thus, remove the `Debug` implementation from the `feature =
"extra_traitts"` gating.

Another advantage of doing this is that it should allow many crates to
remove the enable for `extra_traits`, giving us a better idea of who
wants `Debug` vs. who is actually using the `Eq`/`Hash` implementations.

Link: rust-lang#3880

(backport <rust-lang#4624>)
(cherry picked from commit a6e7563)
[ needed to apply in a few more places, including the e! macro
  definition - Trevor ]
tgross35 added a commit to tgross35/rust-libc that referenced this pull request Sep 23, 2025
Currently `Debug` implementations are gated behind the `extra-traits`
feature. My understanding is that historically, this was for two
reasons:

1. `Debug` implementations for unions were unsound
2. Concerns about compile time

The first was resolved a while ago by adding a "manual derive" opaque
implementation, in 6faa521 ("fix: make Debug impl for unions
opaque"). Regarding the second reason, compile times for the current
`main` on my machine are (cleaning in between, with the 2025-08-06
nightly):

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.79s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.64s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.08s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.85s

And with this patch applied:

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.89s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.70s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.15s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.86s

That is a microbenchmark but it shows that there probably isn't anything
to worry about.

Thus, remove the `Debug` implementation from the `feature =
"extra_traitts"` gating.

Another advantage of doing this is that it should allow many crates to
remove the enable for `extra_traits`, giving us a better idea of who
wants `Debug` vs. who is actually using the `Eq`/`Hash` implementations.

Link: rust-lang#3880

(backport <rust-lang#4624>)
(cherry picked from commit a6e7563)
[ needed to apply in a few more places, including the e! macro
  definition - Trevor ]
github-merge-queue bot pushed a commit that referenced this pull request Sep 23, 2025
Currently `Debug` implementations are gated behind the `extra-traits`
feature. My understanding is that historically, this was for two
reasons:

1. `Debug` implementations for unions were unsound
2. Concerns about compile time

The first was resolved a while ago by adding a "manual derive" opaque
implementation, in 6faa521 ("fix: make Debug impl for unions
opaque"). Regarding the second reason, compile times for the current
`main` on my machine are (cleaning in between, with the 2025-08-06
nightly):

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.79s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.64s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.08s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.85s

And with this patch applied:

    $ cargo build -p libc
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.89s
    $ cargo build -p libc --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.70s
    $ cargo build -p libc --features extra_traits
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.15s
    $ cargo build -p libc --features extra_traits --release
     Compiling libc v1.0.0-alpha.1 (~/rust-libc)
      Finished `release` profile [optimized] target(s) in 0.86s

That is a microbenchmark but it shows that there probably isn't anything
to worry about.

Thus, remove the `Debug` implementation from the `feature =
"extra_traitts"` gating.

Another advantage of doing this is that it should allow many crates to
remove the enable for `extra_traits`, giving us a better idea of who
wants `Debug` vs. who is actually using the `Eq`/`Hash` implementations.

Link: #3880

(backport <#4624>)
(cherry picked from commit a6e7563)
[ needed to apply in a few more places, including the e! macro
  definition - Trevor ]
@tgross35 tgross35 added stable-applied This PR has been cherry-picked to libc's stable release branch and removed stable-nominated This PR should be considered for cherry-pick to libc's stable release branch labels Sep 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants