Error code E0789

This error code is internal to the compiler and will not be emitted with normal Rust code.

The internal rustc_allowed_through_unstable_modules attribute must be used on an item with a stable attribute.

Erroneous code example:

#![allow(unused)]
fn main() {
// NOTE: both of these attributes are perma-unstable and should *never* be
//       used outside of the compiler and standard library.
#![feature(rustc_attrs)]
#![feature(staged_api)]
#![allow(internal_features)]

#![unstable(feature = "foo_module", reason = "...", issue = "123")]

#[rustc_allowed_through_unstable_modules]
// #[stable(feature = "foo", since = "1.0")]
struct Foo;
// ^^^ error: `rustc_allowed_through_unstable_modules` attribute must be
//            paired with a `stable` attribute
}

Typically when an item is marked with a stable attribute, the modules that enclose the item must also be marked with stable attributes, otherwise the item becomes de facto unstable. #[rustc_allowed_through_unstable_modules] is a workaround which allows an item to "escape" its unstable parent modules. This error occurs when an item is marked with #[rustc_allowed_through_unstable_modules] but no supplementary stable attribute exists. See #99288 for an example of #[rustc_allowed_through_unstable_modules] in use.