@@ -19,6 +19,7 @@ extern crate stable_mir;
19
19
20
20
use std:: assert_matches:: assert_matches;
21
21
use mir:: { mono:: Instance , TerminatorKind :: * } ;
22
+ use stable_mir:: mir:: mono:: InstanceKind ;
22
23
use rustc_smir:: rustc_internal;
23
24
use stable_mir:: ty:: { RigidTy , TyKind , Ty , UintTy } ;
24
25
use stable_mir:: * ;
@@ -35,9 +36,10 @@ fn test_stable_mir() -> ControlFlow<()> {
35
36
assert_eq ! ( main_fn. trimmed_name( ) , "main" ) ;
36
37
37
38
let instances = get_instances ( main_fn. body ( ) . unwrap ( ) ) ;
38
- assert_eq ! ( instances. len( ) , 2 ) ;
39
+ assert_eq ! ( instances. len( ) , 3 ) ;
39
40
test_fn ( instances[ 0 ] , "from_u32" , "std::char::from_u32" , "core" ) ;
40
41
test_fn ( instances[ 1 ] , "Vec::<u8>::new" , "std::vec::Vec::<u8>::new" , "alloc" ) ;
42
+ test_fn ( instances[ 2 ] , "ctpop::<u8>" , "std::intrinsics::ctpop::<u8>" , "core" ) ;
41
43
test_vec_new ( instances[ 1 ] ) ;
42
44
ControlFlow :: Continue ( ( ) )
43
45
}
@@ -48,6 +50,14 @@ fn test_fn(instance: Instance, expected_trimmed: &str, expected_qualified: &str,
48
50
assert_eq ! ( & trimmed, expected_trimmed) ;
49
51
assert_eq ! ( & qualified, expected_qualified) ;
50
52
53
+ if instance. kind == InstanceKind :: Intrinsic {
54
+ let intrinsic = instance. intrinsic_name ( ) . unwrap ( ) ;
55
+ let ( trimmed_base, _trimmed_args) = trimmed. split_once ( "::" ) . unwrap ( ) ;
56
+ assert_eq ! ( intrinsic, trimmed_base) ;
57
+ return ;
58
+ }
59
+ assert ! ( instance. intrinsic_name( ) . is_none( ) ) ;
60
+
51
61
let item = CrateItem :: try_from ( instance) . unwrap ( ) ;
52
62
let trimmed = item. trimmed_name ( ) ;
53
63
let qualified = item. name ( ) ;
@@ -119,10 +129,12 @@ fn generate_input(path: &str) -> std::io::Result<()> {
119
129
write ! (
120
130
file,
121
131
r#"
132
+ #![feature(core_intrinsics)]
122
133
123
134
fn main() {{
124
135
let _c = core::char::from_u32(99);
125
136
let _v = Vec::<u8>::new();
137
+ let _i = std::intrinsics::ctpop::<u8>(0);
126
138
}}
127
139
"#
128
140
) ?;
0 commit comments