rust/tests/ui/macros/format-args-temporaries.rs
许杰友 Jieyou Xu (Joe) edafbaffb2
Adjust UI tests for unit_bindings
- Either explicitly annotate `let x: () = expr;` where `x` has unit
  type, or remove the unit binding to leave only `expr;` instead.
- Fix disjoint-capture-in-same-closure test
2023-06-12 20:24:48 +08:00

55 lines
1.1 KiB
Rust

// check-pass
use std::fmt::{self, Display};
struct Mutex;
impl Mutex {
fn lock(&self) -> MutexGuard {
MutexGuard(self)
}
}
struct MutexGuard<'a>(&'a Mutex);
impl<'a> Drop for MutexGuard<'a> {
fn drop(&mut self) {
// Empty but this is a necessary part of the repro. Otherwise borrow
// checker is fine with 'a dangling at the time that MutexGuard goes out
// of scope.
}
}
impl<'a> Display for MutexGuard<'a> {
fn fmt(&self, _formatter: &mut fmt::Formatter) -> fmt::Result {
Ok(())
}
}
fn main() {
let _print: () = {
let mutex = Mutex;
print!("{}", mutex.lock()) /* no semicolon */
};
let _println: () = {
let mutex = Mutex;
println!("{}", mutex.lock()) /* no semicolon */
};
let _eprint: () = {
let mutex = Mutex;
eprint!("{}", mutex.lock()) /* no semicolon */
};
let _eprintln: () = {
let mutex = Mutex;
eprintln!("{}", mutex.lock()) /* no semicolon */
};
let _panic: () = {
let mutex = Mutex;
panic!("{}", mutex.lock()) /* no semicolon */
};
}