diff --git a/tests/codegen-llvm/derive-clone-enum-variants.rs b/tests/codegen-llvm/derive-clone-enum-variants.rs new file mode 100644 index 0000000000000..cc23de6d7264d --- /dev/null +++ b/tests/codegen-llvm/derive-clone-enum-variants.rs @@ -0,0 +1,26 @@ +//! Regression test for bad codegen of `#[derive(Clone)]` on enums. +//! Ensures efficient LLVM IR without unnecessary branches. +//! See . + +//@ compile-flags: -C opt-level=3 + +#![crate_type = "lib"] + +#[derive(Clone)] +pub enum Foo { + A(u8), + B(bool), +} + +#[derive(Clone)] +pub enum Bar { + C(Foo), + D(u8), +} + +// CHECK-LABEL: @clone_bar +// CHECK-NOT: icmp +#[unsafe(no_mangle)] +pub fn clone_bar(b: &Bar) -> Bar { + b.clone() +}