diff options
| author | bors <bors@rust-lang.org> | 2015-10-23 16:53:40 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-10-23 16:53:40 +0000 |
| commit | 7ee4e9e7ec59c7db2d76fcb53719e5b31b43e499 (patch) | |
| tree | 4072b664d200bd0652a9257d0e72a31e1f48f7a4 | |
| parent | 9a855668fcc918071ecd1573abdeaccc6a99cbbb (diff) | |
| parent | 044a8fe6f6834afb3b159da7439c2740295157d3 (diff) | |
| download | rust-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.rs | 4 | ||||
| -rw-r--r-- | src/librustc_typeck/diagnostics.rs | 19 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-29184.rs | 13 |
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 +} |
