Skip to content

Commit c73ab0c

Browse files
committed
auto merge of #16751 : luqmana/rust/tr, r=alexcrichton
Fixes #15562.
2 parents d860a66 + 395ef8b commit c73ab0c

File tree

3 files changed

+51
-3
lines changed

3 files changed

+51
-3
lines changed

src/librustc/middle/intrinsicck.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -73,21 +73,25 @@ struct IntrinsicCheckingVisitor<'a> {
7373

7474
impl<'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
}

src/test/auxiliary/issue-15562.rs

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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+
}

src/test/run-pass/issue-15562.rs

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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() {}

0 commit comments

Comments
 (0)