From 54f860158bcb37e4382ca546437d769619ee67ba Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Fri, 10 Jan 2020 06:52:22 +0900 Subject: [PATCH 1/2] Fix ICE #68058 --- src/librustc_ast_lowering/expr.rs | 7 ++++++- src/test/ui/macros/issue-68058.rs | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/test/ui/macros/issue-68058.rs diff --git a/src/librustc_ast_lowering/expr.rs b/src/librustc_ast_lowering/expr.rs index ee020c7e589..9a229e709a5 100644 --- a/src/librustc_ast_lowering/expr.rs +++ b/src/librustc_ast_lowering/expr.rs @@ -202,7 +202,12 @@ impl<'hir> LoweringContext<'_, 'hir> { ExprKind::Mac(_) => panic!("Shouldn't exist here"), }; - hir::Expr { hir_id: self.lower_node_id(e.id), kind, span: e.span, attrs: e.attrs.clone() } + hir::Expr { + hir_id: self.lower_node_id(e.id), + kind, + span: e.span, + attrs: e.attrs.iter().map(|a| self.lower_attr(a)).collect::>().into(), + } } fn lower_unop(&mut self, u: UnOp) -> hir::UnOp { diff --git a/src/test/ui/macros/issue-68058.rs b/src/test/ui/macros/issue-68058.rs new file mode 100644 index 00000000000..7679f8eaa79 --- /dev/null +++ b/src/test/ui/macros/issue-68058.rs @@ -0,0 +1,15 @@ +// check-pass + +macro_rules! def_target { + ($target: expr) => { + #[target_feature(enable=$target)] + unsafe fn f() { + #[target_feature(enable=$target)] + () + } + }; +} + +def_target!("avx2"); + +fn main() {} From 48cad460bc664d110c013b02a21ede7612f1a8e6 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sat, 11 Jan 2020 10:15:54 +0900 Subject: [PATCH 2/2] Fix test not to depend on environment --- src/test/ui/macros/issue-68058.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/test/ui/macros/issue-68058.rs b/src/test/ui/macros/issue-68058.rs index 7679f8eaa79..24da2620c2e 100644 --- a/src/test/ui/macros/issue-68058.rs +++ b/src/test/ui/macros/issue-68058.rs @@ -1,15 +1,14 @@ // check-pass -macro_rules! def_target { - ($target: expr) => { - #[target_feature(enable=$target)] - unsafe fn f() { - #[target_feature(enable=$target)] +macro_rules! foo { + ($doc: expr) => { + fn f() { + #[doc = $doc] () } }; } -def_target!("avx2"); +foo!("doc"); fn main() {}