From be31b6b6cdfd0d614a22214391b91070fe55d89e Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 2 Mar 2024 22:48:41 +0100 Subject: Add new `pattern_complexity` attribute to add possibility to limit and check recursion in pattern matching --- compiler/rustc_pattern_analysis/src/rustc.rs | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'compiler/rustc_pattern_analysis/src/rustc.rs') diff --git a/compiler/rustc_pattern_analysis/src/rustc.rs b/compiler/rustc_pattern_analysis/src/rustc.rs index f8839b0b590..5f5bfa7154a 100644 --- a/compiler/rustc_pattern_analysis/src/rustc.rs +++ b/compiler/rustc_pattern_analysis/src/rustc.rs @@ -895,6 +895,11 @@ impl<'p, 'tcx: 'p> TypeCx for RustcMatchCheckCtxt<'p, 'tcx> { errors::OverlappingRangeEndpoints { overlap: overlaps, range: pat_span }, ); } + + fn complexity_exceeded(&self) -> Result<(), Self::Error> { + let span = self.whole_match_span.unwrap_or(self.scrut_span); + Err(self.tcx.dcx().span_err(span, "reached pattern complexity limit")) + } } /// Recursively expand this pattern into its subpatterns. Only useful for or-patterns. -- cgit 1.4.1-3-g733a5