]> git.proxmox.com Git - rustc.git/blame - src/test/run-pass/swap-overlapping.rs
New upstream version 1.19.0+dfsg1
[rustc.git] / src / test / run-pass / swap-overlapping.rs
CommitLineData
223e47cc
LB
1// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
2// file at the top-level directory of this distribution and at
3// http://rust-lang.org/COPYRIGHT.
4//
5// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8// option. This file may not be copied, modified, or distributed
9// except according to those terms.
10
11// Issue #5041 - avoid overlapping memcpy when src and dest of a swap are the same
12
c34b1796
AL
13// pretty-expanded FIXME #23616
14
970d7e83 15use std::ptr;
970d7e83 16
223e47cc
LB
17pub fn main() {
18 let mut test = TestDescAndFn {
19 desc: TestDesc {
1a4d82fc 20 name: TestName::DynTestName("test".to_string()),
223e47cc
LB
21 should_fail: false
22 },
1a4d82fc 23 testfn: TestFn::DynTestFn(22),
223e47cc
LB
24 };
25 do_swap(&mut test);
26}
27
28fn do_swap(test: &mut TestDescAndFn) {
970d7e83 29 unsafe {
1a4d82fc 30 ptr::swap(test, test);
970d7e83 31 }
223e47cc
LB
32}
33
34pub enum TestName {
1a4d82fc 35 DynTestName(String)
223e47cc
LB
36}
37
38pub enum TestFn {
c34b1796
AL
39 DynTestFn(isize),
40 DynBenchFn(isize),
223e47cc
LB
41}
42
43pub struct TestDesc {
44 name: TestName,
45 should_fail: bool
46}
47
48pub struct TestDescAndFn {
49 desc: TestDesc,
50 testfn: TestFn,
51}