summaryrefslogtreecommitdiffstats
path: root/src/test/ui/consts/trait_specialization.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/consts/trait_specialization.rs')
-rw-r--r--src/test/ui/consts/trait_specialization.rs65
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>());
-}