File tree Expand file tree Collapse file tree 3 files changed +51
-3
lines changed Expand file tree Collapse file tree 3 files changed +51
-3
lines changed Original file line number Diff line number Diff line change @@ -73,21 +73,25 @@ struct IntrinsicCheckingVisitor<'a> {
7373
7474impl < ' a > IntrinsicCheckingVisitor < ' a > {
7575 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+ } ;
7680 if def_id. krate == ast:: LOCAL_CRATE {
7781 match self . tcx . map . get ( def_id. node ) {
78- NodeForeignItem ( ref item) => {
82+ NodeForeignItem ( ref item) if intrinsic => {
7983 token:: get_ident ( item. ident ) ==
8084 token:: intern_and_get_ident ( "transmute" )
8185 }
8286 _ => false ,
8387 }
8488 } else {
8589 match csearch:: get_item_path ( self . tcx , def_id) . last ( ) {
86- None => false ,
87- Some ( ref last) => {
90+ Some ( ref last) if intrinsic => {
8891 token:: get_name ( last. name ( ) ) ==
8992 token:: intern_and_get_ident ( "transmute" )
9093 }
94+ _ => false ,
9195 }
9296 }
9397 }
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