From d305f68cb9c0d93a30f65af0cd33acd90e3f2532 Mon Sep 17 00:00:00 2001 From: varkor Date: Wed, 15 Aug 2018 02:02:52 +0100 Subject: [PATCH] Warn when `generic_associated_types` feature gate is enabled --- src/libsyntax/feature_gate.rs | 15 +++++++++++++++ .../gat-incomplete-warning.rs | 16 ++++++++++++++++ .../gat-incomplete-warning.stderr | 6 ++++++ 3 files changed, 37 insertions(+) create mode 100644 src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.rs create mode 100644 src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.stderr diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 56e69b9df9e..98fbbe4bdef 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -1920,6 +1920,11 @@ fn feature_removed(span_handler: &Handler, span: Span, reason: Option<&str>) { err.emit(); } + // Some features are known to be incomplete and using them is likely to have + // unanticipated results, such as compiler crashes. We warn the user about these + // to alert them. + let incomplete_features = ["generic_associated_types"]; + let mut features = Features::new(); let mut edition_enabled_features = FxHashMap(); @@ -1955,6 +1960,16 @@ fn feature_removed(span_handler: &Handler, span: Span, reason: Option<&str>) { continue }; + if incomplete_features.iter().any(|f| *f == name.as_str()) { + span_handler.struct_span_warn( + mi.span, + &format!( + "the feature `{}` is incomplete and may cause the compiler to crash", + name + ) + ).emit(); + } + if let Some(edition) = ALL_EDITIONS.iter().find(|e| name == e.feature_name()) { if *edition <= crate_edition { continue diff --git a/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.rs b/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.rs new file mode 100644 index 00000000000..7f48408b369 --- /dev/null +++ b/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.rs @@ -0,0 +1,16 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// run-pass + +#![feature(generic_associated_types)] +//~^ WARNING the feature `generic_associated_types` is incomplete + +fn main() {} diff --git a/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.stderr b/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.stderr new file mode 100644 index 00000000000..67682dcb8fb --- /dev/null +++ b/src/test/ui/rfc1598-generic-associated-types/gat-incomplete-warning.stderr @@ -0,0 +1,6 @@ +warning: the feature `generic_associated_types` is incomplete and may cause the compiler to crash + --> $DIR/gat-incomplete-warning.rs:13:12 + | +LL | #![feature(generic_associated_types)] + | ^^^^^^^^^^^^^^^^^^^^^^^^ + -- 2.44.0