| // If you turn off deduplicate diagnostics (which rustc turns on by default but |
| // compiletest turns off when it runs ui tests), then the errors are |
| // (unfortunately) repeated here because the checking is done as we read in the |
| // errors, and currently that happens two or three different times, depending on |
| // compiler flags. |
| // |
| // The test is much cleaner if we deduplicate, though. |
| |
| //@ compile-flags: -Z deduplicate-diagnostics=true |
| |
| #![forbid( |
| unsafe_code, |
| //~^ NOTE `forbid` level set here |
| //~| NOTE the lint level is defined here |
| reason = "our errors & omissions insurance policy doesn't cover unsafe Rust" |
| )] |
| |
| use std::ptr; |
| |
| fn main() { |
| let a_billion_dollar_mistake = ptr::null(); |
| |
| #[allow(unsafe_code)] |
| //~^ ERROR allow(unsafe_code) incompatible with previous forbid |
| //~| NOTE our errors & omissions insurance policy doesn't cover unsafe Rust |
| //~| NOTE overruled by previous forbid |
| unsafe { |
| //~^ ERROR usage of an `unsafe` block |
| //~| NOTE our errors & omissions insurance policy doesn't cover unsafe Rust |
| *a_billion_dollar_mistake |
| } |
| } |