Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Harmonize AsyncFn implementations, make async closures conditionally impl Fn* traits #120712

Merged
merged 7 commits into from
Feb 10, 2024

Conversation

compiler-errors
Copy link
Member

@compiler-errors compiler-errors commented Feb 6, 2024

This PR implements several changes to the built-in and libcore-provided implementations of Fn* and AsyncFn* to address two problems:

  1. async closures do not implement the Fn* family traits, leading to breakage: https://crater-reports.s3.amazonaws.com/pr-120361/index.html
  2. references to async closures do not implement AsyncFn*, as a consequence of the existing blanket impls of the shape AsyncFn for F where F: Fn, F::Output: Future.

In order to fix (1.), we implement Fn traits appropriately for async closures. It turns out that async closures can:

In order to fix (2.), we make all of the built-in callables implement AsyncFn* via built-in impls, and instead adjust the blanket impls for AsyncFn* provided by libcore to match the blanket impls for Fn*.

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. WG-trait-system-refactor The Rustc Trait System Refactor Initiative labels Feb 6, 2024
@compiler-errors compiler-errors changed the title Async closures harmonize Harmonize AsyncFn implementations, make async closures conditionally impl Fn* traits Feb 6, 2024
@compiler-errors
Copy link
Member Author

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Feb 6, 2024
@bors
Copy link
Contributor

bors commented Feb 6, 2024

⌛ Trying commit e988944 with merge 788c8f4...

bors added a commit to rust-lang-ci/rust that referenced this pull request Feb 6, 2024
…nize, r=<try>

Harmonize `AsyncFn` implementations, make async closures conditionally impl `Fn*` traits

TODO: description
TODO: tests (specifically: check that `&async ||` impls `AsyncFn`, flesh out the `Fn` tests, add an always-fnonce test maybe using `Option::map`)

r? `@ghost`
@rust-log-analyzer

This comment has been minimized.

@bors
Copy link
Contributor

bors commented Feb 6, 2024

☀️ Try build successful - checks-actions
Build commit: 788c8f4 (788c8f48d1a159cf4f84e1ac1b41dd209ac66964)

@rust-timer

This comment has been minimized.

@compiler-errors
Copy link
Member Author

@craterbot
Copy link
Collaborator

👌 Experiment pr-120712 created and queued.
🤖 Automatically detected try build 788c8f4
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-crater Status: Waiting on a crater run to be completed. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Feb 6, 2024
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (788c8f4): comparison URL.

Overall result: ✅ improvements - no action needed

Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

This is a highly reliable metric that was used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.5% [-0.8%, -0.2%] 7
Improvements ✅
(secondary)
-0.6% [-0.7%, -0.5%] 2
All ❌✅ (primary) -0.5% [-0.8%, -0.2%] 7

Max RSS (memory usage)

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-1.6% [-2.2%, -0.7%] 6
Improvements ✅
(secondary)
-3.0% [-3.9%, -2.4%] 8
All ❌✅ (primary) -1.6% [-2.2%, -0.7%] 6

Cycles

This benchmark run did not return any relevant results for this metric.

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 662.774s -> 664.823s (0.31%)
Artifact size: 308.21 MiB -> 308.33 MiB (0.04%)

@rust-log-analyzer

This comment has been minimized.

@compiler-errors
Copy link
Member Author

Hey CI, wtf is wrong with you?

@craterbot
Copy link
Collaborator

🚧 Experiment pr-120712 is now running

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot
Copy link
Collaborator

🎉 Experiment pr-120712 is completed!
📊 0 regressed and 9 fixed (52 total)
📰 Open the full report.

⚠️ If you notice any spurious failure please add them to the blacklist!
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-crater Status: Waiting on a crater run to be completed. labels Feb 8, 2024
@compiler-errors
Copy link
Member Author

That CI failure looks totally unrelated

@bors retry

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2024
@rust-log-analyzer
Copy link
Collaborator

