diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:58 +0000 |
commit | a4b7ed7a42c716ab9f05e351f003d589124fd55d (patch) | |
tree | b620cd3f223850b28716e474e80c58059dca5dd4 /src/test/ui/consts/trait_specialization.rs | |
parent | Adding upstream version 1.67.1+dfsg1. (diff) | |
download | rustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.tar.xz rustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.zip |
Adding upstream version 1.68.2+dfsg1.upstream/1.68.2+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/consts/trait_specialization.rs')
-rw-r--r-- | src/test/ui/consts/trait_specialization.rs | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/src/test/ui/consts/trait_specialization.rs b/src/test/ui/consts/trait_specialization.rs deleted file mode 100644 index c581ef6b0..000000000 --- a/src/test/ui/consts/trait_specialization.rs +++ /dev/null @@ -1,65 +0,0 @@ -// ignore-wasm32-bare which doesn't support `std::process:exit()` -// compile-flags: -Zmir-opt-level=3 -// run-pass - -// Tests that specialization does not cause optimizations running on polymorphic MIR to resolve -// to a `default` implementation. - -#![feature(specialization)] //~ WARN the feature `specialization` is incomplete - -trait Marker {} - -trait SpecializedTrait { - const CONST_BOOL: bool; - const CONST_STR: &'static str; - fn method() -> &'static str; -} -impl <T> SpecializedTrait for T { - default const CONST_BOOL: bool = false; - default const CONST_STR: &'static str = "in default impl"; - #[inline(always)] - default fn method() -> &'static str { - "in default impl" - } -} -impl <T: Marker> SpecializedTrait for T { - const CONST_BOOL: bool = true; - const CONST_STR: &'static str = "in specialized impl"; - fn method() -> &'static str { - "in specialized impl" - } -} - -fn const_bool<T>() -> &'static str { - if <T as SpecializedTrait>::CONST_BOOL { - "in specialized impl" - } else { - "in default impl" - } -} -fn const_str<T>() -> &'static str { - <T as SpecializedTrait>::CONST_STR -} -fn run_method<T>() -> &'static str { - <T as SpecializedTrait>::method() -} - -struct TypeA; -impl Marker for TypeA {} -struct TypeB; - -#[inline(never)] -fn exit_if_not_eq(left: &str, right: &str) { - if left != right { - std::process::exit(1); - } -} - -pub fn main() { - exit_if_not_eq("in specialized impl", const_bool::<TypeA>()); - exit_if_not_eq("in default impl", const_bool::<TypeB>()); - exit_if_not_eq("in specialized impl", const_str::<TypeA>()); - exit_if_not_eq("in default impl", const_str::<TypeB>()); - exit_if_not_eq("in specialized impl", run_method::<TypeA>()); - exit_if_not_eq("in default impl", run_method::<TypeB>()); -} |