diff options
| author | Ralf Jung <post@ralfj.de> | 2024-11-02 20:15:18 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2024-11-10 10:01:27 +0100 |
| commit | 686eeb83e9c6d7f70848cdf84f490f5c1aa3edd3 (patch) | |
| tree | 74d0db972f0f0b0a1c75da8ff4361b8051d20124 /compiler/rustc_attr/src/builtin.rs | |
| parent | 668959740f97e7a22ae340742886d330ab63950f (diff) | |
| download | rust-686eeb83e9c6d7f70848cdf84f490f5c1aa3edd3.tar.gz rust-686eeb83e9c6d7f70848cdf84f490f5c1aa3edd3.zip | |
honor rustc_const_stable_indirect in non-staged_api crate with -Zforce-unstable-if-unmarked
Diffstat (limited to 'compiler/rustc_attr/src/builtin.rs')
| -rw-r--r-- | compiler/rustc_attr/src/builtin.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/compiler/rustc_attr/src/builtin.rs b/compiler/rustc_attr/src/builtin.rs index 2753ac529d1..3a7ea36f601 100644 --- a/compiler/rustc_attr/src/builtin.rs +++ b/compiler/rustc_attr/src/builtin.rs @@ -381,6 +381,26 @@ pub fn find_const_stability( const_stab } +/// Calculates the const stability for a const function in a `-Zforce-unstable-if-unmarked` crate +/// without the `staged_api` feature. +pub fn unmarked_crate_const_stab( + _sess: &Session, + attrs: &[Attribute], + regular_stab: Stability, +) -> ConstStability { + assert!(regular_stab.level.is_unstable()); + // The only attribute that matters here is `rustc_const_stable_indirect`. + // We enforce recursive const stability rules for those functions. + let const_stable_indirect = + attrs.iter().any(|a| a.name_or_empty() == sym::rustc_const_stable_indirect); + ConstStability { + feature: Some(regular_stab.feature), + const_stable_indirect, + promotable: false, + level: regular_stab.level, + } +} + /// Collects stability info from `rustc_default_body_unstable` attributes in `attrs`. /// Returns `None` if no stability attributes are found. pub fn find_body_stability( |
