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

Allow trait methods to be called on concrete types in a const context #68847

Merged
merged 16 commits into from
Feb 20, 2020

Conversation

ecstatic-morse
Copy link
Contributor

@ecstatic-morse ecstatic-morse commented Feb 5, 2020

This partially implements RFC 2632 by const-checking methods inside an impl const block and allowing those methods to be called on concrete types. Calling trait methods on type parameters in a const context is not yet allowed. Implementing this will require much more work. Since we are only concerned with methods on concrete types, we are able to take advantage of the machinery in Instance::resolve, which is doing most of the work.

This also propagates #[rustc_const_unstable] from parent items to child items, making that attribute behave like #[stable] and #[unstable] do. This allows trait methods to be marked as unstably const.

cc #67792 #57563
cc @rust-lang/wg-const-eval
r? @oli-obk

@ecstatic-morse ecstatic-morse added A-const-eval Area: Constant evaluation (MIR interpretation) F-const_trait_impl `#![feature(const_trait_impl)]` labels Feb 5, 2020
@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Feb 5, 2020
@rust-highfive

This comment has been minimized.

fn plus(self, rhs: Self) -> Self;
}

impl const Plus for i32 {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would this test work the same if the Add trait were used instead of Plus?

Copy link
Contributor Author

@ecstatic-morse ecstatic-morse Feb 5, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. I'll add a type with a const impl of Add to this test. Obviously I can't do this directly on i32 outside the standard library without conflicting impls. Note that, with the current implementation, it's possible to have const unstable trait impls even though it's not possible to have unstable ones. This means we could have const unstable implementations of arithmetic traits for the primitive types. I will try to find an approach to trait solving that preserves this property.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that, with the current implementation, it's possible to have const unstable trait impls even though it's not possible to have unstable ones. This means we could have const unstable implementations of arithmetic traits for the primitive types. I will try to find an approach to trait solving that preserves this property.

Oh wow, that would be a neat feature

@ecstatic-morse ecstatic-morse changed the title [WIP] Allow trait methods to be called on concrete types in a const context Allow trait methods to be called on concrete types in a const context Feb 7, 2020
@rust-highfive

This comment has been minimized.

@ecstatic-morse
Copy link
Contributor Author

ecstatic-morse commented Feb 8, 2020

@oli-obk, I'm conflicted about this PR. On the one hand, it allows a lot of useful operations within const initializers on nightly. Notably, you can use the various arithmetic operators on custom types. On the other, it's a hack that can't reason about generic types at all. For now, associated type bounds within const impls are not required to be const, violating the RFC, although actually trying to call methods on associated types will always fail in a const context. Perhaps this is okay since this feature gate is marked experimental.

The next step is to teach the trait solver and method resolution about the constness of impls. This will require a lot of small changes to performance-sensitive code, so it will take a while.

@oli-obk
Copy link
Contributor

oli-obk commented Feb 10, 2020

For now, associated type bounds within const impls are not required to be const, violating the RFC, although actually trying to call methods on associated types will always fail in a const context. Perhaps this is okay since this feature gate is marked experimental.

Yea that's ok. You can mark the feature as partially implemented to make sure users get a warning.

I'm conflicted about this PR. On the one hand, it allows a lot of useful operations within const initializers on nightly. Notably, you can use the various arithmetic operators on custom types. On the other, it's a hack that can't reason about generic types at all.

Can you elaborate on the

can't reason about generic types at all.

part? Do you mean const fn foo<T: Add>(arg: SomeStruct<T>) { arg + arg; } won't work even if there's an Add impl for SomeStruct<T: Arg>?

@ecstatic-morse
Copy link
Contributor Author

Do you mean const fn foo<T: Add>(arg: SomeStruct) { arg + arg; } won't work even if there's an Add impl for SomeStruct<T: Arg>?

I thought that Instance::resolve only worked when the types were fully monomorphized, but apparently that's not quite right. Clearly I need more tests. I added a passing one for calling <Struct<T> as ops::Add>::add. Calling a trait method directly on T doesn't work, however.

@oli-obk
Copy link
Contributor

oli-obk commented Feb 11, 2020

r=me with a stability test for the above worry

@bors
Copy link
Contributor

bors commented Feb 13, 2020

☔ The latest upstream changes (presumably #69023) made this pull request unmergeable. Please resolve the merge conflicts.

@ecstatic-morse
Copy link
Contributor Author

#69036 will change the effects of this, so I'll hold off until that is merged. cc @eddyb who will probably not be happy with Instance::resolve being used in this way.

@eddyb
Copy link
Member

eddyb commented Feb 16, 2020

This seems straight-forward and the use of Instance::resolve looks correct.
However, I think you should make sure that the ParamEnv is UserFacing, not RevealAll, because you want maximally conservative behavior around specialization - similar to associated types in typeck.

cc @nikomatsakis

// See if this is a trait method for a concrete type whose impl of that trait is
// `const`.
if self.tcx.features().const_trait_impl {
let instance = Instance::resolve(self.tcx, self.param_env, def_id, substs);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As long as self.param_env is tcx.param_env(some_def_id) without calling .with_reveal_all() or w/e, it should be fine.

@rust-highfive
Copy link
Collaborator

The job mingw-check of your PR failed (pretty log, raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2020-02-18T23:48:37.4540883Z ========================== Starting Command Output ===========================
2020-02-18T23:48:37.4542718Z [command]/bin/bash --noprofile --norc /home/vsts/work/_temp/e4b4bba3-5650-4953-b8aa-89b99984d0f5.sh
2020-02-18T23:48:37.4542760Z 
2020-02-18T23:48:37.4546093Z ##[section]Finishing: Disable git automatic line ending conversion
2020-02-18T23:48:37.4555315Z ##[section]Starting: Checkout rust-lang/rust@refs/pull/68847/merge to s
2020-02-18T23:48:37.4557377Z Task         : Get sources
2020-02-18T23:48:37.4557414Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
2020-02-18T23:48:37.4557450Z Version      : 1.0.0
2020-02-18T23:48:37.4557546Z Author       : Microsoft
---
2020-02-18T23:48:38.4294324Z ##[command]git remote add origin https://github.com/rust-lang/rust
2020-02-18T23:48:38.4305883Z ##[command]git config gc.auto 0
2020-02-18T23:48:38.4308826Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2020-02-18T23:48:38.4311006Z ##[command]git config --get-all http.proxy
2020-02-18T23:48:38.4317879Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/68847/merge:refs/remotes/pull/68847/merge
---
2020-02-18T23:52:51.3785679Z extracting /checkout/obj/build/cache/2020-01-31/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz
2020-02-18T23:52:51.4510270Z error: failed to resolve patches for `https://github.com/rust-lang/crates.io-index`
2020-02-18T23:52:51.4510424Z 
2020-02-18T23:52:51.4510518Z Caused by:
2020-02-18T23:52:51.4510977Z   patch for `rustfmt-nightly` in `https://github.com/rust-lang/crates.io-index` did not resolve to any crates. If this is unexpected, you may wish to consult: https://github.com/rust-lang/cargo/issues/4678
2020-02-18T23:52:51.4521301Z Build completed unsuccessfully in 0:00:23
2020-02-18T23:52:51.4563651Z == clock drift check ==
2020-02-18T23:52:51.4570851Z   local time: Tue Feb 18 23:52:51 UTC 2020
2020-02-18T23:52:51.7443716Z   network time: Tue, 18 Feb 2020 23:52:51 GMT
2020-02-18T23:52:51.7443716Z   network time: Tue, 18 Feb 2020 23:52:51 GMT
2020-02-18T23:52:51.7448434Z == end clock drift check ==
2020-02-18T23:52:59.2789069Z 
2020-02-18T23:52:59.2904004Z ##[error]Bash exited with code '1'.
2020-02-18T23:52:59.2919995Z ##[section]Finishing: Run build
2020-02-18T23:52:59.2937350Z ##[section]Starting: Checkout rust-lang/rust@refs/pull/68847/merge to s
2020-02-18T23:52:59.2939638Z Task         : Get sources
2020-02-18T23:52:59.2939744Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
2020-02-18T23:52:59.2939801Z Version      : 1.0.0
2020-02-18T23:52:59.2939847Z Author       : Microsoft
2020-02-18T23:52:59.2939847Z Author       : Microsoft
2020-02-18T23:52:59.2939935Z Help         : [More Information](https://go.microsoft.com/fwlink/?LinkId=798199)
2020-02-18T23:52:59.2939992Z ==============================================================================
2020-02-18T23:52:59.6898863Z Cleaning any cached credential from repository: rust-lang/rust (GitHub)
2020-02-18T23:52:59.6936762Z ##[section]Finishing: Checkout rust-lang/rust@refs/pull/68847/merge to s
2020-02-18T23:52:59.7040852Z Cleaning up task key
2020-02-18T23:52:59.7041643Z Start cleaning up orphan processes.
2020-02-18T23:52:59.7153561Z Terminate orphan process: pid (3682) (python)
2020-02-18T23:52:59.7348342Z ##[section]Finishing: Finalize Job

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-7 of your PR failed (pretty log, raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2020-02-19T05:04:24.5104204Z ========================== Starting Command Output ===========================
2020-02-19T05:04:24.5106760Z [command]/bin/bash --noprofile --norc /home/vsts/work/_temp/ff622616-d5c4-4e72-ba7a-ca54359cbd47.sh
2020-02-19T05:04:24.5106795Z 
2020-02-19T05:04:24.5109436Z ##[section]Finishing: Disable git automatic line ending conversion
2020-02-19T05:04:24.5114526Z ##[section]Starting: Checkout rust-lang/rust@refs/pull/68847/merge to s
2020-02-19T05:04:24.5116166Z Task         : Get sources
2020-02-19T05:04:24.5116195Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
2020-02-19T05:04:24.5116239Z Version      : 1.0.0
2020-02-19T05:04:24.5116267Z Author       : Microsoft
---
2020-02-19T05:04:25.5540912Z ##[command]git remote add origin https://github.com/rust-lang/rust
2020-02-19T05:04:25.5637773Z ##[command]git config gc.auto 0
2020-02-19T05:04:25.5718557Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2020-02-19T05:04:25.5774648Z ##[command]git config --get-all http.proxy
2020-02-19T05:04:25.5930823Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/68847/merge:refs/remotes/pull/68847/merge
---
2020-02-19T05:55:47.9771038Z .................................................................................................... 1700/9682
2020-02-19T05:55:51.9412071Z .................................................................................................... 1800/9682
2020-02-19T05:56:01.6632080Z ...................................i................................................................ 1900/9682
2020-02-19T05:56:07.9710408Z .................................................................................................... 2000/9682
2020-02-19T05:56:20.2059150Z .........................iiiii...................................................................... 2100/9682
2020-02-19T05:56:28.2312242Z .................................................................................................... 2300/9682
2020-02-19T05:56:30.1761019Z .................................................................................................... 2400/9682
2020-02-19T05:56:33.8329018Z .................................................................................................... 2500/9682
2020-02-19T05:56:50.9151424Z .................................................................................................... 2600/9682
---
2020-02-19T05:59:06.3588911Z i................................................................................................... 5000/9682
2020-02-19T05:59:13.9320900Z .................................................................................................... 5100/9682
2020-02-19T05:59:18.0567493Z ...........................i........................................................................ 5200/9682
2020-02-19T05:59:27.1425914Z .................................................................................................... 5300/9682
2020-02-19T05:59:31.8599767Z ..ii.ii........i...i................................................................................ 5400/9682
2020-02-19T05:59:40.6506275Z .................................................................................................... 5600/9682
2020-02-19T05:59:49.3488807Z ............................................................................................i....... 5700/9682
2020-02-19T05:59:55.9943993Z .................................................................................................... 5800/9682
2020-02-19T06:00:00.1982038Z ..........................................................................................i......... 5900/9682
2020-02-19T06:00:00.1982038Z ..........................................................................................i......... 5900/9682
2020-02-19T06:00:08.8344233Z ...................................................................................ii...i..ii....... 6000/9682
2020-02-19T06:00:28.4158523Z .................................................................................................... 6200/9682
2020-02-19T06:00:34.6539817Z .................................................................................................... 6300/9682
2020-02-19T06:00:40.9875123Z .................................................................................................... 6400/9682
2020-02-19T06:00:40.9875123Z .................................................................................................... 6400/9682
2020-02-19T06:00:54.3179584Z ...........i..ii.................................................................................... 6500/9682
2020-02-19T06:01:10.5670791Z .................................................................................................... 6700/9682
2020-02-19T06:01:12.4287633Z ...i................................................................................................ 6800/9682
2020-02-19T06:01:14.3352193Z .................................................................................................... 6900/9682
2020-02-19T06:01:16.3085913Z .........................i.......................................................................... 7000/9682
---
2020-02-19T06:02:44.3719424Z .................................................................................................... 7700/9682
2020-02-19T06:02:49.1536277Z .................................................................................................... 7800/9682
2020-02-19T06:02:54.2924616Z .....................................................................i...F.......................... 7900/9682
2020-02-19T06:03:02.8919610Z .................................................................................................... 8000/9682
2020-02-19T06:03:07.9561742Z ..................iiiiiii.i......................................................................... 8100/9682
2020-02-19T06:03:20.0950465Z .................................................................................................... 8300/9682
2020-02-19T06:03:28.0997186Z .................................................................................................... 8400/9682
2020-02-19T06:03:40.3943821Z .................................................................................................... 8500/9682
2020-02-19T06:03:46.5597018Z .................................................................................................... 8600/9682
---
2020-02-19T06:05:28.2027549Z 4 LL |     fn foo() { non_const() }
2020-02-19T06:05:28.2027903Z -    |     ^^^^^^^^^^^^^^^^^^^^^^^^
2020-02-19T06:05:28.2028063Z +    |                ^^^^^^^^^^^
2020-02-19T06:05:28.2028190Z 6    |
2020-02-19T06:05:28.2028708Z 7    = note: see issue #57563 <***/issues/57563> for more information
2020-02-19T06:05:28.2028897Z 8    = help: add `#![feature(const_fn)]` to the crate attributes to enable
2020-02-19T06:05:28.2029144Z 
2020-02-19T06:05:28.2029271Z The actual stderr differed from the expected stderr.
2020-02-19T06:05:28.2029744Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl/const-check-fns-in-const-impl.stderr
2020-02-19T06:05:28.2029744Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl/const-check-fns-in-const-impl.stderr
2020-02-19T06:05:28.2030118Z To update references, rerun the tests and pass the `--bless` flag
2020-02-19T06:05:28.2030548Z To only update this specific test, also pass `--test-args rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs`
2020-02-19T06:05:28.2030831Z error: 1 errors occurred comparing output.
2020-02-19T06:05:28.2031183Z status: exit code: 1
2020-02-19T06:05:28.2031183Z status: exit code: 1
2020-02-19T06:05:28.2032291Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-A" "unused" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl/auxiliary"
2020-02-19T06:05:28.2033223Z ------------------------------------------
2020-02-19T06:05:28.2033392Z 
2020-02-19T06:05:28.2033712Z ------------------------------------------
2020-02-19T06:05:28.2033884Z stderr:
2020-02-19T06:05:28.2033884Z stderr:
2020-02-19T06:05:28.2034215Z ------------------------------------------
2020-02-19T06:05:28.2034395Z error[E0723]: can only call other `const fn` within a `const fn`, but `const non_const` is not stable as `const fn`
2020-02-19T06:05:28.2034772Z   --> /checkout/src/test/ui/rfc-2632-const-trait-impl/const-check-fns-in-const-impl.rs:12:16
2020-02-19T06:05:28.2034963Z    |
2020-02-19T06:05:28.2035092Z LL |     fn foo() { non_const() }
2020-02-19T06:05:28.2035233Z    |                ^^^^^^^^^^^
2020-02-19T06:05:28.2035360Z    |
2020-02-19T06:05:28.2035941Z    = note: see issue #57563 <***/issues/57563> for more information
2020-02-19T06:05:28.2036139Z    = help: add `#![feature(const_fn)]` to the crate attributes to enable
2020-02-19T06:05:28.2036390Z error: aborting due to previous error
2020-02-19T06:05:28.2036677Z 
2020-02-19T06:05:28.2037024Z For more information about this error, try `rustc --explain E0723`.
2020-02-19T06:05:28.2037170Z 
---
2020-02-19T06:05:28.2042168Z thread 'main' panicked at 'Some tests failed', src/tools/compiletest/src/main.rs:348:22
2020-02-19T06:05:28.2042418Z note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
2020-02-19T06:05:28.2052519Z 
2020-02-19T06:05:28.2052742Z 
2020-02-19T06:05:28.2057951Z command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/compiletest" "--compile-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib" "--run-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-gnu/lib" "--rustc-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "--src-base" "/checkout/src/test/ui" "--build-base" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui" "--stage-id" "stage2-x86_64-unknown-linux-gnu" "--mode" "ui" "--target" "x86_64-unknown-linux-gnu" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/usr/lib/llvm-7/bin/FileCheck" "--host-rustcflags" "-Crpath -O -Cdebuginfo=0 -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--target-rustcflags" "-Crpath -O -Cdebuginfo=0 -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--docck-python" "/usr/bin/python2.7" "--lldb-python" "/usr/bin/python2.7" "--gdb" "/usr/bin/gdb" "--quiet" "--llvm-version" "7.0.0\n" "--system-llvm" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" "" "--color" "always"
2020-02-19T06:05:28.2059280Z 
2020-02-19T06:05:28.2059309Z 
2020-02-19T06:05:28.2090894Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
2020-02-19T06:05:28.2091004Z Build completed unsuccessfully in 0:55:29
2020-02-19T06:05:28.2091004Z Build completed unsuccessfully in 0:55:29
2020-02-19T06:05:28.2124900Z == clock drift check ==
2020-02-19T06:05:28.2152430Z   local time: Wed Feb 19 06:05:28 UTC 2020
2020-02-19T06:05:28.5111936Z   network time: Wed, 19 Feb 2020 06:05:28 GMT
2020-02-19T06:05:28.5112035Z == end clock drift check ==
2020-02-19T06:05:28.9678273Z 
2020-02-19T06:05:28.9768522Z ##[error]Bash exited with code '1'.
2020-02-19T06:05:28.9780643Z ##[section]Finishing: Run build
2020-02-19T06:05:28.9800359Z ##[section]Starting: Checkout rust-lang/rust@refs/pull/68847/merge to s
2020-02-19T06:05:28.9802098Z Task         : Get sources
2020-02-19T06:05:28.9802135Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.
2020-02-19T06:05:28.9802204Z Version      : 1.0.0
2020-02-19T06:05:28.9802237Z Author       : Microsoft
2020-02-19T06:05:28.9802237Z Author       : Microsoft
2020-02-19T06:05:28.9802273Z Help         : [More Information](https://go.microsoft.com/fwlink/?LinkId=798199)
2020-02-19T06:05:28.9802330Z ==============================================================================
2020-02-19T06:05:29.3585942Z Cleaning any cached credential from repository: rust-lang/rust (GitHub)
2020-02-19T06:05:29.3622562Z ##[section]Finishing: Checkout rust-lang/rust@refs/pull/68847/merge to s
2020-02-19T06:05:29.3716802Z Cleaning up task key
2020-02-19T06:05:29.3717427Z Start cleaning up orphan processes.
2020-02-19T06:05:29.3806818Z Terminate orphan process: pid (3582) (python)
2020-02-19T06:05:29.3993593Z ##[section]Finishing: Finalize Job

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@oli-obk
Copy link
Contributor

oli-obk commented Feb 19, 2020

r=me with tests blessed

@ecstatic-morse
Copy link
Contributor Author

@bors r=oli-obk

@bors
Copy link
Contributor

bors commented Feb 19, 2020

📌 Commit 19801b1 has been approved by oli-obk

@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 19, 2020
@bors
Copy link
Contributor

bors commented Feb 20, 2020

⌛ Testing commit 19801b1 with merge 6af388b...

@bors
Copy link
Contributor

bors commented Feb 20, 2020

☀️ Test successful - checks-azure
Approved by: oli-obk
Pushing 6af388b to master...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-const-eval Area: Constant evaluation (MIR interpretation) F-const_trait_impl `#![feature(const_trait_impl)]` 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.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants