mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	 72800d3b89
			
		
	
	
		72800d3b89
		
	
	
	
	
		
			
			Except for `simd-intrinsic/`, which has a lot of files containing multiple types like `u8x64` which really are better when hand-formatted. There is a surprising amount of two-space indenting in this directory. Non-trivial changes: - `rustfmt::skip` needed in `debug-column.rs` to preserve meaning of the test. - `rustfmt::skip` used in a few places where hand-formatting read more nicely: `enum/enum-match.rs` - Line number adjustments needed for the expected output of `debug-column.rs` and `coroutine-debug.rs`.
		
			
				
	
	
		
			37 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //@ needs-unwind - this test verifies the amount of drop calls when unwinding is used
 | |
| //@ compile-flags: -C no-prepopulate-passes
 | |
| 
 | |
| #![crate_type = "lib"]
 | |
| 
 | |
| struct SomeUniqueName;
 | |
| 
 | |
| impl Drop for SomeUniqueName {
 | |
|     #[inline(never)]
 | |
|     fn drop(&mut self) {}
 | |
| }
 | |
| 
 | |
| #[inline(never)]
 | |
| pub fn possibly_unwinding() {}
 | |
| 
 | |
| // CHECK-LABEL: @droppy
 | |
| #[no_mangle]
 | |
| pub fn droppy() {
 | |
|     // Check that there are exactly 6 drop calls. The cleanups for the unwinding should be reused,
 | |
|     // so that's one new drop call per call to possibly_unwinding(), and finally 3 drop calls for
 | |
|     // the regular function exit. We used to have problems with quadratic growths of drop calls in
 | |
|     // such functions.
 | |
|     // FIXME(eddyb) the `void @` forces a match on the instruction, instead of the
 | |
|     // comment, that's `; call core::ptr::drop_in_place::<drop::SomeUniqueName>`
 | |
|     // for the `v0` mangling, should switch to matching on that once `legacy` is gone.
 | |
|     // CHECK-COUNT-6: {{(call|invoke) void @.*}}drop_in_place{{.*}}SomeUniqueName
 | |
|     // CHECK-NOT: {{(call|invoke) void @.*}}drop_in_place{{.*}}SomeUniqueName
 | |
|     // The next line checks for the } that ends the function definition
 | |
|     // CHECK-LABEL: {{^[}]}}
 | |
|     let _s = SomeUniqueName;
 | |
|     possibly_unwinding();
 | |
|     let _s = SomeUniqueName;
 | |
|     possibly_unwinding();
 | |
|     let _s = SomeUniqueName;
 | |
|     possibly_unwinding();
 | |
| }
 |