diff options
| author | Matthew Jasper <mjjasper1@gmail.com> | 2023-09-08 10:14:36 +0000 |
|---|---|---|
| committer | Matthew Jasper <mjjasper1@gmail.com> | 2023-09-11 15:51:18 +0000 |
| commit | 333388fd3c9fa03362a3c2a2675ab521c4ddb1ff (patch) | |
| tree | 42e8442e95b8a575b04dc9caf0ec7befddec943e /compiler/rustc_parse/src/errors.rs | |
| parent | 7b61f7f0020f12430dd72c77605279a696e539bf (diff) | |
| download | rust-333388fd3c9fa03362a3c2a2675ab521c4ddb1ff.tar.gz rust-333388fd3c9fa03362a3c2a2675ab521c4ddb1ff.zip | |
Move let expression checking to parsing
There was an incomplete version of the check in parsing and a second version in AST validation. This meant that some, but not all, invalid uses were allowed inside macros/disabled cfgs. It also means that later passes have a hard time knowing when the let expression is in a valid location, sometimes causing ICEs. - Add a field to ExprKind::Let in AST/HIR to mark whether it's in a valid location. - Suppress later errors and MIR construction for invalid let expressions.
Diffstat (limited to 'compiler/rustc_parse/src/errors.rs')
| -rw-r--r-- | compiler/rustc_parse/src/errors.rs | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/compiler/rustc_parse/src/errors.rs b/compiler/rustc_parse/src/errors.rs index e0b1e3678e4..10b659d811a 100644 --- a/compiler/rustc_parse/src/errors.rs +++ b/compiler/rustc_parse/src/errors.rs @@ -10,7 +10,7 @@ use rustc_span::symbol::Ident; use rustc_span::{Span, Symbol}; use crate::fluent_generated as fluent; -use crate::parser::TokenDescription; +use crate::parser::{ForbiddenLetReason, TokenDescription}; #[derive(Diagnostic)] #[diag(parse_maybe_report_ambiguous_plus)] @@ -395,6 +395,8 @@ pub(crate) struct IfExpressionMissingCondition { pub(crate) struct ExpectedExpressionFoundLet { #[primary_span] pub span: Span, + #[subdiagnostic] + pub reason: ForbiddenLetReason, } #[derive(Diagnostic)] |
