mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-22 02:00:00 +03:00
Future proof #[no_link].
This commit is contained in:
@@ -52,6 +52,7 @@ fn load_crate(&mut self,
|
||||
// Parse the attributes relating to macros.
|
||||
let mut import = ImportSelection::Some(FnvHashMap());
|
||||
let mut reexport = FnvHashMap();
|
||||
let mut no_link = false;
|
||||
|
||||
for attr in &extern_crate.attrs {
|
||||
let mut used = true;
|
||||
@@ -87,6 +88,7 @@ fn load_crate(&mut self,
|
||||
}
|
||||
}
|
||||
}
|
||||
"no_link" => no_link = true,
|
||||
_ => used = false,
|
||||
}
|
||||
if used {
|
||||
@@ -94,17 +96,22 @@ fn load_crate(&mut self,
|
||||
}
|
||||
}
|
||||
|
||||
self.load_macros(extern_crate, allows_macros, import, reexport)
|
||||
self.load_macros(extern_crate, allows_macros, import, reexport, no_link)
|
||||
}
|
||||
|
||||
fn load_macros<'b>(&mut self,
|
||||
vi: &ast::Item,
|
||||
allows_macros: bool,
|
||||
import: ImportSelection,
|
||||
reexport: MacroSelection)
|
||||
reexport: MacroSelection,
|
||||
no_link: bool)
|
||||
-> Vec<LoadedMacro> {
|
||||
if let ImportSelection::Some(ref sel) = import {
|
||||
if sel.is_empty() && reexport.is_empty() {
|
||||
// Make sure we can read macros from `#[no_link]` crates.
|
||||
if no_link {
|
||||
self.creader.read_macros(vi);
|
||||
}
|
||||
return Vec::new();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -250,7 +250,7 @@ fn build_reduced_graph_for_item(&mut self, item: &Item, expansion: Mark) {
|
||||
self.define(parent, name, TypeNS, (module, sp, vis));
|
||||
|
||||
self.populate_module_if_necessary(module);
|
||||
} else if custom_derive_crate {
|
||||
} else {
|
||||
// Define an empty module
|
||||
let def = Def::Mod(self.definitions.local_def_id(item.id));
|
||||
let module = ModuleS::new(Some(parent), ModuleKind::Def(def, name));
|
||||
|
||||
@@ -14,6 +14,5 @@
|
||||
extern crate macro_crate_test;
|
||||
|
||||
fn main() {
|
||||
macro_crate_test::foo();
|
||||
//~^ ERROR failed to resolve. Use of undeclared type or module `macro_crate_test`
|
||||
macro_crate_test::foo(); //~ ERROR unresolved name
|
||||
}
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#[macro_use] #[no_link]
|
||||
#[no_link]
|
||||
extern crate doesnt_exist; //~ ERROR can't find crate
|
||||
|
||||
fn main() {}
|
||||
@@ -13,6 +13,6 @@
|
||||
|
||||
fn main() {
|
||||
unsafe {
|
||||
libc::abs(0); //~ ERROR Use of undeclared type or module `libc`
|
||||
libc::abs(0); //~ ERROR unresolved name
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user