Skip to content

Commit 50ce393

Browse files
committed
Rust: Add type inference regression test
1 parent 063175b commit 50ce393

File tree

2 files changed

+98
-82
lines changed

2 files changed

+98
-82
lines changed

rust/ql/test/library-tests/type-inference/main.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2883,6 +2883,16 @@ mod literal_overlap {
28832883
}
28842884
}
28852885

2886+
mod from_default {
2887+
#[derive(Default)]
2888+
struct S;
2889+
2890+
fn f() -> S {
2891+
let x = Default::default(); // $ target=default type=x:S
2892+
From::from(x) // $ target=from
2893+
}
2894+
}
2895+
28862896
mod associated_types;
28872897
mod blanket_impl;
28882898
mod closure;

rust/ql/test/library-tests/type-inference/type-inference.expected

Lines changed: 88 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -3727,48 +3727,49 @@ inferCertainType
37273727
| main.rs:2878:21:2878:21 | y | | {EXTERNAL LOCATION} | & |
37283728
| main.rs:2881:13:2881:13 | y | | {EXTERNAL LOCATION} | usize |
37293729
| main.rs:2882:23:2882:23 | y | | {EXTERNAL LOCATION} | usize |
3730-
| main.rs:2892:11:2927:1 | { ... } | | {EXTERNAL LOCATION} | () |
3731-
| main.rs:2893:5:2893:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3732-
| main.rs:2894:5:2894:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
3733-
| main.rs:2895:5:2895:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
3734-
| main.rs:2895:20:2895:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3735-
| main.rs:2895:41:2895:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3736-
| main.rs:2896:5:2896:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3737-
| main.rs:2897:5:2897:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3738-
| main.rs:2898:5:2898:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
3739-
| main.rs:2899:5:2899:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3740-
| main.rs:2900:5:2900:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3741-
| main.rs:2901:5:2901:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3742-
| main.rs:2902:5:2902:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3743-
| main.rs:2903:5:2903:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3744-
| main.rs:2904:5:2904:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3745-
| main.rs:2905:5:2905:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3746-
| main.rs:2906:5:2906:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3747-
| main.rs:2907:5:2907:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3748-
| main.rs:2908:5:2908:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3749-
| main.rs:2909:5:2909:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3750-
| main.rs:2910:5:2910:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3751-
| main.rs:2911:5:2911:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
3752-
| main.rs:2911:5:2911:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
3753-
| main.rs:2912:5:2912:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3754-
| main.rs:2913:5:2913:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3755-
| main.rs:2914:5:2914:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3756-
| main.rs:2915:5:2915:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3757-
| main.rs:2916:5:2916:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3758-
| main.rs:2917:5:2917:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3759-
| main.rs:2918:5:2918:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3730+
| main.rs:2890:17:2893:5 | { ... } | | main.rs:2887:5:2888:13 | S |
3731+
| main.rs:2902:11:2937:1 | { ... } | | {EXTERNAL LOCATION} | () |
3732+
| main.rs:2903:5:2903:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3733+
| main.rs:2904:5:2904:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
3734+
| main.rs:2905:5:2905:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
3735+
| main.rs:2905:20:2905:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3736+
| main.rs:2905:41:2905:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3737+
| main.rs:2906:5:2906:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3738+
| main.rs:2907:5:2907:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3739+
| main.rs:2908:5:2908:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
3740+
| main.rs:2909:5:2909:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3741+
| main.rs:2910:5:2910:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3742+
| main.rs:2911:5:2911:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3743+
| main.rs:2912:5:2912:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3744+
| main.rs:2913:5:2913:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3745+
| main.rs:2914:5:2914:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3746+
| main.rs:2915:5:2915:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3747+
| main.rs:2916:5:2916:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3748+
| main.rs:2917:5:2917:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3749+
| main.rs:2918:5:2918:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
37603750
| main.rs:2919:5:2919:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3761-
| main.rs:2920:5:2920:28 | ...::test(...) | | {EXTERNAL LOCATION} | () |
3762-
| main.rs:2921:5:2921:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
3763-
| main.rs:2922:5:2922:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
3764-
| main.rs:2923:5:2923:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
3765-
| main.rs:2924:5:2924:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
3766-
| main.rs:2925:5:2925:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
3767-
| main.rs:2925:5:2925:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
3768-
| main.rs:2925:5:2925:20 | ...::f(...) | T | main.rs:2695:5:2697:5 | dyn MyTrait |
3769-
| main.rs:2925:5:2925:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
3770-
| main.rs:2925:16:2925:19 | true | | {EXTERNAL LOCATION} | bool |
3771-
| main.rs:2926:5:2926:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3751+
| main.rs:2920:5:2920:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3752+
| main.rs:2921:5:2921:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
3753+
| main.rs:2921:5:2921:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
3754+
| main.rs:2922:5:2922:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3755+
| main.rs:2923:5:2923:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3756+
| main.rs:2924:5:2924:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3757+
| main.rs:2925:5:2925:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3758+
| main.rs:2926:5:2926:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3759+
| main.rs:2927:5:2927:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3760+
| main.rs:2928:5:2928:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3761+
| main.rs:2929:5:2929:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
3762+
| main.rs:2930:5:2930:28 | ...::test(...) | | {EXTERNAL LOCATION} | () |
3763+
| main.rs:2931:5:2931:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
3764+
| main.rs:2932:5:2932:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
3765+
| main.rs:2933:5:2933:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
3766+
| main.rs:2934:5:2934:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
3767+
| main.rs:2935:5:2935:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
3768+
| main.rs:2935:5:2935:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
3769+
| main.rs:2935:5:2935:20 | ...::f(...) | T | main.rs:2695:5:2697:5 | dyn MyTrait |
3770+
| main.rs:2935:5:2935:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
3771+
| main.rs:2935:16:2935:19 | true | | {EXTERNAL LOCATION} | bool |
3772+
| main.rs:2936:5:2936:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
37723773
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
37733774
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
37743775
| pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () |
@@ -11891,48 +11892,53 @@ inferType
1189111892
| main.rs:2882:17:2882:17 | x | | {EXTERNAL LOCATION} | i32 |
1189211893
| main.rs:2882:17:2882:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 |
1189311894
| main.rs:2882:23:2882:23 | y | | {EXTERNAL LOCATION} | usize |
11894-
| main.rs:2892:11:2927:1 | { ... } | | {EXTERNAL LOCATION} | () |
11895-
| main.rs:2893:5:2893:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11896-
| main.rs:2894:5:2894:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
11897-
| main.rs:2895:5:2895:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
11898-
| main.rs:2895:20:2895:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
11899-
| main.rs:2895:41:2895:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
11900-
| main.rs:2896:5:2896:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11901-
| main.rs:2897:5:2897:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11902-
| main.rs:2898:5:2898:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
11903-
| main.rs:2899:5:2899:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11904-
| main.rs:2900:5:2900:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11905-
| main.rs:2901:5:2901:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11906-
| main.rs:2902:5:2902:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11907-
| main.rs:2903:5:2903:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11908-
| main.rs:2904:5:2904:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11909-
| main.rs:2905:5:2905:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11910-
| main.rs:2906:5:2906:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11911-
| main.rs:2907:5:2907:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11912-
| main.rs:2908:5:2908:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11913-
| main.rs:2909:5:2909:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11914-
| main.rs:2910:5:2910:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11915-
| main.rs:2911:5:2911:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
11916-
| main.rs:2911:5:2911:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
11917-
| main.rs:2912:5:2912:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11918-
| main.rs:2913:5:2913:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11919-
| main.rs:2914:5:2914:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11920-
| main.rs:2915:5:2915:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11921-
| main.rs:2916:5:2916:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11922-
| main.rs:2917:5:2917:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11923-
| main.rs:2918:5:2918:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11895+
| main.rs:2890:17:2893:5 | { ... } | | main.rs:2887:5:2888:13 | S |
11896+
| main.rs:2891:13:2891:13 | x | | main.rs:2887:5:2888:13 | S |
11897+
| main.rs:2891:17:2891:34 | ...::default(...) | | main.rs:2887:5:2888:13 | S |
11898+
| main.rs:2892:9:2892:21 | ...::from(...) | | main.rs:2887:5:2888:13 | S |
11899+
| main.rs:2892:20:2892:20 | x | | main.rs:2887:5:2888:13 | S |
11900+
| main.rs:2902:11:2937:1 | { ... } | | {EXTERNAL LOCATION} | () |
11901+
| main.rs:2903:5:2903:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11902+
| main.rs:2904:5:2904:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
11903+
| main.rs:2905:5:2905:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
11904+
| main.rs:2905:20:2905:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
11905+
| main.rs:2905:41:2905:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
11906+
| main.rs:2906:5:2906:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11907+
| main.rs:2907:5:2907:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11908+
| main.rs:2908:5:2908:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
11909+
| main.rs:2909:5:2909:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11910+
| main.rs:2910:5:2910:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11911+
| main.rs:2911:5:2911:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11912+
| main.rs:2912:5:2912:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11913+
| main.rs:2913:5:2913:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11914+
| main.rs:2914:5:2914:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11915+
| main.rs:2915:5:2915:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11916+
| main.rs:2916:5:2916:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11917+
| main.rs:2917:5:2917:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11918+
| main.rs:2918:5:2918:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
1192411919
| main.rs:2919:5:2919:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11925-
| main.rs:2920:5:2920:28 | ...::test(...) | | {EXTERNAL LOCATION} | () |
11926-
| main.rs:2921:5:2921:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
11927-
| main.rs:2922:5:2922:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
11928-
| main.rs:2923:5:2923:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
11929-
| main.rs:2924:5:2924:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
11930-
| main.rs:2925:5:2925:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
11931-
| main.rs:2925:5:2925:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
11932-
| main.rs:2925:5:2925:20 | ...::f(...) | T | main.rs:2695:5:2697:5 | dyn MyTrait |
11933-
| main.rs:2925:5:2925:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
11934-
| main.rs:2925:16:2925:19 | true | | {EXTERNAL LOCATION} | bool |
11935-
| main.rs:2926:5:2926:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11920+
| main.rs:2920:5:2920:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11921+
| main.rs:2921:5:2921:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
11922+
| main.rs:2921:5:2921:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
11923+
| main.rs:2922:5:2922:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11924+
| main.rs:2923:5:2923:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11925+
| main.rs:2924:5:2924:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11926+
| main.rs:2925:5:2925:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11927+
| main.rs:2926:5:2926:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11928+
| main.rs:2927:5:2927:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11929+
| main.rs:2928:5:2928:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11930+
| main.rs:2929:5:2929:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
11931+
| main.rs:2930:5:2930:28 | ...::test(...) | | {EXTERNAL LOCATION} | () |
11932+
| main.rs:2931:5:2931:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
11933+
| main.rs:2932:5:2932:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
11934+
| main.rs:2933:5:2933:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
11935+
| main.rs:2934:5:2934:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
11936+
| main.rs:2935:5:2935:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
11937+
| main.rs:2935:5:2935:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
11938+
| main.rs:2935:5:2935:20 | ...::f(...) | T | main.rs:2695:5:2697:5 | dyn MyTrait |
11939+
| main.rs:2935:5:2935:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
11940+
| main.rs:2935:16:2935:19 | true | | {EXTERNAL LOCATION} | bool |
11941+
| main.rs:2936:5:2936:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
1193611942
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
1193711943
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
1193811944
| pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option |

0 commit comments

Comments
 (0)