rust/compiler
bors 07a4b7e2a9 Auto merge of #116773 - dtolnay:validatestable, r=compiler-errors
Validate `feature` and `since` values inside `#[stable(…)]`

Previously the string passed to `#[unstable(feature = "...")]` would be validated as an identifier, but not `#[stable(feature = "...")]`. In the standard library there were `stable` attributes containing the empty string, and kebab-case string, neither of which should be allowed.

Pre-existing validation of `unstable`:

```rust
// src/lib.rs

#![allow(internal_features)]
#![feature(staged_api)]
#![unstable(feature = "kebab-case", issue = "none")]

#[unstable(feature = "kebab-case", issue = "none")]
pub struct Struct;
```

```console
error[E0546]: 'feature' is not an identifier
 --> src/lib.rs:5:1
  |
5 | #![unstable(feature = "kebab-case", issue = "none")]
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

For an `unstable` attribute, the need for an identifier is obvious because the downstream code needs to write a `#![feature(...)]` attribute containing that identifier. `#![feature(kebab-case)]` is not valid syntax and `#![feature(kebab_case)]` would not work if that is not the name of the feature.

Having a valid identifier even in `stable` is less essential but still useful because it allows for informative diagnostic about the stabilization of a feature. Compare:

```rust
// src/lib.rs

#![allow(internal_features)]
#![feature(staged_api)]
#![stable(feature = "kebab-case", since = "1.0.0")]

#[stable(feature = "kebab-case", since = "1.0.0")]
pub struct Struct;
```

```rust
// src/main.rs

#![feature(kebab_case)]

use repro::Struct;

fn main() {}
```

```console
error[E0635]: unknown feature `kebab_case`
 --> src/main.rs:3:12
  |
3 | #![feature(kebab_case)]
  |            ^^^^^^^^^^
```

vs the situation if we correctly use `feature = "snake_case"` and `#![feature(snake_case)]`, as enforced by this PR:

```console
warning: the feature `snake_case` has been stable since 1.0.0 and no longer requires an attribute to enable
 --> src/main.rs:3:12
  |
3 | #![feature(snake_case)]
  |            ^^^^^^^^^^
  |
  = note: `#[warn(stable_features)]` on by default
