diff --git a/compiler/rustc_parse/src/lib.rs b/compiler/rustc_parse/src/lib.rs index edec44ca95019..0992bee32f326 100644 --- a/compiler/rustc_parse/src/lib.rs +++ b/compiler/rustc_parse/src/lib.rs @@ -130,6 +130,13 @@ pub fn utf8_error( }; let contents = String::from_utf8_lossy(contents).to_string(); let source = sm.new_source_file(PathBuf::from(path).into(), contents); + + // Avoid out-of-bounds span from lossy UTF-8 conversion. + if start as u32 > source.normalized_source_len.0 { + err.note(note); + return; + } + let span = Span::with_root_ctxt( source.normalized_byte_pos(start as u32), source.normalized_byte_pos(start as u32), diff --git a/src/doc/rustc-dev-guide/src/tests/running.md b/src/doc/rustc-dev-guide/src/tests/running.md index 48ce9d8ad185b..74bcc01e28c14 100644 --- a/src/doc/rustc-dev-guide/src/tests/running.md +++ b/src/doc/rustc-dev-guide/src/tests/running.md @@ -321,6 +321,10 @@ Tests are built on the machine running `x` not on the remote machine. Tests which fail to build unexpectedly (or `ui` tests producing incorrect build output) may fail without ever running on the remote machine. +There is a default timeout of 30 minutes in case the `remote-test-server` +cannot be reached by the `x` command. This timeout can be modified by using the +`TEST_DEVICE_CONNECT_TIMEOUT_SECONDS` environment variable. + ## Testing on emulators Some platforms are tested via an emulator for architectures that aren't readily available. diff --git a/src/tools/remote-test-client/src/main.rs b/src/tools/remote-test-client/src/main.rs index b9741431b5034..21043f0994574 100644 --- a/src/tools/remote-test-client/src/main.rs +++ b/src/tools/remote-test-client/src/main.rs @@ -11,12 +11,16 @@ use std::io::{self, BufWriter}; use std::net::TcpStream; use std::path::{Path, PathBuf}; use std::process::{Command, Stdio}; -use std::time::Duration; +use std::time::{Duration, Instant}; use std::{env, thread}; const REMOTE_ADDR_ENV: &str = "TEST_DEVICE_ADDR"; const DEFAULT_ADDR: &str = "127.0.0.1:12345"; +const CONNECT_TIMEOUT_ENV: &str = "TEST_DEVICE_CONNECT_TIMEOUT_SECONDS"; +/// The default timeout is high to not break slow CI or slow device starts. +const DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_mins(30); + macro_rules! t { ($e:expr) => { match $e { @@ -56,6 +60,17 @@ fn main() { } } +fn connect_timeout() -> Duration { + match env::var(CONNECT_TIMEOUT_ENV).ok() { + Some(timeout) => timeout.parse().map(Duration::from_secs).unwrap_or_else(|e| { + panic!( + "error: parsing `{CONNECT_TIMEOUT_ENV}` value \"{timeout}\" as seconds failed: {e}" + ) + }), + None => DEFAULT_CONNECT_TIMEOUT, + } +} + fn spawn_emulator(target: &str, server: &Path, tmpdir: &Path, rootfs: Option) { let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or(DEFAULT_ADDR.to_string()); @@ -69,7 +84,10 @@ fn spawn_emulator(target: &str, server: &Path, tmpdir: &Path, rootfs: Option] = &[ crates_and_deps: None, submodules: &["src/tools/rustc-perf"], }, - WorkspaceInfo { - path: "src/tools/test-float-parse", - exceptions: EXCEPTIONS, - crates_and_deps: None, - submodules: &[], - }, WorkspaceInfo { path: "tests/run-make-cargo/uefi-qemu/uefi_qemu_test", exceptions: EXCEPTIONS_UEFI_QEMU_TEST, diff --git a/src/tools/tidy/src/ui_tests.rs b/src/tools/tidy/src/ui_tests.rs index 45c2e76d1c1c0..bf51810810a6c 100644 --- a/src/tools/tidy/src/ui_tests.rs +++ b/src/tools/tidy/src/ui_tests.rs @@ -157,6 +157,7 @@ fn check_unexpected_extension(check: &mut RunningCheck, file_path: &Path, ext: & "tests/ui/crate-loading/auxiliary/libfoo.rlib", // testing loading a manually created rlib "tests/ui/include-macros/data.bin", // testing including data with the include macros "tests/ui/include-macros/file.txt", // testing including data with the include macros + "tests/ui/include-macros/invalid-utf8-binary-file.bin", // testing including data with the include macros "tests/ui/macros/macro-expanded-include/file.txt", // testing including data with the include macros "tests/ui/macros/not-utf8.bin", // testing including data with the include macros "tests/ui/macros/syntax-extension-source-utils-files/includeme.fragment", // more include diff --git a/tests/ui/README.md b/tests/ui/README.md index 6cec5a27d21ce..11003bbef9928 100644 --- a/tests/ui/README.md +++ b/tests/ui/README.md @@ -891,12 +891,6 @@ Exercise *Link-Time Optimization* (LTO), involving the flags `-C lto` or `-Z thi Tests on changes to inference variable lattice LUB/GLB, see . -## `tests/ui/macro_backtrace/`: `-Zmacro-backtrace` - -Contains a single test, checking the unstable command-line flag to enable detailed macro backtraces. - -**FIXME**: This could be merged with `ui/macros`, which already contains other macro backtrace tests. - ## `tests/ui/macros/` Broad category of tests on macros. @@ -945,12 +939,6 @@ Something is missing which could be added to fix (e.g. suggestions). **FIXME**: this is way too vague, tests should be rehomed. -## `tests/ui/missing_non_modrs_mod/` - -This directory is a small tree of `mod` dependencies, but the root, `foo.rs`, is looking for a file which does not exist. The test checks that the error is reported at the top-level module. - -**FIXME**: Merge with `tests/ui/modules/`. - ## `tests/ui/missing-trait-bounds/` Tests for checking missing trait bounds, and their diagnostics. @@ -963,10 +951,6 @@ Tests on the module system. **FIXME**: `tests/ui/imports/` should probably be merged with this. -## `tests/ui/modules_and_files_visibility/` - -**FIXME**: Merge with `tests/ui/modules/`. - ## `tests/ui/moves` Tests on moves (destructive moves). @@ -1135,12 +1119,6 @@ A large category about function and type public/private visibility, and its impa **FIXME**: merge with `tests/ui/privacy/`. -## `tests/ui/qualified/` - -Contains few tests on qualified paths where a type parameter is provided at the end: `type A = ::A::f;`. The tests check if this fails during type checking, not parsing. - -**FIXME**: Should be rehomed to `ui/typeck`. - ## `tests/ui/query-system/` Tests on Rust methods and functions which use the query system, such as `std::mem::size_of`. These compute information about the current runtime and return it. See [Query system | rustc-dev-guide](https://rustc-dev-guide.rust-lang.org/query.html). @@ -1583,12 +1561,6 @@ Tests on various well-formedness checks, e.g. [Type-checking normal functions](h Tests on `where` clauses. See [Where clauses | Reference](https://doc.rust-lang.org/reference/items/generics.html#where-clauses). -## `tests/ui/while/` - -Tests on the `while` keyword and the `while` construct. - -**FIXME**: merge with `ui/for-loop-while`. - ## `tests/ui/windows-subsystem/`: `#![windows_subsystem = ""]` See [the `windows_subsystem` attribute](https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute). diff --git a/tests/ui/attributes/align-on-fields-143987.rs b/tests/ui/attributes/align-on-fields-143987.rs new file mode 100644 index 0000000000000..7abd61a264995 --- /dev/null +++ b/tests/ui/attributes/align-on-fields-143987.rs @@ -0,0 +1,30 @@ +// Regression test for issue https://github.com/rust-lang/rust/issues/143987 +// Ensure that using `#[align]` on struct fields produces an error +// instead of causing an ICE (Internal Compiler Error) + +// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity +#![feature(rustc_attrs)] +#![feature(fn_align)] + +struct Data { + #[rustc_align(8)] //~ ERROR `#[rustc_align]` attribute cannot be used on struct fields + x: usize, +} + +// Test with invalid type to match the original issue more closely +struct DataInvalid { + #[rustc_align(8)] //~ ERROR `#[rustc_align]` attribute cannot be used on struct fields + x: usize8, //~ ERROR cannot find type `usize8` in this scope +} + +// Test with tuple struct +struct TupleData( + #[rustc_align(32)] //~ ERROR `#[rustc_align]` attribute cannot be used on struct fields + u32 +); + +// Test that it works correctly on functions (no error) +#[rustc_align(16)] +fn aligned_function() {} + +fn main() {} diff --git a/tests/ui/attributes/align-on-fields-143987.stderr b/tests/ui/attributes/align-on-fields-143987.stderr new file mode 100644 index 0000000000000..2356cdb1e5fb9 --- /dev/null +++ b/tests/ui/attributes/align-on-fields-143987.stderr @@ -0,0 +1,33 @@ +error[E0412]: cannot find type `usize8` in this scope + --> $DIR/align-on-fields-143987.rs:17:8 + | +LL | x: usize8, + | ^^^^^^ help: a builtin type with a similar name exists: `usize` + +error: `#[rustc_align]` attribute cannot be used on struct fields + --> $DIR/align-on-fields-143987.rs:10:5 + | +LL | #[rustc_align(8)] + | ^^^^^^^^^^^^^^^^^ + | + = help: `#[rustc_align]` can only be applied to functions + +error: `#[rustc_align]` attribute cannot be used on struct fields + --> $DIR/align-on-fields-143987.rs:16:5 + | +LL | #[rustc_align(8)] + | ^^^^^^^^^^^^^^^^^ + | + = help: `#[rustc_align]` can only be applied to functions + +error: `#[rustc_align]` attribute cannot be used on struct fields + --> $DIR/align-on-fields-143987.rs:22:5 + | +LL | #[rustc_align(32)] + | ^^^^^^^^^^^^^^^^^^ + | + = help: `#[rustc_align]` can only be applied to functions + +error: aborting due to 4 previous errors + +For more information about this error, try `rustc --explain E0412`. diff --git a/tests/ui/borrowck/nested-closure-with-generic-ice.rs b/tests/ui/borrowck/nested-closure-with-generic-ice.rs new file mode 100644 index 0000000000000..f0e308da38718 --- /dev/null +++ b/tests/ui/borrowck/nested-closure-with-generic-ice.rs @@ -0,0 +1,39 @@ +//@ check-pass +// Regression test for issue https://github.com/rust-lang/rust/issues/143821 +// Tests that we don't ICE when borrow-checking nested closures with generic type parameters +// and late-bound lifetime parameters. + +fn data_(_: &()) -> &T { + loop {} +} + +fn register(f: F) -> IfaceToken +where + T: 'static, + F: FnOnce(&()), +{ + loop {} +} + +fn method_with_cr_async(cb: CB) +where + CB: Fn(), +{ + loop {} +} + +struct IfaceToken(T); + +fn foo() -> IfaceToken { + register::(|b: &()| { + method_with_cr_async(|| { + data_::(&()); + }); + }) +} + +struct A(); + +fn main() { + foo::(); +} diff --git a/tests/ui/while/while-else-err.rs b/tests/ui/for-loop-while/while-else-err.rs similarity index 100% rename from tests/ui/while/while-else-err.rs rename to tests/ui/for-loop-while/while-else-err.rs diff --git a/tests/ui/while/while-else-err.stderr b/tests/ui/for-loop-while/while-else-err.stderr similarity index 100% rename from tests/ui/while/while-else-err.stderr rename to tests/ui/for-loop-while/while-else-err.stderr diff --git a/tests/ui/while/while-else-let-else-err.rs b/tests/ui/for-loop-while/while-else-let-else-err.rs similarity index 100% rename from tests/ui/while/while-else-let-else-err.rs rename to tests/ui/for-loop-while/while-else-let-else-err.rs diff --git a/tests/ui/while/while-else-let-else-err.stderr b/tests/ui/for-loop-while/while-else-let-else-err.stderr similarity index 100% rename from tests/ui/while/while-else-let-else-err.stderr rename to tests/ui/for-loop-while/while-else-let-else-err.stderr diff --git a/tests/ui/while/while-let-scope-issue-40235.rs b/tests/ui/for-loop-while/while-let-scope.rs similarity index 80% rename from tests/ui/while/while-let-scope-issue-40235.rs rename to tests/ui/for-loop-while/while-let-scope.rs index 7d5dfc64a9059..e72cc5bf0c357 100644 --- a/tests/ui/while/while-let-scope-issue-40235.rs +++ b/tests/ui/for-loop-while/while-let-scope.rs @@ -1,4 +1,5 @@ //@ check-pass +// regression test for #40235 #![allow(unused_variables)] fn foo() {} diff --git a/tests/ui/include-macros/invalid-utf8-binary-file.bin b/tests/ui/include-macros/invalid-utf8-binary-file.bin new file mode 100644 index 0000000000000..560c5cd2da237 Binary files /dev/null and b/tests/ui/include-macros/invalid-utf8-binary-file.bin differ diff --git a/tests/ui/include-macros/invalid-utf8-binary-file.rs b/tests/ui/include-macros/invalid-utf8-binary-file.rs new file mode 100644 index 0000000000000..0bbdbac611fd0 --- /dev/null +++ b/tests/ui/include-macros/invalid-utf8-binary-file.rs @@ -0,0 +1,10 @@ +//@ normalize-stderr: "at byte `\d+`" -> "at byte `$$BYTE`" +//@ normalize-stderr: "`[^`\n]*invalid-utf8-binary-file\.bin`" -> "`$DIR/invalid-utf8-binary-file.bin`" +//@ rustc-env:INVALID_UTF8_BIN={{src-base}}/include-macros/invalid-utf8-binary-file.bin + +//! Ensure that ICE does not occur when reading an invalid UTF8 file with an absolute path. +//! regression test for issue + +#![doc = include_str!(concat!(env!("INVALID_UTF8_BIN")))] //~ ERROR: wasn't a utf-8 file + +fn main() {} diff --git a/tests/ui/include-macros/invalid-utf8-binary-file.stderr b/tests/ui/include-macros/invalid-utf8-binary-file.stderr new file mode 100644 index 0000000000000..4ac4def1b00a1 --- /dev/null +++ b/tests/ui/include-macros/invalid-utf8-binary-file.stderr @@ -0,0 +1,10 @@ +error: `/invalid-utf8-binary-file.bin` wasn't a utf-8 file + --> $DIR/invalid-utf8-binary-file.rs:8:10 + | +LL | #![doc = include_str!(concat!(env!("INVALID_UTF8_BIN")))] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: invalid utf-8 at byte `$BYTE` + +error: aborting due to 1 previous error + diff --git a/tests/ui/macro_backtrace/auxiliary/ping.rs b/tests/ui/macros/auxiliary/ping.rs similarity index 71% rename from tests/ui/macro_backtrace/auxiliary/ping.rs rename to tests/ui/macros/auxiliary/ping.rs index 25b9efbc93ac9..d009acb02adb1 100644 --- a/tests/ui/macro_backtrace/auxiliary/ping.rs +++ b/tests/ui/macros/auxiliary/ping.rs @@ -1,30 +1,30 @@ -// Test that the macro backtrace facility works (supporting file) +// Test that the macro backtrace facility works (supporting macro-backtrace-complex.rs) // a non-local macro #[macro_export] macro_rules! ping { () => { pong!(); - } + }; } #[macro_export] macro_rules! deep { () => { foo!(); - } + }; } #[macro_export] macro_rules! foo { () => { bar!(); - } + }; } #[macro_export] macro_rules! bar { () => { ping!(); - } + }; } diff --git a/tests/ui/macro_backtrace/main.-Zmacro-backtrace.stderr b/tests/ui/macros/macro-backtrace-complex.-Zmacro-backtrace.stderr similarity index 94% rename from tests/ui/macro_backtrace/main.-Zmacro-backtrace.stderr rename to tests/ui/macros/macro-backtrace-complex.-Zmacro-backtrace.stderr index bf85a2d75db23..18df7f4a67849 100644 --- a/tests/ui/macro_backtrace/main.-Zmacro-backtrace.stderr +++ b/tests/ui/macros/macro-backtrace-complex.-Zmacro-backtrace.stderr @@ -1,5 +1,5 @@ error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error` - --> $DIR/main.rs:10:20 + --> $DIR/macro-backtrace-complex.rs:12:20 | LL | / macro_rules! pong { LL | | () => { syntax error }; @@ -11,7 +11,7 @@ LL | pong!(); | ------- in this macro invocation error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error` - --> $DIR/main.rs:10:20 + --> $DIR/macro-backtrace-complex.rs:12:20 | LL | / macro_rules! pong { LL | | () => { syntax error }; @@ -31,7 +31,7 @@ LL | pong!(); | ------- in this macro invocation (#2) error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error` - --> $DIR/main.rs:10:20 + --> $DIR/macro-backtrace-complex.rs:12:20 | LL | / macro_rules! pong { LL | | () => { syntax error }; diff --git a/tests/ui/macro_backtrace/main.default.stderr b/tests/ui/macros/macro-backtrace-complex.default.stderr similarity index 90% rename from tests/ui/macro_backtrace/main.default.stderr rename to tests/ui/macros/macro-backtrace-complex.default.stderr index 9ed4b3525e1d0..6aae85c1501ad 100644 --- a/tests/ui/macro_backtrace/main.default.stderr +++ b/tests/ui/macros/macro-backtrace-complex.default.stderr @@ -1,5 +1,5 @@ error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error` - --> $DIR/main.rs:10:20 + --> $DIR/macro-backtrace-complex.rs:12:20 | LL | () => { syntax error }; | ^^^^^ expected one of 8 possible tokens @@ -10,7 +10,7 @@ LL | pong!(); = note: this error originates in the macro `pong` (in Nightly builds, run with -Z macro-backtrace for more info) error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error` - --> $DIR/main.rs:10:20 + --> $DIR/macro-backtrace-complex.rs:12:20 | LL | () => { syntax error }; | ^^^^^ expected one of 8 possible tokens @@ -21,7 +21,7 @@ LL | ping!(); = note: this error originates in the macro `pong` which comes from the expansion of the macro `ping` (in Nightly builds, run with -Z macro-backtrace for more info) error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `error` - --> $DIR/main.rs:10:20 + --> $DIR/macro-backtrace-complex.rs:12:20 | LL | () => { syntax error }; | ^^^^^ expected one of 8 possible tokens diff --git a/tests/ui/macro_backtrace/main.rs b/tests/ui/macros/macro-backtrace-complex.rs similarity index 68% rename from tests/ui/macro_backtrace/main.rs rename to tests/ui/macros/macro-backtrace-complex.rs index e39cecb5938b4..3ab586f546531 100644 --- a/tests/ui/macro_backtrace/main.rs +++ b/tests/ui/macros/macro-backtrace-complex.rs @@ -1,9 +1,11 @@ -// Test that the macro backtrace facility works +// Test the unstable command-line flag (-Z macro-backtrace) to enable detailed macro backtraces +// across nested local and external macros. //@ aux-build:ping.rs //@ revisions: default -Zmacro-backtrace //@[-Zmacro-backtrace] compile-flags: -Z macro-backtrace -#[macro_use] extern crate ping; +#[macro_use] +extern crate ping; // a local macro macro_rules! pong { diff --git a/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod.rs b/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod.rs deleted file mode 100644 index b1ac0756688fe..0000000000000 --- a/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -mod foo; -fn main() {} - -//~? ERROR file not found for module `missing` diff --git a/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod_inline.rs b/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod_inline.rs deleted file mode 100644 index 987fe1166d74a..0000000000000 --- a/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod_inline.rs +++ /dev/null @@ -1,4 +0,0 @@ -mod foo_inline; -fn main() {} - -//~? ERROR file not found for module `missing` diff --git a/tests/ui/missing_non_modrs_mod/foo.rs b/tests/ui/modules/missing_mod.rs similarity index 62% rename from tests/ui/missing_non_modrs_mod/foo.rs rename to tests/ui/modules/missing_mod.rs index afdc5e39b84d2..5fc98998aca08 100644 --- a/tests/ui/missing_non_modrs_mod/foo.rs +++ b/tests/ui/modules/missing_mod.rs @@ -1,3 +1,3 @@ //@ ignore-auxiliary (used by `./missing_non_modrs_mod.rs`) - +// looking for a file which does not exist. mod missing; diff --git a/tests/ui/missing_non_modrs_mod/foo_inline.rs b/tests/ui/modules/missing_mod_inline.rs similarity index 69% rename from tests/ui/missing_non_modrs_mod/foo_inline.rs rename to tests/ui/modules/missing_mod_inline.rs index ed6d3a49101da..a6adcf9427164 100644 --- a/tests/ui/missing_non_modrs_mod/foo_inline.rs +++ b/tests/ui/modules/missing_mod_inline.rs @@ -1,5 +1,5 @@ //@ ignore-auxiliary (used by `./missing_non_modrs_mod_inline.rs`) - +// looking for a file which does not exist. mod inline { mod missing; } diff --git a/tests/ui/modules/missing_non_modrs_mod.rs b/tests/ui/modules/missing_non_modrs_mod.rs new file mode 100644 index 0000000000000..1ed3318ed5c91 --- /dev/null +++ b/tests/ui/modules/missing_non_modrs_mod.rs @@ -0,0 +1,5 @@ +//! Tests the error reporting when a declared module file is missing. +mod missing_mod; +fn main() {} + +//~? ERROR file not found for module `missing` diff --git a/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod.stderr b/tests/ui/modules/missing_non_modrs_mod.stderr similarity index 67% rename from tests/ui/missing_non_modrs_mod/missing_non_modrs_mod.stderr rename to tests/ui/modules/missing_non_modrs_mod.stderr index c084fbf00c26f..4717e35fdea1a 100644 --- a/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod.stderr +++ b/tests/ui/modules/missing_non_modrs_mod.stderr @@ -1,10 +1,10 @@ error[E0583]: file not found for module `missing` - --> $DIR/foo.rs:3:1 + --> $DIR/missing_mod.rs:3:1 | LL | mod missing; | ^^^^^^^^^^^^ | - = help: to create the module `missing`, create file "$DIR/foo/missing.rs" or "$DIR/foo/missing/mod.rs" + = help: to create the module `missing`, create file "$DIR/missing_mod/missing.rs" or "$DIR/missing_mod/missing/mod.rs" = note: if there is a `mod missing` elsewhere in the crate already, import it with `use crate::...` instead error: aborting due to 1 previous error diff --git a/tests/ui/modules/missing_non_modrs_mod_inline.rs b/tests/ui/modules/missing_non_modrs_mod_inline.rs new file mode 100644 index 0000000000000..f652519c76589 --- /dev/null +++ b/tests/ui/modules/missing_non_modrs_mod_inline.rs @@ -0,0 +1,5 @@ +//! Tests the error reporting when a declared module file is missing. +mod missing_mod_inline; +fn main() {} + +//~? ERROR file not found for module `missing` diff --git a/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod_inline.stderr b/tests/ui/modules/missing_non_modrs_mod_inline.stderr similarity index 63% rename from tests/ui/missing_non_modrs_mod/missing_non_modrs_mod_inline.stderr rename to tests/ui/modules/missing_non_modrs_mod_inline.stderr index 86193dd26e041..dfbba6bce8ef3 100644 --- a/tests/ui/missing_non_modrs_mod/missing_non_modrs_mod_inline.stderr +++ b/tests/ui/modules/missing_non_modrs_mod_inline.stderr @@ -1,10 +1,10 @@ error[E0583]: file not found for module `missing` - --> $DIR/foo_inline.rs:4:5 + --> $DIR/missing_mod_inline.rs:4:5 | LL | mod missing; | ^^^^^^^^^^^^ | - = help: to create the module `missing`, create file "$DIR/foo_inline/inline/missing.rs" or "$DIR/foo_inline/inline/missing/mod.rs" + = help: to create the module `missing`, create file "$DIR/missing_mod_inline/inline/missing.rs" or "$DIR/missing_mod_inline/inline/missing/mod.rs" = note: if there is a `mod missing` elsewhere in the crate already, import it with `use crate::...` instead error: aborting due to 1 previous error diff --git a/tests/ui/modules/mod_file_aux.rs b/tests/ui/modules/mod_file_aux.rs index eec38d189b4a8..9e2ec534eb169 100644 --- a/tests/ui/modules/mod_file_aux.rs +++ b/tests/ui/modules/mod_file_aux.rs @@ -1,3 +1,4 @@ -//@ ignore-auxiliary (used by `./mod_file_with_path_attr.rs` and `mod_file.rs`) +//@ ignore-auxiliary (used by `./mod_file_with_path_attr.rs` and `mod_file.rs` and `mod_file_correct_spans.rs`) +// ignore-tidy-linelength pub fn foo() -> isize { 10 } diff --git a/tests/ui/modules_and_files_visibility/mod_file_correct_spans.rs b/tests/ui/modules/mod_file_correct_spans.rs similarity index 100% rename from tests/ui/modules_and_files_visibility/mod_file_correct_spans.rs rename to tests/ui/modules/mod_file_correct_spans.rs diff --git a/tests/ui/modules_and_files_visibility/mod_file_correct_spans.stderr b/tests/ui/modules/mod_file_correct_spans.stderr similarity index 100% rename from tests/ui/modules_and_files_visibility/mod_file_correct_spans.stderr rename to tests/ui/modules/mod_file_correct_spans.stderr diff --git a/tests/ui/modules/mod_file_disambig.rs b/tests/ui/modules/mod_file_disambig.rs new file mode 100644 index 0000000000000..e87babf03ba7f --- /dev/null +++ b/tests/ui/modules/mod_file_disambig.rs @@ -0,0 +1,5 @@ +//! related issue + +mod mod_file_disambig_aux; //~ ERROR file for module `mod_file_disambig_aux` found at both + +fn main() {} diff --git a/tests/ui/modules/mod_file_disambig.stderr b/tests/ui/modules/mod_file_disambig.stderr new file mode 100644 index 0000000000000..60b5b468f4975 --- /dev/null +++ b/tests/ui/modules/mod_file_disambig.stderr @@ -0,0 +1,11 @@ +error[E0761]: file for module `mod_file_disambig_aux` found at both "$DIR/mod_file_disambig_aux.rs" and "$DIR/mod_file_disambig_aux/mod.rs" + --> $DIR/mod_file_disambig.rs:3:1 + | +LL | mod mod_file_disambig_aux; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = help: delete or rename one of them to remove the ambiguity + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0761`. diff --git a/tests/ui/modules_and_files_visibility/mod_file_disambig_aux.rs b/tests/ui/modules/mod_file_disambig_aux.rs similarity index 100% rename from tests/ui/modules_and_files_visibility/mod_file_disambig_aux.rs rename to tests/ui/modules/mod_file_disambig_aux.rs diff --git a/tests/ui/modules_and_files_visibility/mod_file_disambig_aux/compiletest-ignore-dir b/tests/ui/modules/mod_file_disambig_aux/compiletest-ignore-dir similarity index 100% rename from tests/ui/modules_and_files_visibility/mod_file_disambig_aux/compiletest-ignore-dir rename to tests/ui/modules/mod_file_disambig_aux/compiletest-ignore-dir diff --git a/tests/ui/modules_and_files_visibility/mod_file_disambig_aux/mod.rs b/tests/ui/modules/mod_file_disambig_aux/mod.rs similarity index 100% rename from tests/ui/modules_and_files_visibility/mod_file_disambig_aux/mod.rs rename to tests/ui/modules/mod_file_disambig_aux/mod.rs diff --git a/tests/ui/modules_and_files_visibility/mod_file_aux.rs b/tests/ui/modules_and_files_visibility/mod_file_aux.rs deleted file mode 100644 index 6fac8dae3d766..0000000000000 --- a/tests/ui/modules_and_files_visibility/mod_file_aux.rs +++ /dev/null @@ -1,3 +0,0 @@ -//@ ignore-auxiliary (used by `./mod_file_correct_spans.rs`) - -pub fn foo() -> isize { 10 } diff --git a/tests/ui/modules_and_files_visibility/mod_file_disambig.rs b/tests/ui/modules_and_files_visibility/mod_file_disambig.rs deleted file mode 100644 index 1483e3e4630c2..0000000000000 --- a/tests/ui/modules_and_files_visibility/mod_file_disambig.rs +++ /dev/null @@ -1,6 +0,0 @@ -mod mod_file_disambig_aux; //~ ERROR file for module `mod_file_disambig_aux` found at both - -fn main() { - assert_eq!(mod_file_aux::bar(), 10); - //~^ ERROR failed to resolve: use of unresolved module or unlinked crate `mod_file_aux` -} diff --git a/tests/ui/modules_and_files_visibility/mod_file_disambig.stderr b/tests/ui/modules_and_files_visibility/mod_file_disambig.stderr deleted file mode 100644 index e71a6de2fb9bc..0000000000000 --- a/tests/ui/modules_and_files_visibility/mod_file_disambig.stderr +++ /dev/null @@ -1,23 +0,0 @@ -error[E0761]: file for module `mod_file_disambig_aux` found at both "$DIR/mod_file_disambig_aux.rs" and "$DIR/mod_file_disambig_aux/mod.rs" - --> $DIR/mod_file_disambig.rs:1:1 - | -LL | mod mod_file_disambig_aux; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = help: delete or rename one of them to remove the ambiguity - -error[E0433]: failed to resolve: use of unresolved module or unlinked crate `mod_file_aux` - --> $DIR/mod_file_disambig.rs:4:16 - | -LL | assert_eq!(mod_file_aux::bar(), 10); - | ^^^^^^^^^^^^ use of unresolved module or unlinked crate `mod_file_aux` - | -help: to make use of source file $DIR/mod_file_aux.rs, use `mod mod_file_aux` in this file to declare the module - | -LL + mod mod_file_aux; - | - -error: aborting due to 2 previous errors - -Some errors have detailed explanations: E0433, E0761. -For more information about an error, try `rustc --explain E0433`. diff --git a/tests/ui/qualified/qualified-path-params-2.rs b/tests/ui/qualified/qualified-path-params-2.rs deleted file mode 100644 index d0cc1fa3d5172..0000000000000 --- a/tests/ui/qualified/qualified-path-params-2.rs +++ /dev/null @@ -1,21 +0,0 @@ -// Check that qualified paths with type parameters -// fail during type checking and not during parsing - -struct S; - -trait Tr { - type A; -} - -impl Tr for S { - type A = S; -} - -impl S { - fn f() {} -} - -type A = ::A::f; -//~^ ERROR ambiguous associated type - -fn main() {} diff --git a/tests/ui/qualified/qualified-path-params-2.stderr b/tests/ui/qualified/qualified-path-params-2.stderr deleted file mode 100644 index e70cdbdc3f49e..0000000000000 --- a/tests/ui/qualified/qualified-path-params-2.stderr +++ /dev/null @@ -1,15 +0,0 @@ -error[E0223]: ambiguous associated type - --> $DIR/qualified-path-params-2.rs:18:10 - | -LL | type A = ::A::f; - | ^^^^^^^^^^^^^^^^^^^ - | -help: if there were a trait named `Example` with associated type `f` implemented for `::A`, you could use the fully-qualified path - | -LL - type A = ::A::f; -LL + type A = <::A as Example>::f; - | - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0223`. diff --git a/tests/ui/qualified/qualified-path-params.stderr b/tests/ui/qualified/qualified-path-params.stderr deleted file mode 100644 index a49ed6c8f607a..0000000000000 --- a/tests/ui/qualified/qualified-path-params.stderr +++ /dev/null @@ -1,18 +0,0 @@ -error[E0533]: expected unit struct, unit variant or constant, found associated function `<::A>::f` - --> $DIR/qualified-path-params.rs:20:9 - | -LL | ::A::f:: => {} - | ^^^^^^^^^^^^^^^^^^^^^ not a unit struct, unit variant or constant - -error[E0029]: only `char` and numeric types are allowed in range patterns - --> $DIR/qualified-path-params.rs:22:15 - | -LL | 0 ..= ::A::f:: => {} - | - ^^^^^^^^^^^^^^^^^^^^^ this is of type `fn() {S::f::}` but it should be `char` or numeric - | | - | this is of type `{integer}` - -error: aborting due to 2 previous errors - -Some errors have detailed explanations: E0029, E0533. -For more information about an error, try `rustc --explain E0029`. diff --git a/tests/ui/qualified/qualified-path-params.rs b/tests/ui/typeck/qualified-path-params.rs similarity index 80% rename from tests/ui/qualified/qualified-path-params.rs rename to tests/ui/typeck/qualified-path-params.rs index e8a95a46010af..95bfc5d8fb80d 100644 --- a/tests/ui/qualified/qualified-path-params.rs +++ b/tests/ui/typeck/qualified-path-params.rs @@ -15,11 +15,14 @@ impl S { fn f() {} } +type A = ::A::f; +//~^ ERROR ambiguous associated type + fn main() { match 10 { ::A::f:: => {} //~^ ERROR expected unit struct, unit variant or constant, found associated function - 0 ..= ::A::f:: => {} + 0..=::A::f:: => {} //~^ ERROR only `char` and numeric types are allowed in range } } diff --git a/tests/ui/typeck/qualified-path-params.stderr b/tests/ui/typeck/qualified-path-params.stderr new file mode 100644 index 0000000000000..b79d883394db7 --- /dev/null +++ b/tests/ui/typeck/qualified-path-params.stderr @@ -0,0 +1,30 @@ +error[E0223]: ambiguous associated type + --> $DIR/qualified-path-params.rs:18:10 + | +LL | type A = ::A::f; + | ^^^^^^^^^^^^^^^^^^^ + | +help: if there were a trait named `Example` with associated type `f` implemented for `::A`, you could use the fully-qualified path + | +LL - type A = ::A::f; +LL + type A = <::A as Example>::f; + | + +error[E0533]: expected unit struct, unit variant or constant, found associated function `<::A>::f` + --> $DIR/qualified-path-params.rs:23:9 + | +LL | ::A::f:: => {} + | ^^^^^^^^^^^^^^^^^^^^^ not a unit struct, unit variant or constant + +error[E0029]: only `char` and numeric types are allowed in range patterns + --> $DIR/qualified-path-params.rs:25:13 + | +LL | 0..=::A::f:: => {} + | - ^^^^^^^^^^^^^^^^^^^^^ this is of type `fn() {S::f::}` but it should be `char` or numeric + | | + | this is of type `{integer}` + +error: aborting due to 3 previous errors + +Some errors have detailed explanations: E0029, E0223, E0533. +For more information about an error, try `rustc --explain E0029`.