about summary refs log tree commit diff
path: root/compiler/rustc_pattern_analysis/src/rustc.rs
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume.gomez@huawei.com>2024-03-02 22:48:41 +0100
committerGuillaume Gomez <guillaume.gomez@huawei.com>2024-03-03 13:10:15 +0100
commitbe31b6b6cdfd0d614a22214391b91070fe55d89e (patch)
treeaeeb1ac48dee839dbcc97b581ae03fc0a60f20cb /compiler/rustc_pattern_analysis/src/rustc.rs
parent5257aee7dd163d21d32fa904578d4fb0f4c91b79 (diff)
downloadrust-be31b6b6cdfd0d614a22214391b91070fe55d89e.tar.gz
rust-be31b6b6cdfd0d614a22214391b91070fe55d89e.zip
Add new `pattern_complexity` attribute to add possibility to limit and check recursion in pattern matching
Diffstat (limited to 'compiler/rustc_pattern_analysis/src/rustc.rs')
-rw-r--r--compiler/rustc_pattern_analysis/src/rustc.rs5
1 files changed, 5 insertions, 0 deletions
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.