about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume.gomez@huawei.com>2024-03-02 22:48:58 +0100
committerGuillaume Gomez <guillaume.gomez@huawei.com>2024-03-03 13:10:15 +0100
commitf04b7ee130b51bb6281a23788107b2df5aae283d (patch)
tree6c2682aa28a59058e992a2e53a36e5b86a18042d
parentbe31b6b6cdfd0d614a22214391b91070fe55d89e (diff)
downloadrust-f04b7ee130b51bb6281a23788107b2df5aae283d.tar.gz
rust-f04b7ee130b51bb6281a23788107b2df5aae283d.zip
Add and update tests to use `pattern_complexity`
-rw-r--r--tests/ui/pattern/complexity_limit.rs106
-rw-r--r--tests/ui/pattern/complexity_limit.stderr14
-rw-r--r--tests/ui/pattern/usefulness/issue-118437-exponential-time-on-diagonal-match.rs3
3 files changed, 123 insertions, 0 deletions
diff --git a/tests/ui/pattern/complexity_limit.rs b/tests/ui/pattern/complexity_limit.rs
new file mode 100644
index 00000000000..c9a3f99bccd
--- /dev/null
+++ b/tests/ui/pattern/complexity_limit.rs
@@ -0,0 +1,106 @@
+#![feature(rustc_attrs)]
+#![pattern_complexity = "10000"]
+
+#[derive(Default)]
+struct BaseCommand {
+    field01: bool,
+    field02: bool,
+    field03: bool,
+    field04: bool,
+    field05: bool,
+    field06: bool,
+    field07: bool,
+    field08: bool,
+    field09: bool,
+    field10: bool,
+    field11: bool,
+    field12: bool,
+    field13: bool,
+    field14: bool,
+    field15: bool,
+    field16: bool,
+    field17: bool,
+    field18: bool,
+    field19: bool,
+    field20: bool,
+    field21: bool,
+    field22: bool,
+    field23: bool,
+    field24: bool,
+    field25: bool,
+    field26: bool,
+    field27: bool,
+    field28: bool,
+    field29: bool,
+    field30: bool,
+}
+
+fn request_key(command: BaseCommand) {
+    match command { //~ ERROR: reached pattern complexity limit
+        BaseCommand { field01: true, .. } => {}
+        BaseCommand { field02: true, .. } => {}
+        BaseCommand { field03: true, .. } => {}
+        BaseCommand { field04: true, .. } => {}
+        BaseCommand { field05: true, .. } => {}
+        BaseCommand { field06: true, .. } => {}
+        BaseCommand { field07: true, .. } => {}
+        BaseCommand { field08: true, .. } => {}
+        BaseCommand { field09: true, .. } => {}
+        BaseCommand { field10: true, .. } => {}
+        BaseCommand { field11: true, .. } => {}
+        BaseCommand { field12: true, .. } => {}
+        BaseCommand { field13: true, .. } => {}
+        BaseCommand { field14: true, .. } => {}
+        BaseCommand { field15: true, .. } => {}
+        BaseCommand { field16: true, .. } => {}
+        BaseCommand { field17: true, .. } => {}
+        BaseCommand { field18: true, .. } => {}
+        BaseCommand { field19: true, .. } => {}
+        BaseCommand { field20: true, .. } => {}
+        BaseCommand { field21: true, .. } => {}
+        BaseCommand { field22: true, .. } => {}
+        BaseCommand { field23: true, .. } => {}
+        BaseCommand { field24: true, .. } => {}
+        BaseCommand { field25: true, .. } => {}
+        BaseCommand { field26: true, .. } => {}
+        BaseCommand { field27: true, .. } => {}
+        BaseCommand { field28: true, .. } => {}
+        BaseCommand { field29: true, .. } => {}
+        BaseCommand { field30: true, .. } => {}
+
+        BaseCommand { field01: false, .. } => {}
+        BaseCommand { field02: false, .. } => {}
+        BaseCommand { field03: false, .. } => {}
+        BaseCommand { field04: false, .. } => {}
+        BaseCommand { field05: false, .. } => {}
+        BaseCommand { field06: false, .. } => {}
+        BaseCommand { field07: false, .. } => {}
+        BaseCommand { field08: false, .. } => {}
+        BaseCommand { field09: false, .. } => {}
+        BaseCommand { field10: false, .. } => {}
+        BaseCommand { field11: false, .. } => {}
+        BaseCommand { field12: false, .. } => {}
+        BaseCommand { field13: false, .. } => {}
+        BaseCommand { field14: false, .. } => {}
+        BaseCommand { field15: false, .. } => {}
+        BaseCommand { field16: false, .. } => {}
+        BaseCommand { field17: false, .. } => {}
+        BaseCommand { field18: false, .. } => {}
+        BaseCommand { field19: false, .. } => {}
+        BaseCommand { field20: false, .. } => {}
+        BaseCommand { field21: false, .. } => {}
+        BaseCommand { field22: false, .. } => {}
+        BaseCommand { field23: false, .. } => {}
+        BaseCommand { field24: false, .. } => {}
+        BaseCommand { field25: false, .. } => {}
+        BaseCommand { field26: false, .. } => {}
+        BaseCommand { field27: false, .. } => {}
+        BaseCommand { field28: false, .. } => {}
+        BaseCommand { field29: false, .. } => {}
+        BaseCommand { field30: false, .. } => {}
+    }
+}
+
+fn main() {
+    request_key(BaseCommand::default());
+}
diff --git a/tests/ui/pattern/complexity_limit.stderr b/tests/ui/pattern/complexity_limit.stderr
new file mode 100644
index 00000000000..08d9d40fe46
--- /dev/null
+++ b/tests/ui/pattern/complexity_limit.stderr
@@ -0,0 +1,14 @@
+error: reached pattern complexity limit
+  --> $DIR/complexity_limit.rs:39:5
+   |
+LL | /     match command {
+LL | |         BaseCommand { field01: true, .. } => {}
+LL | |         BaseCommand { field02: true, .. } => {}
+LL | |         BaseCommand { field03: true, .. } => {}
+...  |
+LL | |         BaseCommand { field30: false, .. } => {}
+LL | |     }
+   | |_____^
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/pattern/usefulness/issue-118437-exponential-time-on-diagonal-match.rs b/tests/ui/pattern/usefulness/issue-118437-exponential-time-on-diagonal-match.rs
index 984feef5f47..783512d5cca 100644
--- a/tests/ui/pattern/usefulness/issue-118437-exponential-time-on-diagonal-match.rs
+++ b/tests/ui/pattern/usefulness/issue-118437-exponential-time-on-diagonal-match.rs
@@ -1,3 +1,6 @@
+#![feature(rustc_attrs)]
+#![pattern_complexity = "61"]
+
 //@ check-pass
 struct BaseCommand {
     field01: bool,