summaryrefslogtreecommitdiffstats
path: root/tests/ui/mir/validate/critical-edge.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/mir/validate/critical-edge.rs')
-rw-r--r--tests/ui/mir/validate/critical-edge.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/ui/mir/validate/critical-edge.rs b/tests/ui/mir/validate/critical-edge.rs
new file mode 100644
index 000000000..9ef655cd1
--- /dev/null
+++ b/tests/ui/mir/validate/critical-edge.rs
@@ -0,0 +1,31 @@
+// Optimized MIR shouldn't have critical call edges
+//
+// build-fail
+// edition: 2021
+// compile-flags: --crate-type=lib
+// failure-status: 101
+// dont-check-compiler-stderr
+// error-pattern: encountered critical edge in `Call` terminator
+#![feature(custom_mir, core_intrinsics)]
+use core::intrinsics::mir::*;
+
+#[custom_mir(dialect = "runtime", phase = "optimized")]
+#[inline(always)]
+pub fn f(a: u32) -> u32 {
+ mir!(
+ {
+ match a {
+ 0 => bb1,
+ _ => bb2,
+ }
+ }
+ bb1 = {
+ Call(RET = f(1), bb2, UnwindTerminate(ReasonAbi))
+ }
+
+ bb2 = {
+ RET = 2;
+ Return()
+ }
+ )
+}