Auto merge of #37247 - jseyfried:future_proof_no_link, r=nrc
macros: Future proof `#[no_link]` This PR future proofs `#[no_link]` for macro modularization (cc #35896). First, we resolve all `#[no_link] extern crate`s. `#[no_link]` crates without `#[macro_use]` or `#[macro_reexport]` are not resolved today, this is a [breaking-change]. For example, ```rust ``` Any breakage can be fixed by simply removing the `#[no_link] extern crate`. Second, `#[no_link] extern crate`s will define an empty module in type namespace to eventually allow importing the crate's macros with `use`. This is a [breaking-change], for example: ```rust mod syntax {} //< This becomes a duplicate error. ``` r? @nrc
This commit is contained in:
commit
da5b6467c3
5 changed files with 13 additions and 7 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 @@ extern crate libc;
|
|||
|
||||
fn main() {
|
||||
unsafe {
|
||||
libc::abs(0); //~ ERROR Use of undeclared type or module `libc`
|
||||
libc::abs(0); //~ ERROR unresolved name
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue