Skip to content

Commit e735f60

Browse files
committed
Add test for ref suggestions in macros.
1 parent 80828f2 commit e735f60

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// force-host
2+
// no-prefer-dynamic
3+
#![crate_type = "proc-macro"]
4+
#![feature(proc_macro_quote)]
5+
6+
extern crate proc_macro;
7+
8+
use proc_macro::{quote, TokenStream};
9+
10+
#[proc_macro_attribute]
11+
pub fn hello(_: TokenStream, _: TokenStream) -> TokenStream {
12+
quote!(
13+
fn f(_: &mut i32) {}
14+
fn g() {
15+
f(123);
16+
}
17+
)
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// run-check
2+
// aux-build:proc-macro-type-error.rs
3+
4+
extern crate proc_macro_type_error;
5+
6+
use proc_macro_type_error::hello;
7+
8+
#[hello] //~ERROR mismatched types
9+
fn abc() {}
10+
11+
fn x(_: &mut i32) {}
12+
13+
macro_rules! bla {
14+
() => {
15+
x(123);
16+
//~^ ERROR mismatched types
17+
//~| SUGGESTION &mut 123
18+
};
19+
($v:expr) => {
20+
x($v)
21+
}
22+
}
23+
24+
fn main() {
25+
bla!();
26+
bla!(456);
27+
//~^ ERROR mismatched types
28+
//~| SUGGESTION &mut 456
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
error[E0308]: mismatched types
2+
--> $DIR/suggest-ref-macro.rs:8:1
3+
|
4+
LL | #[hello]
5+
| ^^^^^^^^ expected `&mut i32`, found integer
6+
|
7+
= note: this error originates in the attribute macro `hello` (in Nightly builds, run with -Z macro-backtrace for more info)
8+
9+
error[E0308]: mismatched types
10+
--> $DIR/suggest-ref-macro.rs:15:11
11+
|
12+
LL | x(123);
13+
| ^^^
14+
| |
15+
| expected `&mut i32`, found integer
16+
| help: consider mutably borrowing here: `&mut 123`
17+
...
18+
LL | bla!();
19+
| ------- in this macro invocation
20+
|
21+
= note: this error originates in the macro `bla` (in Nightly builds, run with -Z macro-backtrace for more info)
22+
23+
error[E0308]: mismatched types
24+
--> $DIR/suggest-ref-macro.rs:26:10
25+
|
26+
LL | bla!(456);
27+
| ^^^
28+
| |
29+
| expected `&mut i32`, found integer
30+
| help: consider mutably borrowing here: `&mut 456`
31+
32+
error: aborting due to 3 previous errors
33+
34+
For more information about this error, try `rustc --explain E0308`.

0 commit comments

Comments
 (0)