|  | // This test is checking that you cannot override a `forbid` by adding in other | 
|  | // attributes later in the same scope. (We already ensure that you cannot | 
|  | // override it in nested scopes). | 
|  |  | 
|  | // 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. | 
|  | // | 
|  | // I decided avoiding the redundant output was not worth the time in engineering | 
|  | // effort for bug like this, which 1. end users are unlikely to run into in the | 
|  | // first place, and 2. they won't see the redundant output anyway. | 
|  |  | 
|  | //@ compile-flags: -Z deduplicate-diagnostics=yes | 
|  |  | 
|  | #![forbid(forbidden_lint_groups)] | 
|  |  | 
|  | fn forbid_first(num: i32) -> i32 { | 
|  | #![forbid(unused)] | 
|  | #![deny(unused)] | 
|  | #![warn(unused)] | 
|  | //~^ ERROR: warn(unused) incompatible with previous forbid | 
|  | //~| WARNING being phased out | 
|  | #![allow(unused)] | 
|  |  | 
|  | num * num | 
|  | } | 
|  |  | 
|  | fn forbid_last(num: i32) -> i32 { | 
|  | #![deny(unused)] | 
|  | #![warn(unused)] | 
|  | #![allow(unused)] | 
|  | #![forbid(unused)] | 
|  |  | 
|  | num * num | 
|  | } | 
|  |  | 
|  | fn forbid_multiple(num: i32) -> i32 { | 
|  | #![forbid(unused)] | 
|  | #![forbid(unused)] | 
|  |  | 
|  | num * num | 
|  | } | 
|  |  | 
|  | fn main() { | 
|  | forbid_first(10); | 
|  | forbid_last(10); | 
|  | forbid_multiple(10); | 
|  | } |