diff --git a/compiler/rustc_parse/src/lib.rs b/compiler/rustc_parse/src/lib.rs index cd08fc3dc60a1..539c15f18a9a4 100644 --- a/compiler/rustc_parse/src/lib.rs +++ b/compiler/rustc_parse/src/lib.rs @@ -349,13 +349,13 @@ fn lex_token_trees_for_span( span: Span, ) -> Option> { let src = psess.source_map().span_to_snippet(span).ok()?; - let stream = unwrap_or_emit_fatal(lexer::lex_token_trees( - psess, - &src, - span.lo(), - None, - StripTokens::Nothing, - )); + let stream = match lexer::lex_token_trees(psess, &src, span.lo(), None, StripTokens::Nothing) { + Ok(stream) => stream, + Err(errs) => { + errs.into_iter().for_each(|err| err.cancel()); + return None; + } + }; Some((0..).map_while(move |index| stream.get(index).cloned())) } diff --git a/tests/ui/proc-macro/auxiliary/inner_attr_file_mod_cfg_attr_child.rs b/tests/ui/proc-macro/auxiliary/inner_attr_file_mod_cfg_attr_child.rs new file mode 100644 index 0000000000000..59114fb8e58af --- /dev/null +++ b/tests/ui/proc-macro/auxiliary/inner_attr_file_mod_cfg_attr_child.rs @@ -0,0 +1,8 @@ +#![cfg_attr(enabled, test_macros::identity_attr, allow(dead_code))] +#![cfg_attr(enabled, allow(unused_imports), test_macros::identity_attr)] +#![cfg_attr(enabled, test_macros::identity_attr)] +//! docs + +use std::fmt; + +fn unused() {} diff --git a/tests/ui/proc-macro/inner-attr-file-mod-cfg-attr.rs b/tests/ui/proc-macro/inner-attr-file-mod-cfg-attr.rs new file mode 100644 index 0000000000000..26b6a6f7041a0 --- /dev/null +++ b/tests/ui/proc-macro/inner-attr-file-mod-cfg-attr.rs @@ -0,0 +1,14 @@ +//@ check-pass +//@ proc-macro: test-macros.rs +//@ edition:2024 +//@ compile-flags: --cfg enabled --check-cfg=cfg(enabled) + +#![feature(custom_inner_attributes)] +#![deny(dead_code, unused_attributes, unused_imports)] + +extern crate test_macros; + +#[path = "auxiliary/inner_attr_file_mod_cfg_attr_child.rs"] +mod child; + +fn main() {}