about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2017-10-21 00:00:57 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2017-10-29 22:14:23 +0300
commitbf0cdb52f22df2eb6a510806fa32b05ab326a93e (patch)
tree5012f67e5c6015e0b6d8db87ac257a6157aa95f9
parent690ff045949ac3f3c5bd341e1584f90bc49f0596 (diff)
downloadrust-bf0cdb52f22df2eb6a510806fa32b05ab326a93e.tar.gz
rust-bf0cdb52f22df2eb6a510806fa32b05ab326a93e.zip
Add several lints into `unused` lint group
Remove a couple of obsolete lints
-rw-r--r--src/librustc/lib.rs1
-rw-r--r--src/librustc/lint/builtin.rs7
-rw-r--r--src/librustc/lint/mod.rs27
-rw-r--r--src/librustc_lint/builtin.rs8
-rw-r--r--src/librustc_lint/lib.rs16
-rw-r--r--src/librustc_lint/unused.rs4
-rw-r--r--src/librustc_passes/consts.rs3
-rw-r--r--src/test/compile-fail-fulldeps/auxiliary/lint_for_crate.rs1
-rw-r--r--src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs1
-rw-r--r--src/test/compile-fail-fulldeps/auxiliary/lint_plugin_test.rs1
-rw-r--r--src/test/compile-fail/const-eval-overflow.rs8
-rw-r--r--src/test/run-pass-fulldeps/auxiliary/lint_for_crate.rs1
-rw-r--r--src/test/run-pass-fulldeps/proc-macro/auxiliary/issue-40001-plugin.rs1
-rw-r--r--src/test/ui-fulldeps/auxiliary/lint_group_plugin_test.rs1
-rw-r--r--src/test/ui-fulldeps/auxiliary/lint_plugin_test.rs1
-rw-r--r--src/test/ui/const-eval/issue-43197.stderr4
-rw-r--r--src/test/ui/lint/suggestions.rs2
-rw-r--r--src/test/ui/lint/suggestions.stderr8
-rw-r--r--src/test/ui/lint/unused_parens_json_suggestion.rs2
-rw-r--r--src/test/ui/lint/unused_parens_json_suggestion.stderr2
-rw-r--r--src/test/ui/path-lookahead.stderr7
-rw-r--r--src/tools/toolstate.toml2
22 files changed, 53 insertions, 55 deletions
diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs
index 77270d10810..0cec26d339c 100644
--- a/src/librustc/lib.rs
+++ b/src/librustc/lib.rs
@@ -47,6 +47,7 @@
 #![feature(core_intrinsics)]
 #![feature(i128_type)]
 #![cfg_attr(windows, feature(libc))]
+#![feature(macro_vis_matcher)]
 #![feature(never_type)]
 #![feature(nonzero)]
 #![feature(quote)]
diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs
index d28963fc726..855cc069d11 100644
--- a/src/librustc/lint/builtin.rs
+++ b/src/librustc/lint/builtin.rs
@@ -107,12 +107,6 @@ declare_lint! {
 }
 
 declare_lint! {
-    pub FAT_PTR_TRANSMUTES,
-    Allow,
-    "detects transmutes of fat pointers"
-}
-
-declare_lint! {
     pub TRIVIAL_CASTS,
     Allow,
     "detects trivial casts which could be removed"
@@ -250,7 +244,6 @@ impl LintPass for HardwiredLints {
             UNUSED_FEATURES,
             STABLE_FEATURES,
             UNKNOWN_CRATE_TYPES,
-            FAT_PTR_TRANSMUTES,
             TRIVIAL_CASTS,
             TRIVIAL_NUMERIC_CASTS,
             PRIVATE_IN_PUBLIC,
diff --git a/src/librustc/lint/mod.rs b/src/librustc/lint/mod.rs
index 42b5e2dd83d..52dcbfdedef 100644
--- a/src/librustc/lint/mod.rs
+++ b/src/librustc/lint/mod.rs
@@ -84,29 +84,16 @@ impl Lint {
     }
 }
 
-/// Build a `Lint` initializer.
-#[macro_export]
-macro_rules! lint_initializer {
-    ($name:ident, $level:ident, $desc:expr) => (
-        ::rustc::lint::Lint {
-            name: stringify!($name),
-            default_level: ::rustc::lint::$level,
-            desc: $desc,
-        }
-    )
-}
-
 /// Declare a static item of type `&'static Lint`.
 #[macro_export]
 macro_rules! declare_lint {
-    (pub $name:ident, $level:ident, $desc:expr) => (
-        pub static $name: &'static ::rustc::lint::Lint
-            = &lint_initializer!($name, $level, $desc);
-    );
-    ($name:ident, $level:ident, $desc:expr) => (
-        static $name: &'static ::rustc::lint::Lint
-            = &lint_initializer!($name, $level, $desc);
-    );
+    ($vis: vis $NAME: ident, $Level: ident, $desc: expr) => (
+        $vis static $NAME: &$crate::lint::Lint = &$crate::lint::Lint {
+            name: stringify!($NAME),
+            default_level: $crate::lint::$Level,
+            desc: $desc
+        };
+    )
 }
 
 /// Declare a static `LintArray` and return it as an expression.
diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs
index bc2a1f08441..70cac419648 100644
--- a/src/librustc_lint/builtin.rs
+++ b/src/librustc_lint/builtin.rs
@@ -621,12 +621,6 @@ impl EarlyLintPass for AnonymousParameters {
     }
 }
 
