Auto merge of #149419 - matthiaskrgr:rollup-v3q93fq, r=matthiaskrgr
Rollup of 6 pull requests Successful merges: - rust-lang/rust#147952 (Add a timeout to the `remote-test-client` connection) - rust-lang/rust#149321 (Fix ICE when include_str! reads binary files) - rust-lang/rust#149398 (add regression test for issue rust-lang/rust#143987) - rust-lang/rust#149411 (Tidying up UI tests [5/N]) - rust-lang/rust#149413 (add test for issue 143821) - rust-lang/rust#149415 (Remove test-float-parse from workspace list in tidy) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
cc3eee7fbe
46 changed files with 258 additions and 151 deletions
|
|
@ -130,6 +130,13 @@ pub fn utf8_error<E: EmissionGuarantee>(
|
|||
};
|
||||
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),
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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<PathBuf>) {
|
||||
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<Pat
|
|||
}
|
||||
|
||||
// Wait for the emulator to come online
|
||||
loop {
|
||||
let timeout = connect_timeout();
|
||||
let mut successful_read = false;
|
||||
let start_time = Instant::now();
|
||||
while start_time.elapsed() < timeout {
|
||||
let dur = Duration::from_millis(2000);
|
||||
if let Ok(mut client) = TcpStream::connect(&device_address) {
|
||||
t!(client.set_read_timeout(Some(dur)));
|
||||
|
|
@ -77,12 +95,17 @@ fn spawn_emulator(target: &str, server: &Path, tmpdir: &Path, rootfs: Option<Pat
|
|||
if client.write_all(b"ping").is_ok() {
|
||||
let mut b = [0; 4];
|
||||
if client.read_exact(&mut b).is_ok() {
|
||||
successful_read = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
thread::sleep(dur);
|
||||
}
|
||||
|
||||
if !successful_read {
|
||||
panic!("Gave up trying to connect to test device at {device_address} after {timeout:?}");
|
||||
}
|
||||
}
|
||||
|
||||
fn start_android_emulator(server: &Path) {
|
||||
|
|
|
|||
|
|
@ -8,3 +8,18 @@ fn test_help() {
|
|||
let stdout = String::from_utf8(output.stdout.clone()).unwrap();
|
||||
assert!(stdout.trim().starts_with("Usage:"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_timeout() {
|
||||
let mut cmd = assert_cmd::cargo::cargo_bin_cmd!();
|
||||
cmd.env("TEST_DEVICE_CONNECT_TIMEOUT_SECONDS", "1");
|
||||
cmd.env("TEST_DEVICE_ADDR", "127.69.69.69:6969");
|
||||
cmd.args(["spawn-emulator", "dummy-target", "dummy-server", "dummy-tmpdir"]);
|
||||
|
||||
let assert = cmd.assert().failure();
|
||||
let output = assert.get_output();
|
||||
|
||||
let stderr = String::from_utf8(output.stderr.clone()).unwrap();
|
||||
let pass_msg = "Gave up trying to connect to test device";
|
||||
assert!(stderr.contains(pass_msg), "Could not find `{pass_msg}` in `{stderr}`");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -168,12 +168,6 @@ pub(crate) const WORKSPACES: &[WorkspaceInfo<'static>] = &[
|
|||
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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 <https://github.com/rust-lang/rust/pull/45853>.
|
||||
|
||||
## `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 = <S as Tr>::A::f<u8>;`. 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).
|
||||
|
|
|
|||
30
tests/ui/attributes/align-on-fields-143987.rs
Normal file
30
tests/ui/attributes/align-on-fields-143987.rs
Normal file
|
|
@ -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() {}
|
||||
33
tests/ui/attributes/align-on-fields-143987.stderr
Normal file
33
tests/ui/attributes/align-on-fields-143987.stderr
Normal file
|
|
@ -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`.
|
||||
39
tests/ui/borrowck/nested-closure-with-generic-ice.rs
Normal file
39
tests/ui/borrowck/nested-closure-with-generic-ice.rs
Normal file
|
|
@ -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: 'static>(_: &()) -> &T {
|
||||
loop {}
|
||||
}
|
||||
|
||||
fn register<T, F>(f: F) -> IfaceToken<T>
|
||||
where
|
||||
T: 'static,
|
||||
F: FnOnce(&()),
|
||||
{
|
||||
loop {}
|
||||
}
|
||||
|
||||
fn method_with_cr_async<CB>(cb: CB)
|
||||
where
|
||||
CB: Fn(),
|
||||
{
|
||||
loop {}
|
||||
}
|
||||
|
||||
struct IfaceToken<T: 'static>(T);
|
||||
|
||||
fn foo<T>() -> IfaceToken<T> {
|
||||
register::<T, _>(|b: &()| {
|
||||
method_with_cr_async(|| {
|
||||
data_::<T>(&());
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
struct A();
|
||||
|
||||
fn main() {
|
||||
foo::<A>();
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
//@ check-pass
|
||||
// regression test for #40235
|
||||
#![allow(unused_variables)]
|
||||
fn foo() {}
|
||||
|
||||
BIN
tests/ui/include-macros/invalid-utf8-binary-file.bin
Normal file
BIN
tests/ui/include-macros/invalid-utf8-binary-file.bin
Normal file
Binary file not shown.
10
tests/ui/include-macros/invalid-utf8-binary-file.rs
Normal file
10
tests/ui/include-macros/invalid-utf8-binary-file.rs
Normal file
|
|
@ -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 <https://github.com/rust-lang/rust/issues/149304>
|
||||
|
||||
#![doc = include_str!(concat!(env!("INVALID_UTF8_BIN")))] //~ ERROR: wasn't a utf-8 file
|
||||
|
||||
fn main() {}
|
||||
10
tests/ui/include-macros/invalid-utf8-binary-file.stderr
Normal file
10
tests/ui/include-macros/invalid-utf8-binary-file.stderr
Normal file
|
|
@ -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
|
||||
|
||||
|
|
@ -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!();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -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 };
|
||||
|
|
@ -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
|
||||
|
|
@ -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 {
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
mod foo;
|
||||
fn main() {}
|
||||
|
||||
//~? ERROR file not found for module `missing`
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
mod foo_inline;
|
||||
fn main() {}
|
||||
|
||||
//~? ERROR file not found for module `missing`
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
//@ ignore-auxiliary (used by `./missing_non_modrs_mod.rs`)
|
||||
|
||||
// looking for a file which does not exist.
|
||||
mod missing;
|
||||
|
|
@ -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;
|
||||
}
|
||||
5
tests/ui/modules/missing_non_modrs_mod.rs
Normal file
5
tests/ui/modules/missing_non_modrs_mod.rs
Normal file
|
|
@ -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`
|
||||
|
|
@ -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
|
||||
5
tests/ui/modules/missing_non_modrs_mod_inline.rs
Normal file
5
tests/ui/modules/missing_non_modrs_mod_inline.rs
Normal file
|
|
@ -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`
|
||||
|
|
@ -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
|
||||
|
|
@ -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 }
|
||||
|
|
|
|||
5
tests/ui/modules/mod_file_disambig.rs
Normal file
5
tests/ui/modules/mod_file_disambig.rs
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
//! related issue <https://github.com/rust-lang/rust/issues/4116>
|
||||
|
||||
mod mod_file_disambig_aux; //~ ERROR file for module `mod_file_disambig_aux` found at both
|
||||
|
||||
fn main() {}
|
||||
11
tests/ui/modules/mod_file_disambig.stderr
Normal file
11
tests/ui/modules/mod_file_disambig.stderr
Normal file
|
|
@ -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`.
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
//@ ignore-auxiliary (used by `./mod_file_correct_spans.rs`)
|
||||
|
||||
pub fn foo() -> isize { 10 }
|
||||
|
|
@ -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`
|
||||
}
|
||||
|
|
@ -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`.
|
||||
|
|
@ -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<T>() {}
|
||||
}
|
||||
|
||||
type A = <S as Tr>::A::f<u8>;
|
||||
//~^ ERROR ambiguous associated type
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
error[E0223]: ambiguous associated type
|
||||
--> $DIR/qualified-path-params-2.rs:18:10
|
||||
|
|
||||
LL | type A = <S as Tr>::A::f<u8>;
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: if there were a trait named `Example` with associated type `f` implemented for `<S as Tr>::A`, you could use the fully-qualified path
|
||||
|
|
||||
LL - type A = <S as Tr>::A::f<u8>;
|
||||
LL + type A = <<S as Tr>::A as Example>::f<u8>;
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0223`.
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
error[E0533]: expected unit struct, unit variant or constant, found associated function `<<S as Tr>::A>::f<u8>`
|
||||
--> $DIR/qualified-path-params.rs:20:9
|
||||
|
|
||||
LL | <S as Tr>::A::f::<u8> => {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ 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 ..= <S as Tr>::A::f::<u8> => {}
|
||||
| - ^^^^^^^^^^^^^^^^^^^^^ this is of type `fn() {S::f::<u8>}` 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`.
|
||||
|
|
@ -15,11 +15,14 @@ impl S {
|
|||
fn f<T>() {}
|
||||
}
|
||||
|
||||
type A = <S as Tr>::A::f<u8>;
|
||||
//~^ ERROR ambiguous associated type
|
||||
|
||||
fn main() {
|
||||
match 10 {
|
||||
<S as Tr>::A::f::<u8> => {}
|
||||
//~^ ERROR expected unit struct, unit variant or constant, found associated function
|
||||
0 ..= <S as Tr>::A::f::<u8> => {}
|
||||
0..=<S as Tr>::A::f::<u8> => {}
|
||||
//~^ ERROR only `char` and numeric types are allowed in range
|
||||
}
|
||||
}
|
||||
30
tests/ui/typeck/qualified-path-params.stderr
Normal file
30
tests/ui/typeck/qualified-path-params.stderr
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
error[E0223]: ambiguous associated type
|
||||
--> $DIR/qualified-path-params.rs:18:10
|
||||
|
|
||||
LL | type A = <S as Tr>::A::f<u8>;
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: if there were a trait named `Example` with associated type `f` implemented for `<S as Tr>::A`, you could use the fully-qualified path
|
||||
|
|
||||
LL - type A = <S as Tr>::A::f<u8>;
|
||||
LL + type A = <<S as Tr>::A as Example>::f<u8>;
|
||||
|
|
||||
|
||||
error[E0533]: expected unit struct, unit variant or constant, found associated function `<<S as Tr>::A>::f<u8>`
|
||||
--> $DIR/qualified-path-params.rs:23:9
|
||||
|
|
||||
LL | <S as Tr>::A::f::<u8> => {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ 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..=<S as Tr>::A::f::<u8> => {}
|
||||
| - ^^^^^^^^^^^^^^^^^^^^^ this is of type `fn() {S::f::<u8>}` 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`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue