Don't delay a bug on malformed meta items involving interpolated tokens
Co-authored-by: Jana Dönszelmann <jana@donsz.nl>
This commit is contained in:
parent
287610b489
commit
fd5b1583fe
3 changed files with 30 additions and 9 deletions
|
|
@ -13,7 +13,7 @@ use rustc_ast_pretty::pprust;
|
|||
use rustc_errors::DiagCtxtHandle;
|
||||
use rustc_hir::{self as hir, AttrPath};
|
||||
use rustc_span::symbol::{Ident, kw, sym};
|
||||
use rustc_span::{ErrorGuaranteed, Span, Symbol};
|
||||
use rustc_span::{Span, Symbol};
|
||||
|
||||
pub struct SegmentIterator<'a> {
|
||||
offset: usize,
|
||||
|
|
@ -176,7 +176,7 @@ impl<'a> ArgParser<'a> {
|
|||
pub enum MetaItemOrLitParser<'a> {
|
||||
MetaItemParser(MetaItemParser<'a>),
|
||||
Lit(MetaItemLit),
|
||||
Err(Span, ErrorGuaranteed),
|
||||
Err(Span),
|
||||
}
|
||||
|
||||
impl<'a> MetaItemOrLitParser<'a> {
|
||||
|
|
@ -186,7 +186,7 @@ impl<'a> MetaItemOrLitParser<'a> {
|
|||
generic_meta_item_parser.span()
|
||||
}
|
||||
MetaItemOrLitParser::Lit(meta_item_lit) => meta_item_lit.span,
|
||||
MetaItemOrLitParser::Err(span, _) => *span,
|
||||
MetaItemOrLitParser::Err(span) => *span,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -495,12 +495,9 @@ impl<'a> MetaItemListParserContext<'a> {
|
|||
// where the macro didn't expand to a literal. An error is already given
|
||||
// for this at this point, and then we do continue. This makes this path
|
||||
// reachable...
|
||||
let e = self.dcx.span_delayed_bug(
|
||||
*span,
|
||||
"expr in place where literal is expected (builtin attr parsing)",
|
||||
);
|
||||
|
||||
return Some(MetaItemOrLitParser::Err(*span, e));
|
||||
// NOTE: For backward compatibility we can't emit any error / delayed bug here (yet).
|
||||
// See <https://github.com/rust-lang/rust/issues/140612>
|
||||
return Some(MetaItemOrLitParser::Err(*span));
|
||||
} else {
|
||||
self.next_path()?
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
extern crate proc_macro;
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
|
||||
#[proc_macro_derive(Derive, attributes(arg))]
|
||||
pub fn derive(_: TokenStream) -> TokenStream {
|
||||
TokenStream::new()
|
||||
}
|
||||
16
tests/ui/attributes/proc_macro_in_macro.rs
Normal file
16
tests/ui/attributes/proc_macro_in_macro.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
// Regression test for <https://github.com/rust-lang/rust/issues/137687#issuecomment-2816312274>.
|
||||
//@ proc-macro: derive_macro_with_helper.rs
|
||||
//@ edition: 2018
|
||||
//@ check-pass
|
||||
|
||||
macro_rules! call_macro {
|
||||
($text:expr) => {
|
||||
#[derive(derive_macro_with_helper::Derive)]
|
||||
#[arg($text)]
|
||||
pub struct Foo;
|
||||
};
|
||||
}
|
||||
|
||||
call_macro!(1 + 1);
|
||||
|
||||
fn main() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue