File tree 3 files changed +51
-3
lines changed
3 files changed +51
-3
lines changed Original file line number Diff line number Diff line change @@ -73,21 +73,25 @@ struct IntrinsicCheckingVisitor<'a> {
73
73
74
74
impl < ' a > IntrinsicCheckingVisitor < ' a > {
75
75
fn def_id_is_transmute ( & self , def_id : DefId ) -> bool {
76
+ let intrinsic = match ty:: get ( ty:: lookup_item_type ( self . tcx , def_id) . ty ) . sty {
77
+ ty:: ty_bare_fn( ref bfty) => bfty. abi == RustIntrinsic ,
78
+ _ => return false
79
+ } ;
76
80
if def_id. krate == ast:: LOCAL_CRATE {
77
81
match self . tcx . map . get ( def_id. node ) {
78
- NodeForeignItem ( ref item) => {
82
+ NodeForeignItem ( ref item) if intrinsic => {
79
83
token:: get_ident ( item. ident ) ==
80
84
token:: intern_and_get_ident ( "transmute" )
81
85
}
82
86
_ => false ,
83
87
}
84
88
} else {
85
89
match csearch:: get_item_path ( self . tcx , def_id) . last ( ) {
86
- None => false ,
87
- Some ( ref last) => {
90
+ Some ( ref last) if intrinsic => {
88
91
token:: get_name ( last. name ( ) ) ==
89
92
token:: intern_and_get_ident ( "transmute" )
90
93
}
94
+ _ => false ,
91
95
}
92
96
}
93
97
}
Original file line number Diff line number Diff line change
1
+ // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2
+ // file at the top-level directory of this distribution and at
3
+ // http://rust-lang.org/COPYRIGHT.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6
+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8
+ // option. This file may not be copied, modified, or distributed
9
+ // except according to those terms.
10
+
11
+ #![ crate_type = "lib" ]
12
+
13
+ extern {
14
+ pub fn transmute ( ) ;
15
+ }
Original file line number Diff line number Diff line change
1
+ // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2
+ // file at the top-level directory of this distribution and at
3
+ // http://rust-lang.org/COPYRIGHT.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6
+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8
+ // option. This file may not be copied, modified, or distributed
9
+ // except according to those terms.
10
+
11
+ // aux-build:issue-15562.rs
12
+
13
+ extern crate i = "issue-15562" ;
14
+
15
+ pub fn main ( ) {
16
+ extern {
17
+ fn transmute ( ) ;
18
+ }
19
+ unsafe {
20
+ transmute ( ) ;
21
+ i:: transmute ( ) ;
22
+ }
23
+ }
24
+
25
+ // We declare this so we don't run into unresolved symbol errors
26
+ // The above extern is NOT `extern "rust-intrinsic"` and thus
27
+ // means it'll try to find a corresponding symbol to link to.
28
+ #[ no_mangle]
29
+ pub extern fn transmute ( ) { }
You can’t perform that action at this time.
0 commit comments