-declare_lint! {
-    DEPRECATED_ATTR,
-    Warn,
-    "detects use of deprecated attributes"
-}
-
 /// Checks for use of attributes which have been deprecated.
 #[derive(Clone)]
 pub struct DeprecatedAttr {
@@ -645,7 +639,7 @@ impl DeprecatedAttr {
 
 impl LintPass for DeprecatedAttr {
     fn get_lints(&self) -> LintArray {
-        lint_array!(DEPRECATED_ATTR)
+        lint_array!()
     }
 }
 
diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs
index 4ba7f7aa951..42fcf377d65 100644
--- a/src/librustc_lint/lib.rs
+++ b/src/librustc_lint/lib.rs
@@ -28,6 +28,7 @@
 #![feature(box_patterns)]
 #![feature(box_syntax)]
 #![feature(i128_type)]
+#![feature(macro_vis_matcher)]
 #![feature(quote)]
 #![feature(rustc_diagnostic_macros)]
 #![feature(slice_patterns)]
@@ -163,7 +164,12 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
                     UNUSED_UNSAFE,
                     PATH_STATEMENTS,
                     UNUSED_ATTRIBUTES,
-                    UNUSED_MACROS);
+                    UNUSED_MACROS,
+                    UNUSED_ALLOCATION,
+                    UNUSED_DOC_COMMENT,
+                    UNUSED_EXTERN_CRATES,
+                    UNUSED_FEATURES,
+                    UNUSED_PARENS);
 
     // Guidelines for creating a future incompatibility lint:
     //
@@ -239,15 +245,15 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
 
     // Register renamed and removed lints
     store.register_renamed("unknown_features", "unused_features");
-    store.register_removed("unsigned_negation",
-                           "replaced by negate_unsigned feature gate");
+    store.register_removed("unsigned_negation", "replaced by negate_unsigned feature gate");
     store.register_removed("negate_unsigned", "cast a signed value instead");
     store.register_removed("raw_pointer_derive", "using derive with raw pointers is ok");
     // This was renamed to raw_pointer_derive, which was then removed,
     // so it is also considered removed
-    store.register_removed("raw_pointer_deriving",
-                           "using derive with raw pointers is ok");
+    store.register_removed("raw_pointer_deriving", "using derive with raw pointers is ok");
     store.register_removed("drop_with_repr_extern", "drop flags have been removed");
