/src/test/incremental/hashes/struct_constructors.rs
https://gitlab.com/jianglu/rust · Rust · 250 lines · 176 code · 48 blank · 26 comment · 0 complexity · aace3fc622d07ea0cb61dd9ff8c3f007 MD5 · raw file
- // Copyright 2016 The Rust Project Developers. See the COPYRIGHT
- // file at the top-level directory of this distribution and at
- // http://rust-lang.org/COPYRIGHT.
- //
- // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
- // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
- // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
- // option. This file may not be copied, modified, or distributed
- // except according to those terms.
- // This test case tests the incremental compilation hash (ICH) implementation
- // for struct constructor expressions.
- // The general pattern followed here is: Change one thing between rev1 and rev2
- // and make sure that the hash has changed, then change nothing between rev2 and
- // rev3 and make sure that the hash has not changed.
- // compile-pass
- // revisions: cfail1 cfail2 cfail3
- // compile-flags: -Z query-dep-graph -Zincremental-ignore-spans
- #![allow(warnings)]
- #![feature(rustc_attrs)]
- #![crate_type="rlib"]
- pub struct RegularStruct {
- x: i32,
- y: i64,
- z: i16,
- }
- // Change field value (regular struct) -----------------------------------------
- #[cfg(cfail1)]
- pub fn change_field_value_regular_struct() -> RegularStruct {
- RegularStruct {
- x: 0,
- y: 1,
- z: 2,
- }
- }
- #[cfg(not(cfail1))]
- #[rustc_clean(cfg="cfail2", except="HirBody,MirOptimized,MirValidated")]
- #[rustc_clean(cfg="cfail3")]
- pub fn change_field_value_regular_struct() -> RegularStruct {
- RegularStruct {
- x: 0,
- y: 2,
- z: 2,
- }
- }
- // Change field order (regular struct) -----------------------------------------
- #[cfg(cfail1)]
- pub fn change_field_order_regular_struct() -> RegularStruct {
- RegularStruct {
- x: 3,
- y: 4,
- z: 5,
- }
- }
- #[cfg(not(cfail1))]
- #[rustc_clean(cfg="cfail2", except="HirBody,TypeckTables")]
- #[rustc_clean(cfg="cfail3")]
- pub fn change_field_order_regular_struct() -> RegularStruct {
- RegularStruct {
- y: 4,
- x: 3,
- z: 5,
- }
- }
- // Add field (regular struct) --------------------------------------------------
- #[cfg(cfail1)]
- pub fn add_field_regular_struct() -> RegularStruct {
- let struct1 = RegularStruct {
- x: 3,
- y: 4,
- z: 5,
- };
- RegularStruct {
- x: 7,
- .. struct1
- }
- }
- #[cfg(not(cfail1))]
- #[rustc_clean(cfg="cfail2", except="HirBody,MirOptimized,MirValidated,TypeckTables")]
- #[rustc_clean(cfg="cfail3")]
- pub fn add_field_regular_struct() -> RegularStruct {
- let struct1 = RegularStruct {
- x: 3,
- y: 4,
- z: 5,
- };
- RegularStruct {
- x: 7,
- y: 8,
- .. struct1
- }
- }
- // Change field label (regular struct) -----------------------------------------
- #[cfg(cfail1)]
- pub fn change_field_label_regular_struct() -> RegularStruct {
- let struct1 = RegularStruct {
- x: 3,
- y: 4,
- z: 5,
- };
- RegularStruct {
- x: 7,
- y: 9,
- .. struct1
- }
- }
- #[cfg(not(cfail1))]
- #[rustc_clean(cfg="cfail2", except="HirBody,MirOptimized,MirValidated,TypeckTables")]
- #[rustc_clean(cfg="cfail3")]
- pub fn change_field_label_regular_struct() -> RegularStruct {
- let struct1 = RegularStruct {
- x: 3,
- y: 4,
- z: 5,
- };
- RegularStruct {
- x: 7,
- z: 9,
- .. struct1
- }
- }
- pub struct RegularStruct2 {
- x: i8,
- y: i8,
- z: i8,
- }
- // Change constructor path (regular struct) ------------------------------------
- #[cfg(cfail1)]
- pub fn change_constructor_path_regular_struct() {
- let _ = RegularStruct {
- x: 0,
- y: 1,
- z: 2,
- };
- }
- #[cfg(not(cfail1))]
- #[rustc_clean(cfg="cfail2", except="HirBody,MirOptimized,MirValidated,TypeckTables")]
- #[rustc_clean(cfg="cfail3")]
- pub fn change_constructor_path_regular_struct() {
- let _ = RegularStruct2 {
- x: 0,
- y: 1,
- z: 2,
- };
- }
- // Change constructor path indirectly (regular struct) -------------------------
- pub mod change_constructor_path_indirectly_regular_struct {
- #[cfg(cfail1)]
- use super::RegularStruct as Struct;
- #[cfg(not(cfail1))]
- use super::RegularStruct2 as Struct;
- #[rustc_clean(
- cfg="cfail2",
- except="FnSignature,Hir,HirBody,MirOptimized,MirValidated,TypeckTables"
- )]
- #[rustc_clean(cfg="cfail3")]
- pub fn function() -> Struct {
- Struct {
- x: 0,
- y: 1,
- z: 2,
- }
- }
- }
- pub struct TupleStruct(i32, i64, i16);
- // Change field value (tuple struct) -------------------------------------------
- #[cfg(cfail1)]
- pub fn change_field_value_tuple_struct() -> TupleStruct {
- TupleStruct(0, 1, 2)
- }
- #[cfg(not(cfail1))]
- #[rustc_clean(cfg="cfail2", except="HirBody,MirOptimized,MirValidated")]
- #[rustc_clean(cfg="cfail3")]
- pub fn change_field_value_tuple_struct() -> TupleStruct {
- TupleStruct(0, 1, 3)
- }
- pub struct TupleStruct2(u16, u16, u16);
- // Change constructor path (tuple struct) --------------------------------------
- #[cfg(cfail1)]
- pub fn change_constructor_path_tuple_struct() {
- let _ = TupleStruct(0, 1, 2);
- }
- #[cfg(not(cfail1))]
- #[rustc_clean(cfg="cfail2", except="HirBody,MirOptimized,MirValidated,TypeckTables")]
- #[rustc_clean(cfg="cfail3")]
- pub fn change_constructor_path_tuple_struct() {
- let _ = TupleStruct2(0, 1, 2);
- }
- // Change constructor path indirectly (tuple struct) ---------------------------
- pub mod change_constructor_path_indirectly_tuple_struct {
- #[cfg(cfail1)]
- use super::TupleStruct as Struct;
- #[cfg(not(cfail1))]
- use super::TupleStruct2 as Struct;
- #[rustc_clean(
- cfg="cfail2",
- except="FnSignature,Hir,HirBody,MirOptimized,MirValidated,TypeckTables"
- )]
- #[rustc_clean(cfg="cfail3")]
- pub fn function() -> Struct {
- Struct(0, 1, 2)
- }
- }