diff options
| author | Kivooeo <Kivooeo123@gmail.com> | 2025-05-06 15:06:45 +0500 |
|---|---|---|
| committer | Kivooeo <Kivooeo123@gmail.com> | 2025-05-06 23:02:47 +0500 |
| commit | 3c1c0726ad18dc07f3ef9b9465d5997ca13e332c (patch) | |
| tree | 26a7975d1de350e6328ad3e05f73c2fbd1d250a0 | |
| parent | 651e9cf327358b28db7e37a2ae61727f4a2ef232 (diff) | |
| download | rust-3c1c0726ad18dc07f3ef9b9465d5997ca13e332c.tar.gz rust-3c1c0726ad18dc07f3ef9b9465d5997ca13e332c.zip | |
added error handle for error code > 9999
| -rw-r--r-- | compiler/rustc_driver_impl/src/lib.rs | 1 | ||||
| -rw-r--r-- | tests/ui/explain/basic.rs (renamed from tests/ui/explain.rs) | 0 | ||||
| -rw-r--r-- | tests/ui/explain/basic.stdout (renamed from tests/ui/explain.stdout) | 0 | ||||
| -rw-r--r-- | tests/ui/explain/error-with-no-explanation.rs | 3 | ||||
| -rw-r--r-- | tests/ui/explain/error-with-no-explanation.stderr | 2 | ||||
| -rw-r--r-- | tests/ui/explain/invalid-error-code.rs | 2 | ||||
| -rw-r--r-- | tests/ui/explain/invalid-error-code.stderr | 2 | ||||
| -rw-r--r-- | tests/ui/explain/no-E-prefix.rs | 2 | ||||
| -rw-r--r-- | tests/ui/explain/no-E-prefix.stdout | 57 | ||||
| -rw-r--r-- | tests/ui/explain/overflow-error-code.rs | 4 | ||||
| -rw-r--r-- | tests/ui/explain/overflow-error-code.stderr | 2 |
11 files changed, 75 insertions, 0 deletions
diff --git a/compiler/rustc_driver_impl/src/lib.rs b/compiler/rustc_driver_impl/src/lib.rs index fdf8053b15a..95cfe221d3f 100644 --- a/compiler/rustc_driver_impl/src/lib.rs +++ b/compiler/rustc_driver_impl/src/lib.rs @@ -463,6 +463,7 @@ fn handle_explain(early_dcx: &EarlyDiagCtxt, registry: Registry, code: &str, col // Allow "E0123" or "0123" form. let upper_cased_code = code.to_ascii_uppercase(); if let Ok(code) = upper_cased_code.strip_prefix('E').unwrap_or(&upper_cased_code).parse::<u32>() + && code <= ErrCode::MAX_AS_U32 && let Ok(description) = registry.try_find_description(ErrCode::from_u32(code)) { let mut is_in_code_block = false; diff --git a/tests/ui/explain.rs b/tests/ui/explain/basic.rs index 1206c4f95eb..1206c4f95eb 100644 --- a/tests/ui/explain.rs +++ b/tests/ui/explain/basic.rs diff --git a/tests/ui/explain.stdout b/tests/ui/explain/basic.stdout index ef1d866c3ff..ef1d866c3ff 100644 --- a/tests/ui/explain.stdout +++ b/tests/ui/explain/basic.stdout diff --git a/tests/ui/explain/error-with-no-explanation.rs b/tests/ui/explain/error-with-no-explanation.rs new file mode 100644 index 00000000000..383820eb458 --- /dev/null +++ b/tests/ui/explain/error-with-no-explanation.rs @@ -0,0 +1,3 @@ +// It's a valid error with no added explanation +//@ compile-flags: --explain E9999 +//~? ERROR: E9999 is not a valid error code diff --git a/tests/ui/explain/error-with-no-explanation.stderr b/tests/ui/explain/error-with-no-explanation.stderr new file mode 100644 index 00000000000..afb738cfecb --- /dev/null +++ b/tests/ui/explain/error-with-no-explanation.stderr @@ -0,0 +1,2 @@ +error: E9999 is not a valid error code + diff --git a/tests/ui/explain/invalid-error-code.rs b/tests/ui/explain/invalid-error-code.rs new file mode 100644 index 00000000000..114118d5196 --- /dev/null +++ b/tests/ui/explain/invalid-error-code.rs @@ -0,0 +1,2 @@ +//@ compile-flags: --explain error_code +//~? ERROR: error_code is not a valid error code diff --git a/tests/ui/explain/invalid-error-code.stderr b/tests/ui/explain/invalid-error-code.stderr new file mode 100644 index 00000000000..c33122ea88c --- /dev/null +++ b/tests/ui/explain/invalid-error-code.stderr @@ -0,0 +1,2 @@ +error: error_code is not a valid error code + diff --git a/tests/ui/explain/no-E-prefix.rs b/tests/ui/explain/no-E-prefix.rs new file mode 100644 index 00000000000..39c9122bfe1 --- /dev/null +++ b/tests/ui/explain/no-E-prefix.rs @@ -0,0 +1,2 @@ +//@ compile-flags: --explain 425 +//@ check-pass diff --git a/tests/ui/explain/no-E-prefix.stdout b/tests/ui/explain/no-E-prefix.stdout new file mode 100644 index 00000000000..756b970aa7e --- /dev/null +++ b/tests/ui/explain/no-E-prefix.stdout @@ -0,0 +1,57 @@ +An unresolved name was used. + +Erroneous code examples: + +``` +something_that_doesnt_exist::foo; +// error: unresolved name `something_that_doesnt_exist::foo` + +// or: + +trait Foo { + fn bar() { + Self; // error: unresolved name `Self` + } +} + +// or: + +let x = unknown_variable; // error: unresolved name `unknown_variable` +``` + +Please verify that the name wasn't misspelled and ensure that the +identifier being referred to is valid for the given situation. Example: + +``` +enum something_that_does_exist { + Foo, +} +``` + +Or: + +``` +mod something_that_does_exist { + pub static foo : i32 = 0i32; +} + +something_that_does_exist::foo; // ok! +``` + +Or: + +``` +let unknown_variable = 12u32; +let x = unknown_variable; // ok! +``` + +If the item is not defined in the current module, it must be imported using a +`use` statement, like so: + +``` +use foo::bar; +bar(); +``` + +If the item you are importing is not defined in some super-module of the +current module, then it must also be declared as public (e.g., `pub fn`). diff --git a/tests/ui/explain/overflow-error-code.rs b/tests/ui/explain/overflow-error-code.rs new file mode 100644 index 00000000000..284d5cddb35 --- /dev/null +++ b/tests/ui/explain/overflow-error-code.rs @@ -0,0 +1,4 @@ +// Check that we don't crash on error codes exceeding our internal limit. +// issue: <https://github.com/rust-lang/rust/issues/140647> +//@ compile-flags: --explain E10000 +//~? ERROR: E10000 is not a valid error code diff --git a/tests/ui/explain/overflow-error-code.stderr b/tests/ui/explain/overflow-error-code.stderr new file mode 100644 index 00000000000..67e584ea32e --- /dev/null +++ b/tests/ui/explain/overflow-error-code.stderr @@ -0,0 +1,2 @@ +error: E10000 is not a valid error code + |
