Parse and feature gate raw address of expressions

This commit is contained in:
Matthew Jasper 2019-11-23 14:22:00 +00:00
parent a8efd31f2b
commit 064bed0f31
4 changed files with 8 additions and 2 deletions

View file

@ -592,7 +592,7 @@ impl<'a> Parser<'a> {
}
}
/// Parse `& mut? <expr>` or `& raw [ const | mut ] <expr>`
/// Parse `& mut? <expr>` or `& raw [ const | mut ] <expr>`.
fn parse_address_of(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
self.expect_and()?;
let (k, m) = if self.check_keyword(kw::Raw)

View file

@ -520,13 +520,16 @@ declare_features! (
/// Allows using the `efiapi` ABI.
(active, abi_efiapi, "1.40.0", Some(65815), None),
/// Allows `&raw const $place_expr` and `&raw mut $place_expr` expressions.
(active, raw_ref_op, "1.41.0", Some(64490), None),
/// Allows diverging expressions to fall back to `!` rather than `()`.
(active, never_type_fallback, "1.41.0", Some(65992), None),
/// Allows using the `#[register_attr]` attribute.
(active, register_attr, "1.41.0", Some(66080), None),
/// Allows using the `#[register_attr]` attribute.
/// Allows using the `#[register_tool]` attribute.
(active, register_tool, "1.41.0", Some(66079), None),
/// Allows the use of `if` and `match` in constants.

View file

@ -866,6 +866,7 @@ pub fn check_crate(krate: &ast::Crate,
gate_all!(generators, "yield syntax is experimental");
gate_all!(or_patterns, "or-patterns syntax is experimental");
gate_all!(const_extern_fn, "`const extern fn` definitions are unstable");
gate_all!(raw_ref_op, "raw address of syntax is experimental");
// All uses of `gate_all!` below this point were added in #65742,
// and subsequently disabled (with the non-early gating readded).

View file

@ -98,6 +98,7 @@ symbols! {
Auto: "auto",
Catch: "catch",
Default: "default",
Raw: "raw",
Union: "union",
}
@ -546,6 +547,7 @@ symbols! {
RangeToInclusive,
raw_dylib,
raw_identifiers,
raw_ref_op,
Ready,
reason,
recursion_limit,