about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-10-23 16:53:40 +0000
committerbors <bors@rust-lang.org>2015-10-23 16:53:40 +0000
commit7ee4e9e7ec59c7db2d76fcb53719e5b31b43e499 (patch)
tree4072b664d200bd0652a9257d0e72a31e1f48f7a4
parent9a855668fcc918071ecd1573abdeaccc6a99cbbb (diff)
parent044a8fe6f6834afb3b159da7439c2740295157d3 (diff)
downloadrust-7ee4e9e7ec59c7db2d76fcb53719e5b31b43e499.tar.gz
rust-7ee4e9e7ec59c7db2d76fcb53719e5b31b43e499.zip
Auto merge of #29243 - skeleten:issue-29184, r=alexcrichton
Fixes #29184 

This adds an error message for the use of the reserved `typeof` keyword, instead of reporting an ICE.
Also adds a `compile-fail` test.

I chose to add a `span_err` instead of removing to parser code, as to preserve the reservation of `typeof`.
-rw-r--r--src/librustc_typeck/astconv.rs4
-rw-r--r--src/librustc_typeck/diagnostics.rs19
-rw-r--r--src/test/compile-fail/issue-29184.rs13
3 files changed, 35 insertions, 1 deletions
diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs
index 299b6be9951..30a99ca9dad 100644
--- a/src/librustc_typeck/astconv.rs
+++ b/src/librustc_typeck/astconv.rs
@@ -1703,7 +1703,9 @@ pub fn ast_ty_to_ty<'tcx>(this: &AstConv<'tcx>,
             }
         }
         hir::TyTypeof(ref _e) => {
-            tcx.sess.span_bug(ast_ty.span, "typeof is reserved but unimplemented");
+            span_err!(tcx.sess, ast_ty.span, E0516,
+                  "`typeof` is a reserved keyword but unimplemented");
+            tcx.types.err
         }
         hir::TyInfer => {
             // TyInfer also appears as the type of arguments or return
diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs
index 1c07d118f94..6eafb9f5e94 100644
--- a/src/librustc_typeck/diagnostics.rs
+++ b/src/librustc_typeck/diagnostics.rs
@@ -3330,6 +3330,25 @@ extern "platform-intrinsic" {
 ```
 "##,
 
+E0516: r##"
+The `typeof` keyword is currently reserved but unimplemented.
+Erroneous code example:
+
+```
+fn main() {
+    let x: typeof(92) = 92;
+}
+```
+
+Try using type inference instead. Example:
+
+```
+fn main() {
+    let x = 92;
+}
+```
+"##,
+
 }
 
 register_diagnostics! {
diff --git a/src/test/compile-fail/issue-29184.rs b/src/test/compile-fail/issue-29184.rs
new file mode 100644
index 00000000000..98fe12c1b9d
--- /dev/null
+++ b/src/test/compile-fail/issue-29184.rs
@@ -0,0 +1,13 @@
+// Copyright 2012 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+fn main() {
+    let x: typeof(92) = 92; //~ ERROR `typeof` is a reserved keyword
+}