add UI test + docs for E0789
This commit is contained in:
parent
94a300b9b8
commit
00ff718da8
@ -506,6 +506,7 @@
|
||||
E0786: include_str!("./error_codes/E0786.md"),
|
||||
E0787: include_str!("./error_codes/E0787.md"),
|
||||
E0788: include_str!("./error_codes/E0788.md"),
|
||||
E0789: include_str!("./error_codes/E0789.md"),
|
||||
E0790: include_str!("./error_codes/E0790.md"),
|
||||
E0791: include_str!("./error_codes/E0791.md"),
|
||||
E0792: include_str!("./error_codes/E0792.md"),
|
||||
@ -645,5 +646,4 @@
|
||||
// E0721, // `await` keyword
|
||||
// E0723, // unstable feature in `const` context
|
||||
// E0738, // Removed; errored on `#[track_caller] fn`s in `extern "Rust" { ... }`.
|
||||
E0789, // rustc_allowed_through_unstable_modules without stability attribute
|
||||
}
|
||||
|
30
compiler/rustc_error_codes/src/error_codes/E0789.md
Normal file
30
compiler/rustc_error_codes/src/error_codes/E0789.md
Normal file
@ -0,0 +1,30 @@
|
||||
#### 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:
|
||||
|
||||
```compile_fail,E0789
|
||||
// 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)]
|
||||
|
||||
#![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](https://github.com/rust-lang/rust/pull/99288)
|
||||
for an example of `#[rustc_allowed_through_unstable_modules]` in use.
|
@ -31,7 +31,7 @@
|
||||
|
||||
// Error codes that don't yet have a UI test. This list will eventually be removed.
|
||||
const IGNORE_UI_TEST_CHECK: &[&str] =
|
||||
&["E0461", "E0465", "E0476", "E0514", "E0523", "E0554", "E0640", "E0717", "E0729", "E0789"];
|
||||
&["E0461", "E0465", "E0476", "E0514", "E0523", "E0554", "E0640", "E0717", "E0729"];
|
||||
|
||||
macro_rules! verbose_print {
|
||||
($verbose:expr, $($fmt:tt)*) => {
|
||||
|
12
tests/ui/error-codes/E0789.rs
Normal file
12
tests/ui/error-codes/E0789.rs
Normal file
@ -0,0 +1,12 @@
|
||||
// compile-flags: --crate-type lib
|
||||
|
||||
#![feature(rustc_attrs)]
|
||||
#![feature(staged_api)]
|
||||
#![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
|
||||
//~^^ ERROR `rustc_allowed_through_unstable_modules` attribute must be paired with a `stable` attribute
|
||||
// FIXME: we shouldn't have two errors here, only occurs when using `-Zdeduplicate-diagnostics=no`
|
15
tests/ui/error-codes/E0789.stderr
Normal file
15
tests/ui/error-codes/E0789.stderr
Normal file
@ -0,0 +1,15 @@
|
||||
error[E0789]: `rustc_allowed_through_unstable_modules` attribute must be paired with a `stable` attribute
|
||||
--> $DIR/E0789.rs:9:1
|
||||
|
|
||||
LL | struct Foo;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error[E0789]: `rustc_allowed_through_unstable_modules` attribute must be paired with a `stable` attribute
|
||||
--> $DIR/E0789.rs:9:1
|
||||
|
|
||||
LL | struct Foo;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0789`.
|
Loading…
Reference in New Issue
Block a user