//! Regression test for #128622.
//!
//! PR #128581 introduced an assertion that all builtin attributes are actually checked via
//! `CheckAttrVisitor` and aren't accidentally usable on completely unrelated HIR nodes.
//! Unfortunately, the check had correctness problems.
//!
//! The match on attribute path segments looked like
//!
//! ```rs,ignore
//! [sym::should_panic] => /* check is implemented */
//! match BUILTIN_ATTRIBUTE_MAP.get(name) {
//!     // checked below
//!     Some(BuiltinAttribute { type_: AttributeType::CrateLevel, .. }) => {}
//!     Some(_) => {
//!         if !name.as_str().starts_with("rustc_") {
//!             span_bug!(
//!                 attr.span,
//!                 "builtin attribute {name:?} not handled by `CheckAttrVisitor`"
//!             )
//!         }
//!     }
//!     None => (),
//! }
//! ```
//!
//! However, it failed to account for edge cases such as an attribute whose:
//!
//! 1. path segments *starts* with a builtin attribute such as `should_panic`
//! 2. which does not start with `rustc_`, and
//! 3. is also an `AttributeType::Normal` attribute upon registration with the builtin attribute map
//!
//! These conditions when all satisfied cause the span bug to be issued for e.g.
//! `#[should_panic::skip]` because the `[sym::should_panic]` arm is not matched (since it's
//! `[sym::should_panic, sym::skip]`).
//!
//! This test checks that the span bug is not fired for such cases.
//!
//! issue: rust-lang/rust#128622

// Notably, `should_panic` is a `AttributeType::Normal` attribute that is checked separately.

struct Foo {
    #[should_panic::skip]
    //~^ ERROR failed to resolve
    pub field: u8,

    #[should_panic::a::b::c]
    //~^ ERROR failed to resolve
    pub field2: u8,
}

fn foo() {}

fn main() {
    #[deny::skip]
    //~^ ERROR failed to resolve
    foo();
}
