mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-30 20:44:34 +00:00 
			
		
		
		
	 9dc6e08279
			
		
	
	
		9dc6e08279
		
	
	
	
	
		
			
			Currently we can't automatically enforce formatting on tests (see #125637), but we can at least keep things relatively tidy by occasionally running the formatter manually. This was done by temporarily commenting out the `"/tests/"` exclusion in `rustfmt.toml`, and then running `x fmt tests/coverage` and `x test coverage --bless`.
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
 | |
| 
 | |
| use std::ops::{Coroutine, CoroutineState};
 | |
| use std::pin::Pin;
 | |
| 
 | |
| // The following implementation of a function called from a `yield` statement
 | |
| // (apparently requiring the Result and the `String` type or constructor)
 | |
| // creates conditions where the `coroutine::StateTransform` MIR transform will
 | |
| // drop all `Counter` `Coverage` statements from a MIR. `simplify.rs` has logic
 | |
| // to handle this condition, and still report dead block coverage.
 | |
| fn get_u32(val: bool) -> Result<u32, String> {
 | |
|     if val {
 | |
|         Ok(1) //
 | |
|     } else {
 | |
|         Err(String::from("some error")) //
 | |
|     }
 | |
| }
 | |
| 
 | |
| fn main() {
 | |
|     let is_true = std::env::args().len() == 1;
 | |
|     let mut coroutine = #[coroutine]
 | |
|     || {
 | |
|         yield get_u32(is_true);
 | |
|         return "foo";
 | |
|     };
 | |
| 
 | |
|     match Pin::new(&mut coroutine).resume(()) {
 | |
|         CoroutineState::Yielded(Ok(1)) => {}
 | |
|         _ => panic!("unexpected return from resume"),
 | |
|     }
 | |
|     match Pin::new(&mut coroutine).resume(()) {
 | |
|         CoroutineState::Complete("foo") => {}
 | |
|         _ => panic!("unexpected return from resume"),
 | |
|     }
 | |
| }
 |