```
2023-10-24 15:06:20 +00:00
..
rustc Split out the stable part of smir into its own crate to prevent accidental usage of forever unstable things 2023-09-25 14:38:27 +00:00
rustc_abi s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_arena rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_ast use visibility to check unused imports and delete some stmts 2023-10-22 21:27:46 +08:00
rustc_ast_lowering Rename CoroutineKind::Gen to ::Coroutine 2023-10-20 21:14:01 +00:00
rustc_ast_passes s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_ast_pretty Auto merge of #116822 - notriddle:notriddle/rust-logo, r=fmease 2023-10-17 04:41:20 +00:00
rustc_attr Validate since value in stable attribute 2023-10-23 13:04:35 -07:00
rustc_baked_icu_data docs: add Rust logo to more compiler crates 2023-10-16 15:38:08 -07:00
rustc_borrowck Auto merge of #116300 - cjgillot:split-move, r=petrochenkov 2023-10-24 00:25:32 +00:00
rustc_builtin_macros Auto merge of #115324 - francorbacho:master, r=davidtwco 2023-10-23 00:51:35 +00:00
rustc_codegen_cranelift Merge commit '93a5433f17' into sync_cg_clif-2023-10-24 2023-10-24 12:22:23 +00:00
rustc_codegen_gcc s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_codegen_llvm Auto merge of #116033 - bvanjoi:fix-116032, r=petrochenkov 2023-10-23 20:24:09 +00:00
rustc_codegen_ssa Rename CoroutineKind::Gen to ::Coroutine 2023-10-20 21:14:01 +00:00
rustc_const_eval Rollup merge of #116859 - Nilstrieb:more-more-funny-pretty-printers, r=oli-obk 2023-10-23 22:26:29 +02:00
rustc_data_structures Auto merge of #116849 - oli-obk:error_shenanigans, r=cjgillot 2023-10-23 09:59:40 +00:00
rustc_driver docs: add Rust logo to more compiler crates 2023-10-16 15:38:08 -07:00
rustc_driver_impl Auto merge of #116814 - estebank:windows-ice-path, r=petrochenkov 2023-10-18 07:45:56 +00:00
rustc_error_codes Replace all uses of generator in markdown documentation with coroutine 2023-10-20 21:14:02 +00:00
rustc_error_messages docs: add Rust logo to more compiler crates 2023-10-16 15:38:08 -07:00
rustc_errors Auto merge of #116962 - estebank:issue-63835, r=oli-obk 2023-10-20 10:52:24 +00:00
rustc_expand Mention the syntax for use on mod foo; if foo doesn't exist 2023-10-21 15:56:01 +00:00
rustc_feature Let's see what those opaque types actually are 2023-10-23 16:18:35 -04:00
rustc_fluent_macro Use v0.0.0 in compiler crates 2023-10-18 21:55:15 +00:00
rustc_fs_util Add try_canonicalize to rustc_fs_util and use it over fs::canonicalize 2023-03-16 21:50:23 +01:00
rustc_graphviz rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_hir Rename CoroutineKind::Gen to ::Coroutine 2023-10-20 21:14:01 +00:00
rustc_hir_analysis Let's see what those opaque types actually are 2023-10-23 16:18:35 -04:00
rustc_hir_pretty Fiddle with State functions. 2023-10-11 10:46:55 +11:00
rustc_hir_typeck Auto merge of #117103 - matthiaskrgr:rollup-96zuuom, r=matthiaskrgr 2023-10-23 22:18:45 +00:00
rustc_incremental Auto merge of #115964 - bjorn3:cgu_reuse_tracker_global_state, r=cjgillot 2023-10-13 00:09:30 +00:00
rustc_index Preserve DebugInfo in DeadStoreElimination. 2023-10-06 15:46:11 +00:00
rustc_infer Auto merge of #117103 - matthiaskrgr:rollup-96zuuom, r=matthiaskrgr 2023-10-23 22:18:45 +00:00
rustc_interface s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_lexer Use v0.0.0 in compiler crates 2023-10-18 21:55:15 +00:00
rustc_lint Make ty::print::Printer take &mut self instead of self 2023-10-21 11:33:05 +02:00
rustc_lint_defs Auto merge of #116734 - Nadrieril:lint-per-column, r=cjgillot 2023-10-21 11:04:19 +00:00
rustc_llvm rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_log use env variable to control thread ids in rustc_log 2023-10-10 09:39:47 +08:00
rustc_macros Allow ensure queries to return Result<(), ErrorGuaranteed> 2023-10-23 08:20:29 +00:00
rustc_metadata s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_middle Auto merge of #117103 - matthiaskrgr:rollup-96zuuom, r=matthiaskrgr 2023-10-23 22:18:45 +00:00
rustc_mir_build Fix #117033 2023-10-21 23:04:17 +02:00
rustc_mir_dataflow Auto merge of #116300 - cjgillot:split-move, r=petrochenkov 2023-10-24 00:25:32 +00:00
rustc_mir_transform Auto merge of #116300 - cjgillot:split-move, r=petrochenkov 2023-10-24 00:25:32 +00:00
rustc_monomorphize coverage: Change query codegened_and_inlined_items to a plain function 2023-10-21 12:20:05 +11:00
rustc_parse s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_parse_format rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_passes s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_plugin_impl rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_privacy s/Generator/Coroutine/ 2023-10-20 21:10:38 +00:00
rustc_query_impl rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_query_system fix broken link: update incremental compilation url 2023-10-22 07:20:36 -07:00
rustc_resolve use visibility to check unused imports and delete some stmts 2023-10-22 21:27:46 +08:00
rustc_serialize rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_session Rollup merge of #116960 - lqd:applied-member-constraints-scope, r=matthewjasper 2023-10-23 16:23:52 +02:00
rustc_smir Avoid having rustc_smir depend on rustc_interface or rustc_driver 2023-10-23 09:48:15 +00:00
rustc_span Let's see what those opaque types actually are 2023-10-23 16:18:35 -04:00
rustc_symbol_mangling Make ty::print::Printer take &mut self instead of self 2023-10-21 11:33:05 +02:00
rustc_target add target csky-unknown-linux-gnuabiv2hf 2023-10-22 21:20:30 +08:00
rustc_trait_selection Auto merge of #116435 - compiler-errors:re-erased, r=lcnr 2023-10-24 08:08:45 +00:00
rustc_traits Detect cycle errors hidden by opaques during monomorphization 2023-09-13 17:35:44 +00:00
rustc_transmute Use v0.0.0 in compiler crates 2023-10-18 21:55:15 +00:00
rustc_ty_utils s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_type_ir s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
stable_mir Rollup merge of #116964 - celinval:smir-mono-body, r=oli-obk 2023-10-21 10:08:17 +02:00