Skip to content

Commit 3c1c072

Browse files
committed
added error handle for error code > 9999
1 parent 651e9cf commit 3c1c072

11 files changed

+75
-0
lines changed

compiler/rustc_driver_impl/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ fn handle_explain(early_dcx: &EarlyDiagCtxt, registry: Registry, code: &str, col
463463
// Allow "E0123" or "0123" form.
464464
let upper_cased_code = code.to_ascii_uppercase();
465465
if let Ok(code) = upper_cased_code.strip_prefix('E').unwrap_or(&upper_cased_code).parse::<u32>()
466+
&& code <= ErrCode::MAX_AS_U32
466467
&& let Ok(description) = registry.try_find_description(ErrCode::from_u32(code))
467468
{
468469
let mut is_in_code_block = false;
File renamed without changes.
File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// It's a valid error with no added explanation
2+
//@ compile-flags: --explain E9999
3+
//~? ERROR: E9999 is not a valid error code
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
error: E9999 is not a valid error code
2+
+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
//@ compile-flags: --explain error_code
2+
//~? ERROR: error_code is not a valid error code
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
error: error_code is not a valid error code
2+

tests/ui/explain/no-E-prefix.rs

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
//@ compile-flags: --explain 425
2+
//@ check-pass

tests/ui/explain/no-E-prefix.stdout

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
An unresolved name was used.
2+
3+
Erroneous code examples:
4+
5+
```
6+
something_that_doesnt_exist::foo;
7+
// error: unresolved name `something_that_doesnt_exist::foo`
8+
9+
// or:
10+
11+
trait Foo {
12+
fn bar() {
13+
Self; // error: unresolved name `Self`
14+
}
15+
}
16+
17+
// or:
18+
19+
let x = unknown_variable; // error: unresolved name `unknown_variable`
20+
```
21+
22+
Please verify that the name wasn't misspelled and ensure that the
23+
identifier being referred to is valid for the given situation. Example:
24+
25+
```
26+
enum something_that_does_exist {
27+
Foo,
28+
}
29+
```
30+
31+
Or:
32+
33+
```
34+
mod something_that_does_exist {
35+
pub static foo : i32 = 0i32;
36+
}
37+
38+
something_that_does_exist::foo; // ok!
39+
```
40+
41+
Or:
42+
43+
```
44+
let unknown_variable = 12u32;
45+
let x = unknown_variable; // ok!
46+
```
47+
48+
If the item is not defined in the current module, it must be imported using a
49+
`use` statement, like so:
50+
51+
```
52+
use foo::bar;
53+
bar();
54+
```
55+
56+
If the item you are importing is not defined in some super-module of the
57+
current module, then it must also be declared as public (e.g., `pub fn`).
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// Check that we don't crash on error codes exceeding our internal limit.
2+
// issue: <https://github.com/rust-lang/rust/issues/140647>
3+
//@ compile-flags: --explain E10000
4+
//~? ERROR: E10000 is not a valid error code
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
error: E10000 is not a valid error code
2+

0 commit comments

Comments
 (0)