} //^ (i32, {unknown}, i32, {unknown})
//- /foo.rs crate:foo
-struct S;
+pub struct S;
#[cfg(not(test))]
impl S {
!0..6 '1isize': isize
!0..6 '1isize': isize
!0..6 '1isize': isize
- !0..6 '1isize': isize
39..442 '{ ...!(); }': ()
73..94 'spam!(...am!())': {unknown}
100..119 'for _ ...!() {}': ()
117..119 '{}': ()
124..134 '|| spam!()': || -> isize
140..156 'while ...!() {}': ()
+ 146..153 'spam!()': bool
154..156 '{}': ()
161..174 'break spam!()': !
180..194 'return spam!()': !
!0..6 '1isize': isize
!0..6 '1isize': isize
!0..6 '1isize': isize
- !0..6 '1isize': isize
53..456 '{ ...!(); }': ()
87..108 'spam!(...am!())': {unknown}
114..133 'for _ ...!() {}': ()
131..133 '{}': ()
138..148 '|| spam!()': || -> isize
154..170 'while ...!() {}': ()
+ 160..167 'spam!()': bool
168..170 '{}': ()
175..188 'break spam!()': !
194..208 'return spam!()': !
fn infer_derive_clone_simple() {
check_types(
r#"
-//- /main.rs crate:main deps:core
+//- minicore: derive, clone
#[derive(Clone)]
struct S;
fn test() {
S.clone();
} //^^^^^^^^^ S
-
-//- /lib.rs crate:core
-pub mod prelude {
- pub mod rust_2018 {
- #[rustc_builtin_macro]
- pub macro Clone {}
- pub use crate::clone::Clone;
- }
-}
-
-pub mod clone {
- pub trait Clone {
- fn clone(&self) -> Self;
- }
-}
-"#,
- );
-}
-
-#[test]
-fn infer_derive_clone_in_core() {
- check_types(
- r#"
-//- /lib.rs crate:core
-#[prelude_import]
-use prelude::rust_2018::*;
-
-pub mod prelude {
- pub mod rust_2018 {
- #[rustc_builtin_macro]
- pub macro Clone {}
- pub use crate::clone::Clone;
- }
-}
-
-pub mod clone {
- pub trait Clone {
- fn clone(&self) -> Self;
- }
-}
-
-#[derive(Clone)]
-pub struct S;
-
-//- /main.rs crate:main deps:core
-use core::S;
-fn test() {
- S.clone();
-} //^^^^^^^^^ S
"#,
);
}
fn infer_derive_clone_with_params() {
check_types(
r#"
-//- /main.rs crate:main deps:core
+//- minicore: clone, derive
#[derive(Clone)]
struct S;
#[derive(Clone)]
x;
//^ (Wrapper<S>, {unknown})
}
-
-//- /lib.rs crate:core
-pub mod prelude {
- pub mod rust_2018 {
- #[rustc_builtin_macro]
- pub macro Clone {}
- pub use crate::clone::Clone;
- }
-}
-
-pub mod clone {
- pub trait Clone {
- fn clone(&self) -> Self;
- }
-}
"#,
);
}
// FIXME: this test current now do nothing
check_types(
r#"
-//- /main.rs crate:main
+//- minicore: derive
use foo::Foo;
#[derive(Foo)]