+    store.register_removed("fat_ptr_transmutes", "was accidentally removed back in 2014");
+    store.register_removed("deprecated_attr", "use `deprecated` instead");
     store.register_removed("transmute_from_fn_item_types",
         "always cast functions before transmuting them");
     store.register_removed("hr_lifetime_in_assoc_type",
diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs
index a058f84e588..32f724f7541 100644
--- a/src/librustc_lint/unused.rs
+++ b/src/librustc_lint/unused.rs
@@ -225,7 +225,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnusedAttributes {
 }
 
 declare_lint! {
-    UNUSED_PARENS,
+    pub(super) UNUSED_PARENS,
     Warn,
     "`if`, `match`, `while` and `return` do not need parentheses"
 }
@@ -350,7 +350,7 @@ impl EarlyLintPass for UnusedImportBraces {
 }
 
 declare_lint! {
-    UNUSED_ALLOCATION,
+    pub(super) UNUSED_ALLOCATION,
     Warn,
     "detects unnecessary allocations that can be eliminated"
 }
diff --git a/src/librustc_passes/consts.rs b/src/librustc_passes/consts.rs
index d3202ba4ab5..a6eaff4481c 100644
--- a/src/librustc_passes/consts.rs
+++ b/src/librustc_passes/consts.rs
@@ -140,8 +140,7 @@ impl<'a, 'gcx> CheckCrateVisitor<'a, 'gcx> {
                     self.tcx.lint_node(CONST_ERR,
                                        expr.id,
                                        expr.span,
-                                       &format!("constant evaluation error: {}. This will \
-                                                 become a HARD ERROR in the future",
+                                       &format!("constant evaluation error: {}",
                                                 err.description().into_oneline()));
                 }
             }
diff --git a/src/test/compile-fail-fulldeps/auxiliary/lint_for_crate.rs b/src/test/compile-fail-fulldeps/auxiliary/lint_for_crate.rs
index fc53031e7f2..d3f921e0878 100644
--- a/src/test/compile-fail-fulldeps/auxiliary/lint_for_crate.rs
+++ b/src/test/compile-fail-fulldeps/auxiliary/lint_for_crate.rs
@@ -12,6 +12,7 @@
 
 #![feature(plugin_registrar, rustc_private)]
 #![feature(box_syntax)]
+#![feature(macro_vis_matcher)]
 
 #[macro_use] extern crate rustc;
 extern crate rustc_plugin;
diff --git a/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs b/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs
index 490aa0d4693..a0c72243d48 100644
--- a/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs
+++ b/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs
@@ -12,6 +12,7 @@
 
 #![feature(plugin_registrar)]
 #![feature(box_syntax, rustc_private)]
+#![feature(macro_vis_matcher)]
 
 // Load rustc as a plugin to get macros
 #[macro_use]
diff --git a/src/test/compile-fail-fulldeps/auxiliary/lint_plugin_test.rs b/src/test/compile-fail-fulldeps/auxiliary/lint_plugin_test.rs
index 8647797270f..cbbfbd80603 100644
--- a/src/test/compile-fail-fulldeps/auxiliary/lint_plugin_test.rs
+++ b/src/test/compile-fail-fulldeps/auxiliary/lint_plugin_test.rs
@@ -12,6 +12,7 @@
 
 #![feature(plugin_registrar)]
 #![feature(box_syntax, rustc_private)]
+#![feature(macro_vis_matcher)]
 
 extern crate syntax;
 
diff --git a/src/test/compile-fail/const-eval-overflow.rs b/src/test/compile-fail/const-eval-overflow.rs
index 3c688d58fd1..058a8d0a1bd 100644
--- a/src/test/compile-fail/const-eval-overflow.rs
+++ b/src/test/compile-fail/const-eval-overflow.rs
@@ -82,7 +82,7 @@ const VALS_I64: (i64, i64, i64, i64) =
      );
 
 const VALS_U8: (u8, u8, u8, u8) =
