Revert "Auto merge of #89450 - usbalbin:const_try_revert, r=oli-obk"

This reverts commit a8387aef8c, reversing
changes made to 6e12110812.
This commit is contained in:
Deadbeef 2021-12-05 18:46:29 +08:00
parent 84b1d859c8
commit e22fe4008c
No known key found for this signature in database
GPG key ID: 6D017A96D8E6C2F9
8 changed files with 54 additions and 15 deletions

View file

@ -534,9 +534,10 @@ fn as_mut(&mut self) -> &mut U {
// From implies Into
#[stable(feature = "rust1", since = "1.0.0")]
impl<T, U> Into<U> for T
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
impl<T, U> const Into<U> for T
where
U: From<T>,
U: ~const From<T>,
{
fn into(self) -> U {
U::from(self)

View file

@ -112,6 +112,7 @@
#![feature(const_float_classify)]
#![feature(const_fmt_arguments_new)]
#![feature(const_heap)]
#![feature(const_convert)]
#![feature(const_inherent_unchecked_arith)]
#![feature(const_int_unchecked_arith)]
#![feature(const_intrinsic_copy)]

View file

@ -2077,7 +2077,8 @@ fn from_iter<I: IntoIterator<Item = Option<A>>>(iter: I) -> Option<V> {
}
#[unstable(feature = "try_trait_v2", issue = "84277")]
impl<T> ops::Try for Option<T> {
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
impl<T> const ops::Try for Option<T> {
type Output = T;
type Residual = Option<convert::Infallible>;
@ -2096,6 +2097,7 @@ fn branch(self) -> ControlFlow<Self::Residual, Self::Output> {
}
#[unstable(feature = "try_trait_v2", issue = "84277")]
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
impl<T> const ops::FromResidual for Option<T> {
#[inline]
fn from_residual(residual: Option<convert::Infallible>) -> Self {

View file

@ -1945,7 +1945,8 @@ fn from_iter<I: IntoIterator<Item = Result<A, E>>>(iter: I) -> Result<V, E> {
}
#[unstable(feature = "try_trait_v2", issue = "84277")]
impl<T, E> ops::Try for Result<T, E> {
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
impl<T, E> const ops::Try for Result<T, E> {
type Output = T;
type Residual = Result<convert::Infallible, E>;
@ -1964,7 +1965,10 @@ fn branch(self) -> ControlFlow<Self::Residual, Self::Output> {
}
#[unstable(feature = "try_trait_v2", issue = "84277")]
impl<T, E, F: From<E>> ops::FromResidual<Result<convert::Infallible, E>> for Result<T, F> {
#[rustc_const_unstable(feature = "const_convert", issue = "88674")]
impl<T, E, F: ~const From<E>> const ops::FromResidual<Result<convert::Infallible, E>>
for Result<T, F>
{
#[inline]
fn from_residual(residual: Result<convert::Infallible, E>) -> Self {
match residual {

View file

@ -0,0 +1,16 @@
#[test]
fn convert() {
const fn from(x: i32) -> i32 {
i32::from(x)
}
const FOO: i32 = from(42);
assert_eq!(FOO, 42);
const fn into(x: Vec<String>) -> Vec<String> {
x.into()
}
const BAR: Vec<String> = into(Vec::new());
assert_eq!(BAR, Vec::<String>::new());
}

View file

@ -12,11 +12,11 @@
#![feature(const_convert)]
#![feature(const_maybe_uninit_as_mut_ptr)]
#![feature(const_maybe_uninit_assume_init)]
#![feature(const_num_from_num)]
#![feature(const_ptr_read)]
#![feature(const_ptr_write)]
#![feature(const_ptr_offset)]
#![feature(const_trait_impl)]
#![feature(const_num_from_num)]
#![feature(core_intrinsics)]
#![feature(core_private_bignum)]
#![feature(core_private_diy_float)]
@ -96,6 +96,7 @@
mod clone;
mod cmp;
mod const_ptr;
mod convert;
mod fmt;
mod future;
mod hash;

View file

@ -1,9 +0,0 @@
// run-pass
const _FOO: fn() -> String = || "foo".into();
pub fn bar() -> fn() -> String {
|| "bar".into()
}
fn main(){}

View file

@ -0,0 +1,23 @@
// run-pass
#![feature(try_trait_v2)]
#![feature(const_trait_impl)]
#![feature(const_try)]
#![feature(const_convert)]
fn main() {
const fn result() -> Result<bool, ()> {
Err(())?;
Ok(true)
}
const FOO: Result<bool, ()> = result();
assert_eq!(Err(()), FOO);
const fn option() -> Option<()> {
None?;
Some(())
}
const BAR: Option<()> = option();
assert_eq!(None, BAR);
}