diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
commit | 218caa410aa38c29984be31a5229b9fa717560ee (patch) | |
tree | c54bd55eeb6e4c508940a30e94c0032fbd45d677 /src/test/ui/consts/const_constructor | |
parent | Releasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip |
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/consts/const_constructor')
-rw-r--r-- | src/test/ui/consts/const_constructor/const-construct-call.rs | 110 | ||||
-rw-r--r-- | src/test/ui/consts/const_constructor/const_constructor_qpath.rs | 37 |
2 files changed, 0 insertions, 147 deletions
diff --git a/src/test/ui/consts/const_constructor/const-construct-call.rs b/src/test/ui/consts/const_constructor/const-construct-call.rs deleted file mode 100644 index cb735d7b3..000000000 --- a/src/test/ui/consts/const_constructor/const-construct-call.rs +++ /dev/null @@ -1,110 +0,0 @@ -// Test that constructors are considered to be const fns - -// run-pass - -// Ctor(..) is transformed to Ctor { 0: ... } in THIR lowering, so directly -// calling constructors doesn't require them to be const. - -type ExternalType = std::panic::AssertUnwindSafe<(Option<i32>, Result<i32, bool>)>; - -const fn call_external_constructors_in_local_vars() -> ExternalType { - let f = Some; - let g = Err; - let h = std::panic::AssertUnwindSafe; - let x = f(5); - let y = g(false); - let z = h((x, y)); - z -} - -const CALL_EXTERNAL_CONSTRUCTORS_IN_LOCAL_VARS: ExternalType = { - let f = Some; - let g = Err; - let h = std::panic::AssertUnwindSafe; - let x = f(5); - let y = g(false); - let z = h((x, y)); - z -}; - -const fn call_external_constructors_in_temps() -> ExternalType { - let x = { Some }(5); - let y = (*&Err)(false); - let z = [std::panic::AssertUnwindSafe][0]((x, y)); - z -} - -const CALL_EXTERNAL_CONSTRUCTORS_IN_TEMPS: ExternalType = { - let x = { Some }(5); - let y = (*&Err)(false); - let z = [std::panic::AssertUnwindSafe][0]((x, y)); - z -}; - -#[derive(Debug, PartialEq)] -enum LocalOption<T> { - Some(T), - _None, -} - -#[derive(Debug, PartialEq)] -enum LocalResult<T, E> { - _Ok(T), - Err(E), -} - -#[derive(Debug, PartialEq)] -struct LocalAssertUnwindSafe<T>(T); - -type LocalType = LocalAssertUnwindSafe<(LocalOption<i32>, LocalResult<i32, bool>)>; - -const fn call_local_constructors_in_local_vars() -> LocalType { - let f = LocalOption::Some; - let g = LocalResult::Err; - let h = LocalAssertUnwindSafe; - let x = f(5); - let y = g(false); - let z = h((x, y)); - z -} - -const CALL_LOCAL_CONSTRUCTORS_IN_LOCAL_VARS: LocalType = { - let f = LocalOption::Some; - let g = LocalResult::Err; - let h = LocalAssertUnwindSafe; - let x = f(5); - let y = g(false); - let z = h((x, y)); - z -}; - -const fn call_local_constructors_in_temps() -> LocalType { - let x = { LocalOption::Some }(5); - let y = (*&LocalResult::Err)(false); - let z = [LocalAssertUnwindSafe][0]((x, y)); - z -} - -const CALL_LOCAL_CONSTRUCTORS_IN_TEMPS: LocalType = { - let x = { LocalOption::Some }(5); - let y = (*&LocalResult::Err)(false); - let z = [LocalAssertUnwindSafe][0]((x, y)); - z -}; - -fn main() { - assert_eq!( - ( - call_external_constructors_in_local_vars().0, - call_external_constructors_in_temps().0, - call_local_constructors_in_local_vars(), - call_local_constructors_in_temps(), - ), - ( - CALL_EXTERNAL_CONSTRUCTORS_IN_LOCAL_VARS.0, - CALL_EXTERNAL_CONSTRUCTORS_IN_TEMPS.0, - CALL_LOCAL_CONSTRUCTORS_IN_LOCAL_VARS, - CALL_LOCAL_CONSTRUCTORS_IN_TEMPS, - ) - ); -} diff --git a/src/test/ui/consts/const_constructor/const_constructor_qpath.rs b/src/test/ui/consts/const_constructor/const_constructor_qpath.rs deleted file mode 100644 index 7c55f470f..000000000 --- a/src/test/ui/consts/const_constructor/const_constructor_qpath.rs +++ /dev/null @@ -1,37 +0,0 @@ -// run-pass - -trait ConstDefault { - const DEFAULT: Self; -} - -#[derive(PartialEq)] -enum E { - V(i32), - W(usize), -} - -impl ConstDefault for E { - const DEFAULT: Self = Self::V(23); -} - -impl ConstDefault for Option<i32> { - const DEFAULT: Self = Self::Some(23); -} - -impl E { - const NON_DEFAULT: Self = Self::W(12); - const fn local_fn() -> Self { - Self::V(23) - } -} - -const fn explicit_qpath() -> E { - let _x = <Option<usize>>::Some(23); - <E>::W(12) -} - -fn main() { - assert!(E::DEFAULT == E::local_fn()); - assert!(Option::DEFAULT == Some(23)); - assert!(E::NON_DEFAULT == explicit_qpath()); -} |