-    ( //~ WARN constant evaluation error: attempt to subtract with overflow.
+    ( //~ WARN constant evaluation error: attempt to subtract with overflow
      -(u8::MIN as i8) as u8,
      u8::MIN - 1,
      //~^ ERROR constant evaluation error
@@ -96,7 +96,7 @@ const VALS_U8: (u8, u8, u8, u8) =
      );
 
 const VALS_U16: (u16, u16, u16, u16) =
-    ( //~ WARN constant evaluation error: attempt to subtract with overflow.
+    ( //~ WARN constant evaluation error: attempt to subtract with overflow
      -(u16::MIN as i16) as u16,
      u16::MIN - 1,
      //~^ ERROR constant evaluation error
@@ -110,7 +110,7 @@ const VALS_U16: (u16, u16, u16, u16) =
      );
 
 const VALS_U32: (u32, u32, u32, u32) =
-    ( //~ WARN constant evaluation error: attempt to subtract with overflow.
+    ( //~ WARN constant evaluation error: attempt to subtract with overflow
      -(u32::MIN as i32) as u32,
      u32::MIN - 1,
      //~^ ERROR constant evaluation error
@@ -124,7 +124,7 @@ const VALS_U32: (u32, u32, u32, u32) =
      );
 
 const VALS_U64: (u64, u64, u64, u64) =
-    ( //~ WARN constant evaluation error: attempt to subtract with overflow.
+    ( //~ WARN constant evaluation error: attempt to subtract with overflow
      -(u64::MIN as i64) as u64,
      u64::MIN - 1,
      //~^ ERROR constant evaluation error
diff --git a/src/test/run-pass-fulldeps/auxiliary/lint_for_crate.rs b/src/test/run-pass-fulldeps/auxiliary/lint_for_crate.rs
index fc53031e7f2..d3f921e0878 100644
--- a/src/test/run-pass-fulldeps/auxiliary/lint_for_crate.rs
+++ b/src/test/run-pass-fulldeps/auxiliary/lint_for_crate.rs
@@ -12,6 +12,7 @@
 
 #![feature(plugin_registrar, rustc_private)]
 #![feature(box_syntax)]
+#![feature(macro_vis_matcher)]
 
 #[macro_use] extern crate rustc;
 extern crate rustc_plugin;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/issue-40001-plugin.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/issue-40001-plugin.rs
index cf1a631937b..29b6cc012b3 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/issue-40001-plugin.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/issue-40001-plugin.rs
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 #![feature(box_syntax, plugin, plugin_registrar, rustc_private)]
+#![feature(macro_vis_matcher)]
 #![crate_type = "dylib"]
 
 #[macro_use]
diff --git a/src/test/ui-fulldeps/auxiliary/lint_group_plugin_test.rs b/src/test/ui-fulldeps/auxiliary/lint_group_plugin_test.rs
index 490aa0d4693..a0c72243d48 100644
--- a/src/test/ui-fulldeps/auxiliary/lint_group_plugin_test.rs
+++ b/src/test/ui-fulldeps/auxiliary/lint_group_plugin_test.rs
@@ -12,6 +12,7 @@
 
 #![feature(plugin_registrar)]
 #![feature(box_syntax, rustc_private)]
+#![feature(macro_vis_matcher)]
 
 // Load rustc as a plugin to get macros
 #[macro_use]
diff --git a/src/test/ui-fulldeps/auxiliary/lint_plugin_test.rs b/src/test/ui-fulldeps/auxiliary/lint_plugin_test.rs
index 8647797270f..cbbfbd80603 100644
--- a/src/test/ui-fulldeps/auxiliary/lint_plugin_test.rs
+++ b/src/test/ui-fulldeps/auxiliary/lint_plugin_test.rs
@@ -12,6 +12,7 @@
 
 #![feature(plugin_registrar)]
 #![feature(box_syntax, rustc_private)]
+#![feature(macro_vis_matcher)]
 
 extern crate syntax;
 
diff --git a/src/test/ui/const-eval/issue-43197.stderr b/src/test/ui/const-eval/issue-43197.stderr
index 5ff80060eac..58dedcfd9b1 100644
--- a/src/test/ui/const-eval/issue-43197.stderr
+++ b/src/test/ui/const-eval/issue-43197.stderr
@@ -1,4 +1,4 @@
-warning: constant evaluation error: attempt to subtract with overflow. This will become a HARD ERROR in the future
+warning: constant evaluation error: attempt to subtract with overflow
   --> $DIR/issue-43197.rs:18:20
    |
 18 |     const X: u32 = 0-1;
@@ -6,7 +6,7 @@ warning: constant evaluation error: attempt to subtract with overflow. This will
    |
    = note: #[warn(const_err)] on by default
 
-warning: constant evaluation error: attempt to subtract with overflow. This will become a HARD ERROR in the future
+warning: constant evaluation error: attempt to subtract with overflow
   --> $DIR/issue-43197.rs:19:20
    |
 19 |     const Y: u32 = foo(0-1);
diff --git a/src/test/ui/lint/suggestions.rs b/src/test/ui/lint/suggestions.rs
index e078056ab5e..bf2b5769bf8 100644
--- a/src/test/ui/lint/suggestions.rs
+++ b/src/test/ui/lint/suggestions.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![warn(unused_mut)] // UI tests pass `-A unused`—see Issue #43896
+#![warn(unused_mut, unused_parens)] // UI tests pass `-A unused`—see Issue #43896
 #![feature(no_debug)]
 
 #[no_mangle] static SHENZHOU: usize = 1; // should suggest `pub`
diff --git a/src/test/ui/lint/suggestions.stderr b/src/test/ui/lint/suggestions.stderr
index 7a498b56413..a0014666836 100644
--- a/src/test/ui/lint/suggestions.stderr
+++ b/src/test/ui/lint/suggestions.stderr
@@ -4,7 +4,11 @@ warning: unnecessary parentheses around assigned value
 30 |         let mut a = (1); // should suggest no `mut`, no parens
    |                     ^^^ help: remove these parentheses
    |
-   = note: #[warn(unused_parens)] on by default
+note: lint level defined here
+  --> $DIR/suggestions.rs:11:21
+   |
+11 | #![warn(unused_mut, unused_parens)] // UI tests pass `-A unused`—see Issue #43896
+   |                     ^^^^^^^^^^^^^
 
 warning: use of deprecated attribute `no_debug`: the `#[no_debug]` attribute was an experimental feature that has been deprecated due to lack of demand. See https://github.com/rust-lang/rust/issues/29721
   --> $DIR/suggestions.rs:27:1
@@ -25,7 +29,7 @@ warning: variable does not need to be mutable
 note: lint level defined here
   --> $DIR/suggestions.rs:11:9
    |
-11 | #![warn(unused_mut)] // UI tests pass `-A unused`—see Issue #43896
+11 | #![warn(unused_mut, unused_parens)] // UI tests pass `-A unused`—see Issue #43896
    |         ^^^^^^^^^^
 
 warning: static is marked #[no_mangle], but not exported
diff --git a/src/test/ui/lint/unused_parens_json_suggestion.rs b/src/test/ui/lint/unused_parens_json_suggestion.rs
index 9decb0cff36..15251795d5e 100644
--- a/src/test/ui/lint/unused_parens_json_suggestion.rs
+++ b/src/test/ui/lint/unused_parens_json_suggestion.rs
@@ -16,6 +16,8 @@
 // stripping away any starting or ending parenthesis characters—hence this
 // test of the JSON error format.
 
+#![warn(unused_parens)]
+
 fn main() {
     // We want to suggest the properly-balanced expression `1 / (2 + 3)`, not
     // the malformed `1 / (2 + 3`
diff --git a/src/test/ui/lint/unused_parens_json_suggestion.stderr b/src/test/ui/lint/unused_parens_json_suggestion.stderr
index 701334d8890..ae5b53da175 100644
--- a/src/test/ui/lint/unused_parens_json_suggestion.stderr
+++ b/src/test/ui/lint/unused_parens_json_suggestion.stderr
@@ -1 +1 @@
-{"message":"unnecessary parentheses around assigned value","code":null,"level":"warning","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":976,"byte_end":989,"line_start":22,"line_end":22,"column_start":14,"column_end":27,"is_primary":true,"text":[{"text":"    let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":27}],"label":null,"suggested_replacement":null,"expansion":null}],"children":[{"message":"#[warn(unused_parens)] on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":976,"byte_end":989,"line_start":22,"line_end":22,"column_start":14,"column_end":27,"is_primary":true,"text":[{"text":"    let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":27}],"label":null,"suggested_replacement":"1 / (2 + 3)","expansion":null}],"children":[],"rendered":null}],"rendered":null}
+{"message":"unnecessary parentheses around assigned value","code":null,"level":"warning","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":1001,"byte_end":1014,"line_start":24,"line_end":24,"column_start":14,"column_end":27,"is_primary":true,"text":[{"text":"    let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":27}],"label":null,"suggested_replacement":null,"expansion":null}],"children":[{"message":"lint level defined here","code":null,"level":"note","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":847,"byte_end":860,"line_start":19,"line_end":19,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":"#![warn(unused_parens)]","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"expansion":null}],"children":[],"rendered":null},{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":1001,"byte_end":1014,"line_start":24,"line_end":24,"column_start":14,"column_end":27,"is_primary":true,"text":[{"text":"    let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":27}],"label":null,"suggested_replacement":"1 / (2 + 3)","expansion":null}],"children":[],"rendered":null}],"rendered":null}
diff --git a/src/test/ui/path-lookahead.stderr b/src/test/ui/path-lookahead.stderr
index 19e22b3f6f9..059312b2851 100644
--- a/src/test/ui/path-lookahead.stderr
+++ b/src/test/ui/path-lookahead.stderr
@@ -4,7 +4,12 @@ warning: unnecessary parentheses around `return` value
 18 |   return (<T as ToString>::to_string(&arg)); //~WARN unnecessary parentheses around `return` value
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses
    |
-   = note: #[warn(unused_parens)] on by default
+note: lint level defined here
+  --> $DIR/path-lookahead.rs:13:9
+   |
+13 | #![warn(unused)]
+   |         ^^^^^^
+   = note: #[warn(unused_parens)] implied by #[warn(unused)]
 
 warning: function is never used: `with_parens`
   --> $DIR/path-lookahead.rs:17:1
diff --git a/src/tools/toolstate.toml b/src/tools/toolstate.toml
index da4d26d78da..9dd420c1458 100644
--- a/src/tools/toolstate.toml
+++ b/src/tools/toolstate.toml
@@ -26,7 +26,7 @@
 miri = "Broken"
 
 # ping @Manishearth @llogiq @mcarton @oli-obk
-clippy = "Compiling"
+clippy = "Broken"
 
 # ping @nrc
 rls = "Broken"