The job aarch64-gnu failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
[796/3236] Building CXX object lib/Transforms/Utils/CMakeFiles/LLVMTransformUtils.dir/Mem2Reg.cpp.o
[797/3236] Building CXX object lib/Transforms/Utils/CMakeFiles/LLVMTransformUtils.dir/MemoryTaggingSupport.cpp.o
[798/3236] Building CXX object lib/Transforms/Utils/CMakeFiles/LLVMTransformUtils.dir/MisExpect.cpp.o
[799/3236] Building CXX object lib/Transforms/Utils/CMakeFiles/LLVMTransformUtils.dir/ModuleUtils.cpp.o
##[error]The runner has received a shutdown signal. This can happen when the runner service is stopped, or a manually started runner is canceled.
##[group]Clock drift check
  local time: Sat Feb 10 00:01:48 UTC 2024
  network time: Sat, 10 Feb 2024 00:01:49 GMT
##[endgroup]
---
[862/3236] Building CXX object lib/Transforms/InstCombine/CMakeFiles/LLVMInstCombine.dir/InstCombineSelect.cpp.o
[863/3236] Building CXX object lib/Transforms/InstCombine/CMakeFiles/LLVMInstCombine.dir/InstCombineShifts.cpp.o
[864/3236] Building CXX object lib/Transforms/InstCombine/CMakeFiles/LLVMInstCombine.dir/InstCombineSimplifyDemanded.cpp.o
[865/3236] Building CXX object lib/Transforms/Scalar/CMakeFiles/LLVMScalarOpts.dir/AnnotationRemarks.cpp.o
Session terminated, killing shell... ...killed.
##[error]The operation was canceled.

@bors
Copy link
Contributor

bors commented Feb 10, 2024

⌛ Testing commit 540be28 with merge 16f9cfa...

bors added a commit to rust-lang-ci/rust that referenced this pull request Feb 10, 2024
…nize, r=oli-obk

Harmonize `AsyncFn` implementations, make async closures conditionally impl `Fn*` traits

This PR implements several changes to the built-in and libcore-provided implementations of `Fn*` and `AsyncFn*` to address two problems:
1. async closures do not implement the `Fn*` family traits, leading to breakage: https://crater-reports.s3.amazonaws.com/pr-120361/index.html
2. *references* to async closures do not implement `AsyncFn*`, as a consequence of the existing blanket impls of the shape `AsyncFn for F where F: Fn, F::Output: Future`.

