diff options
| author | bors <bors@rust-lang.org> | 2025-08-06 23:23:26 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-08-06 23:23:26 +0000 |
| commit | 6bcdcc73bd11568fd85f5a38b58e1eda054ad1cd (patch) | |
| tree | 7404b3b99695ca9e1343e7ae067f38a3aae59a2a /compiler/rustc_parse/src/parser/ty.rs | |
| parent | 7d82b83ed57d188ab3f2441a765a6419685a88a3 (diff) | |
| parent | d369a1fe5e7fbf17cc3ed74057928b875fe40ce7 (diff) | |
| download | rust-6bcdcc73bd11568fd85f5a38b58e1eda054ad1cd.tar.gz rust-6bcdcc73bd11568fd85f5a38b58e1eda054ad1cd.zip | |
Auto merge of #145020 - GuillaumeGomez:rollup-5prs9kw, r=GuillaumeGomez
Rollup of 15 pull requests Successful merges: - rust-lang/rust#144195 (Parser: Recover from attributes applied to types and generic args) - rust-lang/rust#144794 (Port `#[coroutine]` to the new attribute system) - rust-lang/rust#144835 (Anonymize binders in tail call sig) - rust-lang/rust#144861 (Stabilize `panic_payload_as_str` feature) - rust-lang/rust#144917 (Enforce tail call type is related to body return type in borrowck) - rust-lang/rust#144948 (we only merge candidates for trait and normalizes-to goals) - rust-lang/rust#144956 (Gate const trait syntax) - rust-lang/rust#144970 (rustdoc: fix caching of intra-doc links on reexports) - rust-lang/rust#144972 (add code example showing that file_prefix treats dotfiles as the name of a file, not an extension) - rust-lang/rust#144975 (`File::set_times`: Update documentation and example to support setting timestamps on directories) - rust-lang/rust#144977 (Fortify generic param default checks) - rust-lang/rust#144996 (simplifycfg: Mark as changed when start is modified in collapse goto chain) - rust-lang/rust#144998 (mir: Do not modify NonUse in `super_projection_elem`) - rust-lang/rust#145000 (Remove unneeded `stage` parameter when setting up stdlib Cargo) - rust-lang/rust#145008 (Fix rustdoc scrape examples crash) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_parse/src/parser/ty.rs')
| -rw-r--r-- | compiler/rustc_parse/src/parser/ty.rs | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/compiler/rustc_parse/src/parser/ty.rs b/compiler/rustc_parse/src/parser/ty.rs index 740dd10ea8b..59048e42e6f 100644 --- a/compiler/rustc_parse/src/parser/ty.rs +++ b/compiler/rustc_parse/src/parser/ty.rs @@ -14,10 +14,10 @@ use thin_vec::{ThinVec, thin_vec}; use super::{Parser, PathStyle, SeqSep, TokenType, Trailing}; use crate::errors::{ - self, DynAfterMut, ExpectedFnPathFoundFnKeyword, ExpectedMutOrConstInRawPointerType, - FnPtrWithGenerics, FnPtrWithGenericsSugg, HelpUseLatestEdition, InvalidDynKeyword, - LifetimeAfterMut, NeedPlusAfterTraitObjectLifetime, NestedCVariadicType, - ReturnTypesUseThinArrow, + self, AttributeOnEmptyType, AttributeOnType, DynAfterMut, ExpectedFnPathFoundFnKeyword, + ExpectedMutOrConstInRawPointerType, FnPtrWithGenerics, FnPtrWithGenericsSugg, + HelpUseLatestEdition, InvalidDynKeyword, LifetimeAfterMut, NeedPlusAfterTraitObjectLifetime, + NestedCVariadicType, ReturnTypesUseThinArrow, }; use crate::parser::item::FrontMatterParsingMode; use crate::{exp, maybe_recover_from_interpolated_ty_qpath}; @@ -253,7 +253,27 @@ impl<'a> Parser<'a> { ) -> PResult<'a, P<Ty>> { let allow_qpath_recovery = recover_qpath == RecoverQPath::Yes; maybe_recover_from_interpolated_ty_qpath!(self, allow_qpath_recovery); + if self.token == token::Pound && self.look_ahead(1, |t| *t == token::OpenBracket) { + let attrs_wrapper = self.parse_outer_attributes()?; + let raw_attrs = attrs_wrapper.take_for_recovery(self.psess); + let attr_span = raw_attrs[0].span.to(raw_attrs.last().unwrap().span); + let (full_span, guar) = match self.parse_ty() { + Ok(ty) => { + let full_span = attr_span.until(ty.span); + let guar = self + .dcx() + .emit_err(AttributeOnType { span: attr_span, fix_span: full_span }); + (attr_span, guar) + } + Err(err) => { + err.cancel(); + let guar = self.dcx().emit_err(AttributeOnEmptyType { span: attr_span }); + (attr_span, guar) + } + }; + return Ok(self.mk_ty(full_span, TyKind::Err(guar))); + } if let Some(ty) = self.eat_metavar_seq_with_matcher( |mv_kind| matches!(mv_kind, MetaVarKind::Ty { .. }), |this| this.parse_ty_no_question_mark_recover(), |
