mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			152 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // This test case tests the incremental compilation hash (ICH) implementation
 | |
| // for exprs that can panic at runtime (e.g., because of bounds checking). For
 | |
| // these expressions an error message containing their source location is
 | |
| // generated, so their hash must always depend on their location in the source
 | |
| // code, not just when debuginfo is enabled.
 | |
| 
 | |
| // 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.
 | |
| 
 | |
| // build-pass (FIXME(62277): could be check-pass?)
 | |
| // revisions: cfail1 cfail2 cfail3
 | |
| // compile-flags: -Z query-dep-graph -C debug-assertions -O
 | |
| 
 | |
| #![allow(warnings)]
 | |
| #![feature(rustc_attrs)]
 | |
| #![crate_type="rlib"]
 | |
| 
 | |
| 
 | |
| // Indexing expression
 | |
| #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir")]
 | |
| #[rustc_clean(cfg="cfail3")]
 | |
| pub fn indexing(slice: &[u8]) -> u8 {
 | |
|     #[cfg(cfail1)]
 | |
|     {
 | |
|         slice[100]
 | |
|     }
 | |
|     #[cfg(not(cfail1))]
 | |
|     {
 | |
|         slice[100]
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| // Arithmetic overflow plus
 | |
| #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir")]
 | |
| #[rustc_clean(cfg="cfail3")]
 | |
| pub fn arithmetic_overflow_plus(val: i32) -> i32 {
 | |
|     #[cfg(cfail1)]
 | |
|     {
 | |
|         val + 1
 | |
|     }
 | |
|     #[cfg(not(cfail1))]
 | |
|     {
 | |
|         val + 1
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| // Arithmetic overflow minus
 | |
| #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir")]
 | |
| #[rustc_clean(cfg="cfail3")]
 | |
| pub fn arithmetic_overflow_minus(val: i32) -> i32 {
 | |
|     #[cfg(cfail1)]
 | |
|     {
 | |
|         val - 1
 | |
|     }
 | |
|     #[cfg(not(cfail1))]
 | |
|     {
 | |
|         val - 1
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| // Arithmetic overflow mult
 | |
| #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir")]
 | |
| #[rustc_clean(cfg="cfail3")]
 | |
| pub fn arithmetic_overflow_mult(val: i32) -> i32 {
 | |
|     #[cfg(cfail1)]
 | |
|     {
 | |
|         val * 2
 | |
|     }
 | |
|     #[cfg(not(cfail1))]
 | |
|     {
 | |
|         val * 2
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| // Arithmetic overflow negation
 | |
| #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir")]
 | |
| #[rustc_clean(cfg="cfail3")]
 | |
| pub fn arithmetic_overflow_negation(val: i32) -> i32 {
 | |
|     #[cfg(cfail1)]
 | |
|     {
 | |
|         -val
 | |
|     }
 | |
|     #[cfg(not(cfail1))]
 | |
|     {
 | |
|         -val
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| // Division by zero
 | |
| #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir")]
 | |
| #[rustc_clean(cfg="cfail3")]
 | |
| pub fn division_by_zero(val: i32) -> i32 {
 | |
|     #[cfg(cfail1)]
 | |
|     {
 | |
|         2 / val
 | |
|     }
 | |
|     #[cfg(not(cfail1))]
 | |
|     {
 | |
|         2 / val
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Division by zero
 | |
| #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir")]
 | |
| #[rustc_clean(cfg="cfail3")]
 | |
| pub fn mod_by_zero(val: i32) -> i32 {
 | |
|     #[cfg(cfail1)]
 | |
|     {
 | |
|         2 % val
 | |
|     }
 | |
|     #[cfg(not(cfail1))]
 | |
|     {
 | |
|         2 % val
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| // shift left
 | |
| #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir")]
 | |
| #[rustc_clean(cfg="cfail3")]
 | |
| pub fn shift_left(val: i32, shift: usize) -> i32 {
 | |
|     #[cfg(cfail1)]
 | |
|     {
 | |
|         val << shift
 | |
|     }
 | |
|     #[cfg(not(cfail1))]
 | |
|     {
 | |
|         val << shift
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| // shift right
 | |
| #[rustc_clean(cfg="cfail2", except="hir_owner_nodes,optimized_mir")]
 | |
| #[rustc_clean(cfg="cfail3")]
 | |
| pub fn shift_right(val: i32, shift: usize) -> i32 {
 | |
|     #[cfg(cfail1)]
 | |
|     {
 | |
|         val >> shift
 | |
|     }
 | |
|     #[cfg(not(cfail1))]
 | |
|     {
 | |
|         val >> shift
 | |
|     }
 | |
| }
 | 