In order to fix (1.), we implement `Fn` traits appropriately for async closures. It turns out that async closures can:
* always implement `FnOnce`, meaning that they're drop-in compatible with `FnOnce`-bound combinators like `Option::map`.
* conditionally implement `Fn`/`FnMut` if they have no captures, which means that existing usages of async closures should *probably* work without breakage (crater checking this: rust-lang#120712 (comment)).

In order to fix (2.), we make all of the built-in callables implement `AsyncFn*` via built-in impls, and instead adjust the blanket impls for `AsyncFn*` provided by libcore to match the blanket impls for `Fn*`.
@rust-log-analyzer
Copy link
Collaborator

The job x86_64-apple-1 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
error: linking with `cc` failed: exit status: 1

  |

command did not execute successfully: cd "/Users/runner/work/rust/rust/compiler/rustc_codegen_cranelift" && env -u MAKEFLAGS -u MFLAGS AR_x86_64_apple_darwin="ar" CARGO_BUILD_INCREMENTAL="false" CARGO_INCREMENTAL="0" CARGO_PROFILE_RELEASE_DEBUG="0" CARGO_PROFILE_RELEASE_DEBUG_ASSERTIONS="false" CARGO_PROFILE_RELEASE_OVERFLOW_CHECKS="false" CARGO_PROFILE_RELEASE_STRIP="false" CARGO_TARGET_DIR="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-codegen" CC_x86_64_apple_darwin="sccache /Users/runner/work/rust/rust/clang+llvm-14.0.5-x86_64-apple-darwin/bin/clang" CFG_COMPILER_BUILD_TRIPLE="x86_64-apple-darwin" CFG_COMPILER_HOST_TRIPLE="x86_64-apple-darwin" CFG_DEFAULT_CODEGEN_BACKEND="llvm" CFG_LIBDIR_RELATIVE="lib" CFG_RELEASE="1.78.0-nightly" CFG_RELEASE_CHANNEL="nightly" CFG_VERSION="1.78.0-nightly (16f9cfa79 2024-02-10)" CFG_VER_DATE="2024-02-10" CFG_VER_HASH="16f9cfa79c177a19197b519df9be08a36dce828b" CFLAGS_x86_64_apple_darwin="-ffunction-sections -fdata-sections -fPIC --target=x86_64-apple-darwin" CXXFLAGS_x86_64_apple_darwin="-ffunction-sections -fdata-sections -fPIC --target=x86_64-apple-darwin -stdlib=libc++" CXX_x86_64_apple_darwin="sccache /Users/runner/work/rust/rust/clang+llvm-14.0.5-x86_64-apple-darwin/bin/clang++" LIBC_CHECK_CFG="1" LIBRARY_PATH="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/ci-llvm/lib" LLVM_CONFIG="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/ci-llvm/bin/llvm-config" LLVM_NDEBUG="1" LLVM_RUSTLLVM="1" RANLIB_x86_64_apple_darwin="ar s" REAL_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" RUSTBUILD_NATIVE_DIR="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/native" RUSTC="/Users/runner/work/rust/rust/build/bootstrap/debug/rustc" RUSTC_BOOTSTRAP="1" RUSTC_BREAK_ON_ICE="1" RUSTC_ERROR_METADATA_DST="/Users/runner/work/rust/rust/build/tmp/extended-error-metadata" RUSTC_FORCE_UNSTABLE="1" RUSTC_HOST_FLAGS="-Zunstable-options --check-cfg=cfg(bootstrap)" RUSTC_INSTALL_BINDIR="bin" RUSTC_LIBDIR="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1/lib" RUSTC_LINT_FLAGS="-Wrust_2018_idioms -Wunused_lifetimes -Dwarnings" RUSTC_PRINT_STEP_TIMINGS="1" RUSTC_REAL="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1/bin/rustc" RUSTC_SNAPSHOT="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1/bin/rustc" RUSTC_SNAPSHOT_LIBDIR="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1/lib" RUSTC_STAGE="1" RUSTC_SYSROOT="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1" RUSTC_VERBOSE="0" RUSTC_VERIFY_LLVM_IR="1" RUSTC_WRAPPER="/Users/runner/work/rust/rust/build/bootstrap/debug/rustc" RUSTDOC="/Users/runner/work/rust/rust/build/bootstrap/debug/rustdoc" RUSTDOCFLAGS="-Csymbol-mangling-version=v0 -Zunstable-options --check-cfg=cfg(bootstrap) --check-cfg=cfg(parallel_compiler) -Dwarnings -Wrustdoc::invalid_codeblock_attributes --crate-version 1.78.0-nightly\t(16f9cfa79\t2024-02-10) --cfg=parallel_compiler" RUSTDOC_LIBDIR="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1/lib" RUSTDOC_REAL="/path/to/nowhere/rustdoc/not/required" RUSTFLAGS="-Csymbol-mangling-version=v0 -Zunstable-options --check-cfg=cfg(bootstrap) --check-cfg=cfg(parallel_compiler) -Zmacro-backtrace -Csplit-debuginfo=unpacked -Zosx-rpath-install-name -Clink-args=-Wl,-rpath,@loader_path/../lib --cfg=parallel_compiler" RUST_TEST_THREADS="4" TERM="xterm" WINAPI_NO_BUNDLED_LIBRARIES="1" __CARGO_DEFAULT_LIB_METADATA="nightlycodegen" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage0/bin/cargo" "run" "--target" "x86_64-apple-darwin" "--release" "-Zcheck-cfg" "-Zbinary-dep-depinfo" "-j" "4" "--locked" "--color" "always" "--manifest-path" "/Users/runner/work/rust/rust/compiler/rustc_codegen_cranelift/build_system/Cargo.toml" "--" "test" "--download-dir" "/Users/runner/work/rust/rust/build/cg_clif_download" "--out-dir" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif" "--no-unstable-features" "--use-backend" "cranelift" "--sysroot" "llvm" "--skip-test" "testsuite.extended_sysroot"
  = note: env -u IPHONEOS_DEPLOYMENT_TARGET -u TVOS_DEPLOYMENT_TARGET LC_ALL="C" PATH="/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/bin:/usr/local/lib/ruby/gems/3.0.0/bin:/usr/local/opt/[email protected]/bin:/usr/local/opt/pipx_bin:/Users/runner/.cargo/bin:/usr/local/opt/curl/bin:/usr/local/bin:/usr/local/sbin:/Users/runner/bin:/Users/runner/.yarn/bin:/Users/runner/Library/Android/sdk/tools:/Users/runner/Library/Android/sdk/platform-tools:/Library/Frameworks/Python.framework/Versions/Current/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/usr/bin:/bin:/usr/sbin:/sbin:/Users/runner/.dotnet/tools" VSLANG="1033" ZERO_AR_DATE="1" "cc" "-arch" "x86_64" "-m64" "/var/folders/r0/ztvld9wd66bfpv_g6h3ksl000000gn/T/rustc66QIy2/symbols.o" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/build/example/issue-72793.issue_72793.bc5a872a9ae27c1-cgu.0.rcgu.o" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/build/example/issue-72793.allocator_shim.rcgu.o" "-L" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/build/example" "-L" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libstd-a7ffcf8feb5de0df.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libpanic_abort-f72dbe40e56cf4e9.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libobject-93683961e4fe014c.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libmemchr-608f39623da2acc6.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libaddr2line-2b17e3e98a369b70.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libgimli-98e18d571f0d3c98.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/librustc_demangle-105905fe6fc6bf57.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libstd_detect-c72f1c866e7081dc.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libhashbrown-e82114027f985b88.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_alloc-f99fcd695211a1c9.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libminiz_oxide-9bba2c1110da01a8.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libadler-f86ef4dff75dd50c.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libunwind-0b11117ce25a1560.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libcfg_if-3fce4a1c07607df0.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/liblibc-e38fe75b4b440008.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/liballoc-2b3dd1868cffbb25.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_core-0171fe66a8ec9014.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libcore-939f78aa140a5d6b.rlib" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-83f97429b7f69221.rlib" "-lSystem" "-lc" "-lm" "-L" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/lib/rustlib/x86_64-apple-darwin/lib" "-o" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/build/example/issue-72793" "-Wl,-dead_strip" "-nodefaultlibs" "-Wl,-rpath,@loader_path/../lib" "-undefined" "dynamic_lookup"
expected success, got: exit status: 1
  = note: ld: invalid r_symbolnum=14 in '/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/build/example/issue-72793.issue_72793.bc5a872a9ae27c1-cgu.0.rcgu.o'

          clang: error: linker command failed with exit code 1 (use -v to see invocation)
          


stderr ----
stderr ----
error: aborting due to 1 previous error



"/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/dist/rustc-clif" "--cap-lints=allow" "-Csymbol-mangling-version=v0" "-Zunstable-options" "--check-cfg=cfg(bootstrap)" "--check-cfg=cfg(parallel_compiler)" "-Zmacro-backtrace" "-Csplit-debuginfo=unpacked" "-Zosx-rpath-install-name" "-Clink-args=-Wl,-rpath,@loader_path/../lib" "--cfg=parallel_compiler" "-Clink-arg=-undefined" "-Clink-arg=dynamic_lookup" "-L" "crate=/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/build/example" "--out-dir" "/Users/runner/work/rust/rust/build/x86_64-apple-darwin/stage1-tools/cg_clif/build/example" "-Cdebuginfo=2" "--target" "x86_64-apple-darwin" "-Cpanic=abort" "-Zunstable-options" "--check-cfg=cfg(no_unstable_features)" "--check-cfg=cfg(jit)" "example/issue-72793.rs" "--cfg" "no_unstable_features" exited with status ExitStatus(unix_wait_status(256))
Build completed unsuccessfully in 0:41:48
  local time: Sat Feb 10 04:11:04 UTC 2024
  network time: Sat, 10 Feb 2024 04:11:05 GMT
##[error]Process completed with exit code 1.

@bors
Copy link
Contributor

bors commented Feb 10, 2024

💔 Test failed - checks-actions

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Feb 10, 2024
@compiler-errors
Copy link
Member Author

Linker error on clif looks unrelated?

@bors retry

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2024
@bors
Copy link
Contributor

bors commented Feb 10, 2024

⌛ Testing commit 540be28 with merge 757b8ef...

@bors
Copy link
Contributor

bors commented Feb 10, 2024

☀️ Test successful - checks-actions
Approved by: oli-obk
Pushing 757b8ef to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Feb 10, 2024
@bors bors merged commit 757b8ef into rust-lang:master Feb 10, 2024
12 checks passed
@rustbot rustbot added this to the 1.78.0 milestone Feb 10, 2024
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (757b8ef): comparison URL.

Overall result: ✅ improvements - no action needed

@rustbot label: -perf-regression

Instruction count

This is a highly reliable metric that was used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.5% [-0.8%, -0.2%] 5
Improvements ✅
(secondary)
-0.6% [-0.7%, -0.5%] 2
All ❌✅ (primary) -0.5% [-0.8%, -0.2%] 5

Max RSS (memory usage)

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-1.0% [-1.0%, -1.0%] 1
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -1.0% [-1.0%, -1.0%] 1

Cycles

Results

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
0.9% [0.9%, 0.9%] 1
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 667.844s -> 666.007s (-0.28%)
Artifact size: 308.06 MiB -> 308.04 MiB (-0.01%)

github-actions bot pushed a commit to rust-lang/miri that referenced this pull request Feb 11, 2024
…li-obk

Harmonize `AsyncFn` implementations, make async closures conditionally impl `Fn*` traits

This PR implements several changes to the built-in and libcore-provided implementations of `Fn*` and `AsyncFn*` to address two problems:
1. async closures do not implement the `Fn*` family traits, leading to breakage: https://crater-reports.s3.amazonaws.com/pr-120361/index.html
2. *references* to async closures do not implement `AsyncFn*`, as a consequence of the existing blanket impls of the shape `AsyncFn for F where F: Fn, F::Output: Future`.

In order to fix (1.), we implement `Fn` traits appropriately for async closures. It turns out that async closures can:
* always implement `FnOnce`, meaning that they're drop-in compatible with `FnOnce`-bound combinators like `Option::map`.
* conditionally implement `Fn`/`FnMut` if they have no captures, which means that existing usages of async closures should *probably* work without breakage (crater checking this: rust-lang/rust#120712 (comment)).

In order to fix (2.), we make all of the built-in callables implement `AsyncFn*` via built-in impls, and instead adjust the blanket impls for `AsyncFn*` provided by libcore to match the blanket impls for `Fn*`.
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Feb 26, 2024
…-check, r=oli-obk

Actually use the right closure kind when checking async Fn goals

Dumb copy-paste mistake on my part from rust-lang#120712. Sorry!

r? oli-obk

Fixes rust-lang#121599
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Feb 26, 2024
Rollup merge of rust-lang#121617 - compiler-errors:async-closure-kind-check, r=oli-obk

Actually use the right closure kind when checking async Fn goals

Dumb copy-paste mistake on my part from rust-lang#120712. Sorry!

r? oli-obk

Fixes rust-lang#121599
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
merged-by-bors This PR was explicitly merged by bors. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. WG-trait-system-refactor The Rustc Trait System Refactor Initiative
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants