mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-30 02:33:55 +00:00
c16c22cc9c
The optimized clone method ends up as the following MIR: ``` _2 = copy ((*_1).0: i32); _3 = copy ((*_1).1: u64); _4 = copy ((*_1).2: [i8; 3]); _0 = Foo { a: move _2, b: move _3, c: move _4 }; ``` We can transform this to: ``` _0 = copy (*_1); ```
18 lines
405 B
Rust
18 lines
405 B
Rust
//@ test-mir-pass: GVN
|
|
//@ compile-flags: -Zmir-enable-passes=+InstSimplify-before-inline
|
|
|
|
// Check if we have transformed the default clone to copy in the specific pipeline.
|
|
|
|
// EMIT_MIR gvn_clone.{impl#0}-clone.GVN.diff
|
|
|
|
// CHECK-LABEL: ::clone(
|
|
// CHECK-NOT: = AllCopy { {{.*}} };
|
|
// CHECK: _0 = copy (*_1);
|
|
// CHECK: return;
|
|
#[derive(Clone)]
|
|
struct AllCopy {
|
|
a: i32,
|
|
b: u64,
|
|
c: [i8; 3],
|
|
}
|