mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	 3feac59b79
			
		
	
	
		3feac59b79
		
	
	
	
	
		
			
			Invert the order that we pass the arguments to the `contract_check_ensures` function to avoid the warning when the tail of the function is unreachable. Note that the call itself is also unreachable, but we have already handled that case by ignoring unreachable call for contract calls.
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //@ revisions: unchk_pass unchk_fail_pre unchk_fail_post chk_pass chk_fail_pre chk_fail_post
 | |
| //
 | |
| //@ [unchk_pass] run-pass
 | |
| //@ [unchk_fail_pre] run-pass
 | |
| //@ [unchk_fail_post] run-pass
 | |
| //@ [chk_pass] run-pass
 | |
| //
 | |
| //@ [chk_fail_pre] run-fail
 | |
| //@ [chk_fail_post] run-fail
 | |
| //
 | |
| //@ [unchk_pass] compile-flags: -Zcontract-checks=no
 | |
| //@ [unchk_fail_pre] compile-flags: -Zcontract-checks=no
 | |
| //@ [unchk_fail_post] compile-flags: -Zcontract-checks=no
 | |
| //
 | |
| //@ [chk_pass] compile-flags: -Zcontract-checks=yes
 | |
| //@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes
 | |
| //@ [chk_fail_post] compile-flags: -Zcontract-checks=yes
 | |
| 
 | |
| #![feature(contracts)]
 | |
| //~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
 | |
| 
 | |
| #[core::contracts::requires(x.baz > 0)]
 | |
| #[core::contracts::ensures(|ret| *ret > 100)]
 | |
| fn nest(x: Baz) -> i32
 | |
| {
 | |
|     loop {
 | |
|         return x.baz + 50;
 | |
|     }
 | |
| }
 | |
| 
 | |
| struct Baz { baz: i32 }
 | |
| 
 | |
| const BAZ_PASS_PRE_POST: Baz = Baz { baz: 100 };
 | |
| #[cfg(any(unchk_fail_post, chk_fail_post))]
 | |
| const BAZ_FAIL_POST: Baz = Baz { baz: 10 };
 | |
| #[cfg(any(unchk_fail_pre, chk_fail_pre))]
 | |
| const BAZ_FAIL_PRE: Baz = Baz { baz: -10 };
 | |
| 
 | |
| fn main() {
 | |
|     assert_eq!(nest(BAZ_PASS_PRE_POST), 150);
 | |
|     #[cfg(any(unchk_fail_pre, chk_fail_pre))]
 | |
|     nest(BAZ_FAIL_PRE);
 | |
|     #[cfg(any(unchk_fail_post, chk_fail_post))]
 | |
|     nest(BAZ_FAIL_POST);
 | |
| }
 |