From cad050b002ff36c65b68833fcd90824eceee1993 Mon Sep 17 00:00:00 2001 From: Simon Vandel Sillesen Date: Thu, 17 Sep 2020 18:27:49 +0200 Subject: [PATCH] Add regression test showcasing miscompilation --- ..._regression.encode.SimplifyBranchSame.diff | 30 +++++++++++++++++++ src/test/mir-opt/76803_regression.rs | 19 ++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/test/mir-opt/76803_regression.encode.SimplifyBranchSame.diff create mode 100644 src/test/mir-opt/76803_regression.rs diff --git a/src/test/mir-opt/76803_regression.encode.SimplifyBranchSame.diff b/src/test/mir-opt/76803_regression.encode.SimplifyBranchSame.diff new file mode 100644 index 00000000000..63139285209 --- /dev/null +++ b/src/test/mir-opt/76803_regression.encode.SimplifyBranchSame.diff @@ -0,0 +1,30 @@ +- // MIR for `encode` before SimplifyBranchSame ++ // MIR for `encode` after SimplifyBranchSame + + fn encode(_1: Type) -> Type { + debug v => _1; // in scope 0 at $DIR/76803_regression.rs:10:15: 10:16 + let mut _0: Type; // return place in scope 0 at $DIR/76803_regression.rs:10:27: 10:31 + let mut _2: isize; // in scope 0 at $DIR/76803_regression.rs:12:9: 12:16 + + bb0: { + _2 = discriminant(_1); // scope 0 at $DIR/76803_regression.rs:12:9: 12:16 +- switchInt(move _2) -> [0_isize: bb2, otherwise: bb1]; // scope 0 at $DIR/76803_regression.rs:12:9: 12:16 ++ goto -> bb1; // scope 0 at $DIR/76803_regression.rs:12:9: 12:16 + } + + bb1: { + _0 = move _1; // scope 0 at $DIR/76803_regression.rs:13:14: 13:15 +- goto -> bb3; // scope 0 at $DIR/76803_regression.rs:11:5: 14:6 ++ goto -> bb2; // scope 0 at $DIR/76803_regression.rs:11:5: 14:6 + } + + bb2: { +- discriminant(_0) = 1; // scope 0 at $DIR/76803_regression.rs:12:20: 12:27 +- goto -> bb3; // scope 0 at $DIR/76803_regression.rs:11:5: 14:6 +- } +- +- bb3: { + return; // scope 0 at $DIR/76803_regression.rs:15:2: 15:2 + } + } + diff --git a/src/test/mir-opt/76803_regression.rs b/src/test/mir-opt/76803_regression.rs new file mode 100644 index 00000000000..05dc3c97841 --- /dev/null +++ b/src/test/mir-opt/76803_regression.rs @@ -0,0 +1,19 @@ +// compile-flags: -Z mir-opt-level=1 +// EMIT_MIR 76803_regression.encode.SimplifyBranchSame.diff + +#[derive(Debug, Eq, PartialEq)] +pub enum Type { + A, + B, +} + +pub fn encode(v: Type) -> Type { + match v { + Type::A => Type::B, + _ => v, + } +} + +fn main() { + assert_eq!(Type::B, encode(Type::A)); +} -- 2.44.0