@@ -1,38 +0,0 @@
|
||||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![allow(non_snake_case)]
|
||||
|
||||
register_long_diagnostics! {
|
||||
|
||||
E0558: r##"
|
||||
The `export_name` attribute was malformed.
|
||||
|
||||
Erroneous code example:
|
||||
|
||||
```ignore (error-emitted-at-codegen-which-cannot-be-handled-by-compile_fail)
|
||||
#[export_name] // error: export_name attribute has invalid format
|
||||
pub fn something() {}
|
||||
|
||||
fn main() {}
|
||||
```
|
||||
|
||||
The `export_name` attribute expects a string in order to determine the name of
|
||||
the exported symbol. Example:
|
||||
|
||||
```
|
||||
#[export_name = "some_function"] // ok!
|
||||
pub fn something() {}
|
||||
|
||||
fn main() {}
|
||||
```
|
||||
"##,
|
||||
|
||||
}
|
||||
@@ -37,7 +37,6 @@ extern crate rustc;
|
||||
extern crate rustc_back;
|
||||
extern crate rustc_mir;
|
||||
extern crate rustc_incremental;
|
||||
#[macro_use]
|
||||
extern crate syntax;
|
||||
extern crate syntax_pos;
|
||||
extern crate rustc_data_structures;
|
||||
@@ -46,7 +45,6 @@ pub extern crate rustc as __rustc;
|
||||
|
||||
use rustc::ty::TyCtxt;
|
||||
|
||||
pub mod diagnostics;
|
||||
pub mod link;
|
||||
pub mod trans_crate;
|
||||
pub mod symbol_names;
|
||||
|
||||
@@ -120,27 +120,9 @@ pub fn provide(providers: &mut Providers) {
|
||||
def_symbol_name,
|
||||
symbol_name,
|
||||
|
||||
export_name: |tcx, id| {
|
||||
tcx.get_attrs(id).iter().fold(None, |ia, attr| {
|
||||
if attr.check_name("export_name") {
|
||||
if let s @ Some(_) = attr.value_str() {
|
||||
s
|
||||
} else {
|
||||
struct_span_err!(tcx.sess, attr.span, E0558,
|
||||
"export_name attribute has invalid format")
|
||||
.span_label(attr.span, "did you mean #[export_name=\"*\"]?")
|
||||
.emit();
|
||||
None
|
||||
}
|
||||
} else {
|
||||
ia
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
contains_extern_indicator: |tcx, id| {
|
||||
attr::contains_name(&tcx.get_attrs(id), "no_mangle") ||
|
||||
tcx.export_name(id).is_some()
|
||||
tcx.trans_fn_attrs(id).export_name.is_some()
|
||||
},
|
||||
|
||||
..*providers
|
||||
@@ -287,7 +269,7 @@ fn compute_symbol_name<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, instance: Instance
|
||||
return tcx.item_name(def_id).to_string();
|
||||
}
|
||||
|
||||
if let Some(name) = tcx.export_name(def_id) {
|
||||
if let Some(name) = tcx.trans_fn_attrs(def_id).export_name {
|
||||
// Use provided name
|
||||
return name.to_string();
|
||||
}
|
||||
|
||||
@@ -233,7 +233,6 @@ impl TransCrate for MetadataOnlyTransCrate {
|
||||
MonoItem::Fn(inst) => {
|
||||
let def_id = inst.def_id();
|
||||
if def_id.is_local() {
|
||||
let _ = tcx.export_name(def_id);
|
||||
let _ = tcx.contains_extern_indicator(def_id);
|
||||
let _ = inst.def.is_inline(tcx);
|
||||
let _ = tcx.trans_fn_attrs(def_id);
|
||||
|
||||
Reference in New Issue
Block a user