diff options
| author | bors <bors@rust-lang.org> | 2021-09-17 06:47:35 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-09-17 06:47:35 +0000 |
| commit | 1c03f0d0ba4fee54b7aa458f4d3ad989d8bf7b34 (patch) | |
| tree | 535fc47baf233bb1a844d22916a3c086d6daab11 | |
| parent | 38e576423dc56a006ccf0b72e106f09bdea6efc2 (diff) | |
| parent | 4d5bcbe957fa2f9b47aba81484d47206de742f3d (diff) | |
| download | rust-1c03f0d0ba4fee54b7aa458f4d3ad989d8bf7b34.tar.gz rust-1c03f0d0ba4fee54b7aa458f4d3ad989d8bf7b34.zip | |
Auto merge of #89037 - JohnTitor:rollup-rd9btbs, r=JohnTitor
Rollup of 10 pull requests Successful merges: - #86382 (Make diagnostics clearer for `?` operators) - #87529 (Fix ICE in `improper_ctypes_definitions` lint with all-ZST transparent types) - #88339 (Add TcpListener::into_incoming and IntoIncoming) - #88735 (Don't lint about missing code examples in derived traits) - #88751 (Couple of changes to FileSearch and SearchPath) - #88883 (Move some tests to more reasonable directories - 7) - #88887 (Const Deref) - #88911 (Improve error message for type mismatch in generator arguments) - #89014 (PassWrapper: handle separate Module*SanitizerPass) - #89033 (Set the library path in sysroot-crates-are-unstable) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/link.rs | 8 | ||||
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/linker.rs | 3 | ||||
| -rw-r--r-- | compiler/rustc_driver/src/lib.rs | 5 | ||||
| -rw-r--r-- | compiler/rustc_errors/src/diagnostic.rs | 12 | ||||
| -rw-r--r-- | compiler/rustc_infer/src/infer/error_reporting/mod.rs | 19 | ||||
| -rw-r--r-- | compiler/rustc_lint/src/types.rs | 10 | ||||
| -rw-r--r-- | compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp | 8 | ||||
| -rw-r--r-- | compiler/rustc_session/src/filesearch.rs | 22 | ||||
| -rw-r--r-- | compiler/rustc_session/src/search_paths.rs | 22 | ||||
| -rw-r--r-- | compiler/rustc_session/src/session.rs | 30 | ||||
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs | 5 | ||||
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs | 33 | ||||
| -rw-r--r-- | library/alloc/src/borrow.rs | 6 | ||||
| -rw-r--r-- | library/core/src/mem/manually_drop.rs | 6 | ||||
| -rw-r--r-- | library/core/src/ops/deref.rs | 6 | ||||
| -rw-r--r-- | library/std/src/net/tcp.rs | 51 | ||||
| -rw-r--r-- | src/librustdoc/passes/doc_test_lints.rs | 1 | ||||
| -rw-r--r-- | src/test/run-make-fulldeps/sysroot-crates-are-unstable/test.py | 13 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/lint-missing-doc-code-example.rs | 9 | ||||
| -rw-r--r-- | src/test/ui/associated-types/issue-19883.rs (renamed from src/test/ui/issues/issue-19883.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/associated-types/issue-19883.stderr (renamed from src/test/ui/issues/issue-19883.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/associated-types/issue-21363.rs (renamed from src/test/ui/issues/issue-21363.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/async-await/auxiliary/issue-72470-lib.rs (renamed from src/test/ui/auxiliary/issue-72470-lib.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/async-await/issue-72470-llvm-dominate.rs (renamed from src/test/ui/issue-72470-llvm-dominate.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/closures/issue-78720.rs (renamed from src/test/ui/issues/issue-78720.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/closures/issue-78720.stderr (renamed from src/test/ui/issues/issue-78720.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/consts/issue-23833.rs (renamed from src/test/ui/issues/issue-23833.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/consts/issue-34784.rs (renamed from src/test/ui/issues/issue-34784.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/deriving/issue-3935.rs (renamed from src/test/ui/issues/issue-3935.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/generator/issue-88653.rs | 19 | ||||
| -rw-r--r-- | src/test/ui/generator/issue-88653.stderr | 12 | ||||
| -rw-r--r-- | src/test/ui/generics/mid-path-type-params.rs (renamed from src/test/ui/mid-path-type-params.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/impl-trait/type-arg-mismatch-due-to-impl-trait.rs (renamed from src/test/ui/issues/type-arg-mismatch-due-to-impl-trait.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/impl-trait/type-arg-mismatch-due-to-impl-trait.stderr (renamed from src/test/ui/issues/type-arg-mismatch-due-to-impl-trait.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/inference/issue-71309.rs | 7 | ||||
| -rw-r--r-- | src/test/ui/inference/issue-71309.stderr | 15 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-51632-try-desugar-incompatible-types.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-51632-try-desugar-incompatible-types.stderr | 3 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-5791.rs | 14 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-5791.stderr | 21 | ||||
| -rw-r--r-- | src/test/ui/lint/enable-unstable-lib-feature.rs (renamed from src/test/ui/enable-unstable-lib-feature.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/lint/enable-unstable-lib-feature.stderr (renamed from src/test/ui/enable-unstable-lib-feature.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/lint/issue-57410.rs (renamed from src/test/ui/issues/issue-57410.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/lint/issue-79744.rs (renamed from src/test/ui/issues/issue-79744.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/lint/issue-79744.stderr (renamed from src/test/ui/issues/issue-79744.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/llvm-asm/issue-37433.rs (renamed from src/test/ui/issues/issue-37433.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/llvm-asm/issue-37433.stderr (renamed from src/test/ui/issues/issue-37433.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/macros/auxiliary/define-macro.rs (renamed from src/test/ui/auxiliary/define-macro.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/macros/out-of-order-shadowing.rs (renamed from src/test/ui/out-of-order-shadowing.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/macros/out-of-order-shadowing.stderr (renamed from src/test/ui/out-of-order-shadowing.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/match/guards.rs (renamed from src/test/ui/guards.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/match/issue-33498.rs (renamed from src/test/ui/issues/issue-33498.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/match/issue-41255.rs (renamed from src/test/ui/issues/issue-41255.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/match/issue-41255.stderr (renamed from src/test/ui/issues/issue-41255.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/match/issue-56685.rs (renamed from src/test/ui/issues/issue-56685.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/match/issue-56685.stderr (renamed from src/test/ui/issues/issue-56685.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/never_type/expr-empty-ret.rs (renamed from src/test/ui/expr-empty-ret.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/polymorphization/issue-74614.rs (renamed from src/test/ui/issues/issue-74614.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/privacy/issue-79593.rs (renamed from src/test/ui/issues/issue-79593.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/privacy/issue-79593.stderr (renamed from src/test/ui/issues/issue-79593.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/repr/repr-transparent-issue-87496.rs | 12 | ||||
| -rw-r--r-- | src/test/ui/repr/repr-transparent-issue-87496.stderr | 16 | ||||
| -rw-r--r-- | src/test/ui/resolve/issue-42944.rs (renamed from src/test/ui/issues/issue-42944.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/resolve/issue-42944.stderr (renamed from src/test/ui/issues/issue-42944.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/resolve/use-self-in-inner-fn.rs (renamed from src/test/ui/use-self-in-inner-fn.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/resolve/use-self-in-inner-fn.stderr (renamed from src/test/ui/use-self-in-inner-fn.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/specialization/issue-35376.rs (renamed from src/test/ui/issues/issue-35376.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/specialization/issue-35376.stderr (renamed from src/test/ui/issues/issue-35376.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/static/issue-34194.rs (renamed from src/test/ui/issues/issue-34194.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/structs-enums/issue-38002.rs (renamed from src/test/ui/issues/issue-38002.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/symbol-names/issue-53912.rs (renamed from src/test/ui/issues/issue-53912.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/test-attrs/issue-36768.rs (renamed from src/test/ui/issues/issue-36768.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/thread-local/tls.rs (renamed from src/test/ui/tls.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/traits/bug-7183-generics.rs (renamed from src/test/ui/bug-7183-generics.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/traits/issue-20692.rs (renamed from src/test/ui/issues/issue-20692.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/traits/issue-20692.stderr (renamed from src/test/ui/issues/issue-20692.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/traits/issue-23825.rs (renamed from src/test/ui/issues/issue-23825.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.mir.stderr (renamed from src/test/ui/issues/issue-45107-unnecessary-unsafe-in-closure.mir.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.rs (renamed from src/test/ui/issues/issue-45107-unnecessary-unsafe-in-closure.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.thir.stderr (renamed from src/test/ui/issues/issue-45107-unnecessary-unsafe-in-closure.thir.stderr) | 0 | ||||
| -rw-r--r-- | src/tools/tidy/src/ui_tests.rs | 4 |
81 files changed, 283 insertions, 111 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index 4fb51ecc1d3..826c09cd948 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -637,7 +637,7 @@ fn link_dwarf_object<'a>(sess: &'a Session, executable_out_filename: &Path) { cmd.arg("-o"); cmd.arg(&dwp_out_filename); - let mut new_path = sess.host_filesearch(PathKind::All).get_tools_search_paths(false); + let mut new_path = sess.get_tools_search_paths(false); if let Some(path) = env::var_os("PATH") { new_path.extend(env::split_paths(&path)); } @@ -2555,8 +2555,7 @@ fn add_gcc_ld_path(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) { match ld_impl { LdImpl::Lld => { if sess.target.lld_flavor == LldFlavor::Ld64 { - let tools_path = - sess.host_filesearch(PathKind::All).get_tools_search_paths(false); + let tools_path = sess.get_tools_search_paths(false); let ld64_exe = tools_path .into_iter() .map(|p| p.join("gcc-ld")) @@ -2571,8 +2570,7 @@ fn add_gcc_ld_path(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) { arg }); } else { - let tools_path = - sess.host_filesearch(PathKind::All).get_tools_search_paths(false); + let tools_path = sess.get_tools_search_paths(false); let lld_path = tools_path .into_iter() .map(|p| p.join("gcc-ld")) diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs index 9e1c6a169f1..e3b0eea0d89 100644 --- a/compiler/rustc_codegen_ssa/src/back/linker.rs +++ b/compiler/rustc_codegen_ssa/src/back/linker.rs @@ -15,7 +15,6 @@ use rustc_middle::middle::dependency_format::Linkage; use rustc_middle::ty::TyCtxt; use rustc_serialize::{json, Encoder}; use rustc_session::config::{self, CrateType, DebugInfo, LinkerPluginLto, Lto, OptLevel, Strip}; -use rustc_session::search_paths::PathKind; use rustc_session::Session; use rustc_span::symbol::Symbol; use rustc_target::spec::{LinkOutputKind, LinkerFlavor, LldFlavor}; @@ -101,7 +100,7 @@ pub fn get_linker<'a>( // The compiler's sysroot often has some bundled tools, so add it to the // PATH for the child. - let mut new_path = sess.host_filesearch(PathKind::All).get_tools_search_paths(self_contained); + let mut new_path = sess.get_tools_search_paths(self_contained); let mut msvc_changed_path = false; if sess.target.is_like_msvc { if let Some(ref tool) = msvc_tool { diff --git a/compiler/rustc_driver/src/lib.rs b/compiler/rustc_driver/src/lib.rs index 53053327d0d..4c6a2baaef1 100644 --- a/compiler/rustc_driver/src/lib.rs +++ b/compiler/rustc_driver/src/lib.rs @@ -677,10 +677,7 @@ impl RustcDefaultCalls { println!("{}", targets.join("\n")); } Sysroot => println!("{}", sess.sysroot.display()), - TargetLibdir => println!( - "{}", - sess.target_tlib_path.as_ref().unwrap_or(&sess.host_tlib_path).dir.display() - ), + TargetLibdir => println!("{}", sess.target_tlib_path.dir.display()), TargetSpec => println!("{}", sess.target.to_json().pretty()), FileNames | CrateName => { let input = input.unwrap_or_else(|| { diff --git a/compiler/rustc_errors/src/diagnostic.rs b/compiler/rustc_errors/src/diagnostic.rs index 232cf4bdb7f..41a73268f46 100644 --- a/compiler/rustc_errors/src/diagnostic.rs +++ b/compiler/rustc_errors/src/diagnostic.rs @@ -74,6 +74,10 @@ impl DiagnosticStyledString { pub fn highlighted<S: Into<String>>(t: S) -> DiagnosticStyledString { DiagnosticStyledString(vec![StringPart::Highlighted(t.into())]) } + + pub fn content(&self) -> String { + self.0.iter().map(|x| x.content()).collect::<String>() + } } #[derive(Debug, PartialEq, Eq)] @@ -82,6 +86,14 @@ pub enum StringPart { Highlighted(String), } +impl StringPart { + pub fn content(&self) -> &str { + match self { + &StringPart::Normal(ref s) | &StringPart::Highlighted(ref s) => s, + } + } +} + impl Diagnostic { pub fn new(level: Level, message: &str) -> Self { Diagnostic::new_with_code(level, None, message) diff --git a/compiler/rustc_infer/src/infer/error_reporting/mod.rs b/compiler/rustc_infer/src/infer/error_reporting/mod.rs index 1139b714d0a..b8089b2499b 100644 --- a/compiler/rustc_infer/src/infer/error_reporting/mod.rs +++ b/compiler/rustc_infer/src/infer/error_reporting/mod.rs @@ -1971,6 +1971,8 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { trace: TypeTrace<'tcx>, terr: &TypeError<'tcx>, ) -> DiagnosticBuilder<'tcx> { + use crate::traits::ObligationCauseCode::MatchExpressionArm; + debug!("report_and_explain_type_error(trace={:?}, terr={:?})", trace, terr); let span = trace.cause.span(self.tcx); @@ -2013,6 +2015,19 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { _ => {} } } + if let MatchExpressionArm(box MatchExpressionArmCause { source, .. }) = + trace.cause.code + { + if let hir::MatchSource::TryDesugar = source { + if let Some((expected_ty, found_ty)) = self.values_str(trace.values) { + err.note(&format!( + "`?` operator cannot convert from `{}` to `{}`", + found_ty.content(), + expected_ty.content(), + )); + } + } + } err } FailureCode::Error0644(failure_str) => { @@ -2585,9 +2600,7 @@ impl<'tcx> ObligationCauseExt<'tcx> for ObligationCause<'tcx> { CompareImplTypeObligation { .. } => Error0308("type not compatible with trait"), MatchExpressionArm(box MatchExpressionArmCause { source, .. }) => { Error0308(match source { - hir::MatchSource::TryDesugar => { - "try expression alternatives have incompatible types" - } + hir::MatchSource::TryDesugar => "`?` operator has incompatible types", _ => "`match` arms have incompatible types", }) } diff --git a/compiler/rustc_lint/src/types.rs b/compiler/rustc_lint/src/types.rs index 0143978cfba..d35497c1b38 100644 --- a/compiler/rustc_lint/src/types.rs +++ b/compiler/rustc_lint/src/types.rs @@ -851,12 +851,18 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> { use FfiResult::*; if def.repr.transparent() { - // Can assume that only one field is not a ZST, so only check + // Can assume that at most one field is not a ZST, so only check // that field's type for FFI-safety. if let Some(field) = transparent_newtype_field(self.cx.tcx, variant) { self.check_field_type_for_ffi(cache, field, substs) } else { - bug!("malformed transparent type"); + // All fields are ZSTs; this means that the type should behave + // like (), which is FFI-unsafe + FfiUnsafe { + ty, + reason: "this struct contains only zero-sized fields".into(), + help: None, + } } } else { // We can't completely trust repr(C) markings; make sure the fields are diff --git a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp index b3f86f3295a..b7cad1c3ba6 100644 --- a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp +++ b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp @@ -875,7 +875,11 @@ LLVMRustOptimizeWithNewPassManager( #if LLVM_VERSION_GE(11, 0) OptimizerLastEPCallbacks.push_back( [Options](ModulePassManager &MPM, OptimizationLevel Level) { +#if LLVM_VERSION_GE(14, 0) + MPM.addPass(ModuleMemorySanitizerPass(Options)); +#else MPM.addPass(MemorySanitizerPass(Options)); +#endif MPM.addPass(createModuleToFunctionPassAdaptor(MemorySanitizerPass(Options))); } ); @@ -897,7 +901,11 @@ LLVMRustOptimizeWithNewPassManager( #if LLVM_VERSION_GE(11, 0) OptimizerLastEPCallbacks.push_back( [](ModulePassManager &MPM, OptimizationLevel Level) { +#if LLVM_VERSION_GE(14, 0) + MPM.addPass(ModuleThreadSanitizerPass()); +#else MPM.addPass(ThreadSanitizerPass()); +#endif MPM.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass())); } ); diff --git a/compiler/rustc_session/src/filesearch.rs b/compiler/rustc_session/src/filesearch.rs index 6fe6a555f1a..9359a55e55a 100644 --- a/compiler/rustc_session/src/filesearch.rs +++ b/compiler/rustc_session/src/filesearch.rs @@ -1,3 +1,5 @@ +//! A module for searching for libraries + pub use self::FileMatch::*; use std::env; @@ -14,8 +16,6 @@ pub enum FileMatch { FileDoesntMatch, } -// A module for searching for libraries - #[derive(Clone)] pub struct FileSearch<'a> { sysroot: &'a Path, @@ -83,22 +83,10 @@ impl<'a> FileSearch<'a> { FileSearch { sysroot, triple, search_paths, tlib_path, kind } } - // Returns just the directories within the search paths. + /// Returns just the directories within the search paths. pub fn search_path_dirs(&self) -> Vec<PathBuf> { self.search_paths().map(|sp| sp.dir.to_path_buf()).collect() } - - // Returns a list of directories where target-specific tool binaries are located. - pub fn get_tools_search_paths(&self, self_contained: bool) -> Vec<PathBuf> { - let rustlib_path = rustc_target::target_rustlib_path(self.sysroot, &self.triple); - let p = std::array::IntoIter::new([ - Path::new(&self.sysroot), - Path::new(&rustlib_path), - Path::new("bin"), - ]) - .collect::<PathBuf>(); - if self_contained { vec![p.clone(), p.join("self-contained")] } else { vec![p] } - } } pub fn make_target_lib_path(sysroot: &Path, target_triple: &str) -> PathBuf { @@ -107,8 +95,8 @@ pub fn make_target_lib_path(sysroot: &Path, target_triple: &str) -> PathBuf { .collect::<PathBuf>() } -// This function checks if sysroot is found using env::args().next(), and if it -// is not found, uses env::current_exe() to imply sysroot. +/// This function checks if sysroot is found using env::args().next(), and if it +/// is not found, uses env::current_exe() to imply sysroot. pub fn get_or_default_sysroot() -> PathBuf { // Follow symlinks. If the resolved path is relative, make it absolute. fn canonicalize(path: PathBuf) -> PathBuf { diff --git a/compiler/rustc_session/src/search_paths.rs b/compiler/rustc_session/src/search_paths.rs index 83b737a73b1..acb6c735e05 100644 --- a/compiler/rustc_session/src/search_paths.rs +++ b/compiler/rustc_session/src/search_paths.rs @@ -9,17 +9,17 @@ pub struct SearchPath { pub files: Vec<SearchPathFile>, } -// The obvious implementation of `SearchPath::files` is a `Vec<PathBuf>`. But -// it is searched repeatedly by `find_library_crate`, and the searches involve -// checking the prefix and suffix of the filename of each `PathBuf`. This is -// doable, but very slow, because it involves calls to `file_name` and -// `extension` that are themselves slow. -// -// This type augments the `PathBuf` with an `Option<String>` containing the -// `PathBuf`'s filename. The prefix and suffix checking is much faster on the -// `Option<String>` than the `PathBuf`. (It's an `Option` because -// `Path::file_name` can fail; if that happens then all subsequent checking -// will also fail, which is fine.) +/// The obvious implementation of `SearchPath::files` is a `Vec<PathBuf>`. But +/// it is searched repeatedly by `find_library_crate`, and the searches involve +/// checking the prefix and suffix of the filename of each `PathBuf`. This is +/// doable, but very slow, because it involves calls to `file_name` and +/// `extension` that are themselves slow. +/// +/// This type augments the `PathBuf` with an `Option<String>` containing the +/// `PathBuf`'s filename. The prefix and suffix checking is much faster on the +/// `Option<String>` than the `PathBuf`. (It's an `Option` because +/// `Path::file_name` can fail; if that happens then all subsequent checking +/// will also fail, which is fine.) #[derive(Clone, Debug)] pub struct SearchPathFile { pub path: PathBuf, diff --git a/compiler/rustc_session/src/session.rs b/compiler/rustc_session/src/session.rs index 4471e1e0ae8..d6f4a3ae4f1 100644 --- a/compiler/rustc_session/src/session.rs +++ b/compiler/rustc_session/src/session.rs @@ -36,7 +36,7 @@ use std::fmt; use std::io::Write; use std::num::NonZeroU32; use std::ops::{Div, Mul}; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::str::FromStr; use std::sync::Arc; use std::time::Duration; @@ -131,9 +131,8 @@ pub struct Session { pub target: Target, pub host: Target, pub opts: config::Options, - pub host_tlib_path: SearchPath, - /// `None` if the host and target are the same. - pub target_tlib_path: Option<SearchPath>, + pub host_tlib_path: Lrc<SearchPath>, + pub target_tlib_path: Lrc<SearchPath>, pub parse_sess: ParseSess, pub sysroot: PathBuf, /// The name of the root source file of the crate, in the local file system. @@ -787,8 +786,7 @@ impl Session { &self.sysroot, self.opts.target_triple.triple(), &self.opts.search_paths, - // `target_tlib_path == None` means it's the same as `host_tlib_path`. - self.target_tlib_path.as_ref().unwrap_or(&self.host_tlib_path), + &self.target_tlib_path, kind, ) } @@ -802,6 +800,18 @@ impl Session { ) } + /// Returns a list of directories where target-specific tool binaries are located. + pub fn get_tools_search_paths(&self, self_contained: bool) -> Vec<PathBuf> { + let rustlib_path = rustc_target::target_rustlib_path(&self.sysroot, &config::host_triple()); + let p = std::array::IntoIter::new([ + Path::new(&self.sysroot), + Path::new(&rustlib_path), + Path::new("bin"), + ]) + .collect::<PathBuf>(); + if self_contained { vec![p.clone(), p.join("self-contained")] } else { vec![p] } + } + pub fn init_incr_comp_session( &self, session_dir: PathBuf, @@ -1245,11 +1255,13 @@ pub fn build_session( let host_triple = config::host_triple(); let target_triple = sopts.target_triple.triple(); - let host_tlib_path = SearchPath::from_sysroot_and_triple(&sysroot, host_triple); + let host_tlib_path = Lrc::new(SearchPath::from_sysroot_and_triple(&sysroot, host_triple)); let target_tlib_path = if host_triple == target_triple { - None + // Use the same `SearchPath` if host and target triple are identical to avoid unnecessary + // rescanning of the target lib path and an unnecessary allocation. + host_tlib_path.clone() } else { - Some(SearchPath::from_sysroot_and_triple(&sysroot, target_triple)) + Lrc::new(SearchPath::from_sysroot_and_triple(&sysroot, target_triple)) }; let file_path_mapping = sopts.file_path_mapping(); diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs index 8c9acd3ba73..e435154d931 100644 --- a/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs @@ -722,7 +722,10 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> { }; let found_did = match *found_trait_ty.kind() { - ty::Closure(did, _) | ty::Foreign(did) | ty::FnDef(did, _) => Some(did), + ty::Closure(did, _) + | ty::Foreign(did) + | ty::FnDef(did, _) + | ty::Generator(did, ..) => Some(did), ty::Adt(def, _) => Some(def.did), _ => None, }; diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs index f006bede409..ae61988928f 100644 --- a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs +++ b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs @@ -1256,33 +1256,40 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> { trait_ref: ty::PolyTraitRef<'tcx>, ) -> String { let inputs = trait_ref.skip_binder().substs.type_at(1); - let sig = if let ty::Tuple(inputs) = inputs.kind() { - tcx.mk_fn_sig( - inputs.iter().map(|k| k.expect_ty()), - tcx.mk_ty_infer(ty::TyVar(ty::TyVid::from_u32(0))), - false, - hir::Unsafety::Normal, - abi::Abi::Rust, - ) - } else { - tcx.mk_fn_sig( + let sig = match inputs.kind() { + ty::Tuple(inputs) + if tcx.fn_trait_kind_from_lang_item(trait_ref.def_id()).is_some() => + { + tcx.mk_fn_sig( + inputs.iter().map(|k| k.expect_ty()), + tcx.mk_ty_infer(ty::TyVar(ty::TyVid::from_u32(0))), + false, + hir::Unsafety::Normal, + abi::Abi::Rust, + ) + } + _ => tcx.mk_fn_sig( std::iter::once(inputs), tcx.mk_ty_infer(ty::TyVar(ty::TyVid::from_u32(0))), false, hir::Unsafety::Normal, abi::Abi::Rust, - ) + ), }; trait_ref.rebind(sig).to_string() } - let argument_is_closure = expected_ref.skip_binder().substs.type_at(0).is_closure(); + let argument_kind = match expected_ref.skip_binder().substs.type_at(0) { + t if t.is_closure() => "closure", + t if t.is_generator() => "generator", + _ => "function", + }; let mut err = struct_span_err!( self.tcx.sess, span, E0631, "type mismatch in {} arguments", - if argument_is_closure { "closure" } else { "function" } + argument_kind ); let found_str = format!("expected signature of `{}`", build_fn_sig_string(self.tcx, found)); diff --git a/library/alloc/src/borrow.rs b/library/alloc/src/borrow.rs index 482a497201d..9ecbf058231 100644 --- a/library/alloc/src/borrow.rs +++ b/library/alloc/src/borrow.rs @@ -330,7 +330,11 @@ impl<B: ?Sized + ToOwned> Cow<'_, B> { } #[stable(feature = "rust1", since = "1.0.0")] -impl<B: ?Sized + ToOwned> Deref for Cow<'_, B> { +#[rustc_const_unstable(feature = "const_deref", issue = "88955")] +impl<B: ?Sized + ToOwned> const Deref for Cow<'_, B> +where + B::Owned: ~const Borrow<B>, +{ type Target = B; fn deref(&self) -> &B { diff --git a/library/core/src/mem/manually_drop.rs b/library/core/src/mem/manually_drop.rs index d86939454be..20b6453990d 100644 --- a/library/core/src/mem/manually_drop.rs +++ b/library/core/src/mem/manually_drop.rs @@ -145,7 +145,8 @@ impl<T: ?Sized> ManuallyDrop<T> { } #[stable(feature = "manually_drop", since = "1.20.0")] -impl<T: ?Sized> Deref for ManuallyDrop<T> { +#[rustc_const_unstable(feature = "const_deref", issue = "88955")] +impl<T: ?Sized> const Deref for ManuallyDrop<T> { type Target = T; #[inline(always)] fn deref(&self) -> &T { @@ -154,7 +155,8 @@ impl<T: ?Sized> Deref for ManuallyDrop<T> { } #[stable(feature = "manually_drop", since = "1.20.0")] -impl<T: ?Sized> DerefMut for ManuallyDrop<T> { +#[rustc_const_unstable(feature = "const_deref", issue = "88955")] +impl<T: ?Sized> const DerefMut for ManuallyDrop<T> { #[inline(always)] fn deref_mut(&mut self) -> &mut T { &mut self.value diff --git a/library/core/src/ops/deref.rs b/library/core/src/ops/deref.rs index dcf3ce070ec..fb4ec83bc28 100644 --- a/library/core/src/ops/deref.rs +++ b/library/core/src/ops/deref.rs @@ -76,7 +76,8 @@ pub trait Deref { } #[stable(feature = "rust1", since = "1.0.0")] -impl<T: ?Sized> Deref for &T { +#[rustc_const_unstable(feature = "const_deref", issue = "88955")] +impl<T: ?Sized> const Deref for &T { type Target = T; #[rustc_diagnostic_item = "noop_method_deref"] @@ -89,7 +90,8 @@ impl<T: ?Sized> Deref for &T { impl<T: ?Sized> !DerefMut for &T {} #[stable(feature = "rust1", since = "1.0.0")] -impl<T: ?Sized> Deref for &mut T { +#[rustc_const_unstable(feature = "const_deref", issue = "88955")] +impl<T: ?Sized> const Deref for &mut T { type Target = T; fn deref(&self) -> &T { diff --git a/library/std/src/net/tcp.rs b/library/std/src/net/tcp.rs index 5b4a9fa7979..223726d45d7 100644 --- a/library/std/src/net/tcp.rs +++ b/library/std/src/net/tcp.rs @@ -96,6 +96,18 @@ pub struct Incoming<'a> { listener: &'a TcpListener, } +/// An iterator that infinitely [`accept`]s connections on a [`TcpListener`]. +/// +/// This `struct` is created by the [`TcpListener::into_incoming`] method. +/// See its documentation for more. +/// +/// [`accept`]: TcpListener::accept +#[derive(Debug)] +#[unstable(feature = "tcplistener_into_incoming", issue = "88339")] +pub struct IntoIncoming { + listener: TcpListener, +} + impl TcpStream { /// Opens a TCP connection to a remote host. /// @@ -845,6 +857,37 @@ impl TcpListener { Incoming { listener: self } } + /// Turn this into an iterator over the connections being received on this + /// listener. + /// + /// The returned iterator will never return [`None`] and will also not yield + /// the peer's [`SocketAddr`] structure. Iterating over it is equivalent to + /// calling [`TcpListener::accept`] in a loop. + /// + /// # Examples + /// + /// ```no_run + /// #![feature(tcplistener_into_incoming)] + /// use std::net::{TcpListener, TcpStream}; + /// + /// fn listen_on(port: u16) -> impl Iterator<Item = TcpStream> { + /// let listener = TcpListener::bind("127.0.0.1:80").unwrap(); + /// listener.into_incoming() + /// .filter_map(Result::ok) /* Ignore failed connections */ + /// } + /// + /// fn main() -> std::io::Result<()> { + /// for stream in listen_on(80) { + /// /* handle the connection here */ + /// } + /// Ok(()) + /// } + /// ``` + #[unstable(feature = "tcplistener_into_incoming", issue = "88339")] + pub fn into_incoming(self) -> IntoIncoming { + IntoIncoming { listener: self } + } + /// Sets the value for the `IP_TTL` option on this socket. /// /// This value sets the time-to-live field that is used in every packet sent @@ -982,6 +1025,14 @@ impl<'a> Iterator for Incoming<'a> { } } +#[unstable(feature = "tcplistener_into_incoming", issue = "88339")] +impl Iterator for IntoIncoming { + type Item = io::Result<TcpStream>; + fn next(&mut self) -> Option<io::Result<TcpStream>> { + Some(self.listener.accept().map(|p| p.0)) + } +} + impl AsInner<net_imp::TcpListener> for TcpListener { fn as_inner(&self) -> &net_imp::TcpListener { &self.0 diff --git a/src/librustdoc/passes/doc_test_lints.rs b/src/librustdoc/passes/doc_test_lints.rs index 1b5ec1b08fa..279d0dbda82 100644 --- a/src/librustdoc/passes/doc_test_lints.rs +++ b/src/librustdoc/passes/doc_test_lints.rs @@ -96,6 +96,7 @@ crate fn should_have_doc_example(cx: &DocContext<'_>, item: &clean::Item) -> boo if cx.tcx.hir().attrs(hir_id).lists(sym::doc).has_word(sym::hidden) || inherits_doc_hidden(cx.tcx, hir_id) + || cx.tcx.hir().span(hir_id).in_derive_expansion() { return false; } diff --git a/src/test/run-make-fulldeps/sysroot-crates-are-unstable/test.py b/src/test/run-make-fulldeps/sysroot-crates-are-unstable/test.py index f479bdabb9c..cb77eb34fef 100644 --- a/src/test/run-make-fulldeps/sysroot-crates-are-unstable/test.py +++ b/src/test/run-make-fulldeps/sysroot-crates-are-unstable/test.py @@ -17,6 +17,17 @@ def convert_to_string(s): return s +def set_ld_lib_path(): + var = os.environ.get("LD_LIB_PATH_ENVVAR") + rpath = os.environ.get("HOST_RPATH_DIR") + if var and rpath: + path = os.environ.get(var) + if path: + os.environ[var] = rpath + os.pathsep + path + else: + os.environ[var] = rpath + + def exec_command(command, to_input=None): child = None if to_input is None: @@ -50,7 +61,9 @@ def get_all_libs(dir_path): if isfile(join(dir_path, f)) and f.endswith('.rlib') and f not in STABLE_CRATES] +set_ld_lib_path() sysroot = exec_command([os.environ['RUSTC'], '--print', 'sysroot'])[0].replace('\n', '') +assert sysroot, "Could not read the rustc sysroot!" libs = get_all_libs(join(sysroot, 'lib/rustlib/{}/lib'.format(os.environ['TARGET']))) ret = 0 diff --git a/src/test/rustdoc-ui/lint-missing-doc-code-example.rs b/src/test/rustdoc-ui/lint-missing-doc-code-example.rs index 7dd2ebfedbb..fac6342cd24 100644 --- a/src/test/rustdoc-ui/lint-missing-doc-code-example.rs +++ b/src/test/rustdoc-ui/lint-missing-doc-code-example.rs @@ -78,6 +78,15 @@ impl Clone for Struct { } + +/// doc +/// +/// ``` +/// println!("hello"); +/// ``` +#[derive(Clone)] +pub struct NiceStruct; + #[doc(hidden)] pub mod foo { pub fn bar() {} diff --git a/src/test/ui/issues/issue-19883.rs b/src/test/ui/associated-types/issue-19883.rs index 5cf422043a5..5cf422043a5 100644 --- a/src/test/ui/issues/issue-19883.rs +++ b/src/test/ui/associated-types/issue-19883.rs diff --git a/src/test/ui/issues/issue-19883.stderr b/src/test/ui/associated-types/issue-19883.stderr index bd6a86b7420..bd6a86b7420 100644 --- a/src/test/ui/issues/issue-19883.stderr +++ b/src/test/ui/associated-types/issue-19883.stderr diff --git a/src/test/ui/issues/issue-21363.rs b/src/test/ui/associated-types/issue-21363.rs index acc28cb430b..acc28cb430b 100644 --- a/src/test/ui/issues/issue-21363.rs +++ b/src/test/ui/associated-types/issue-21363.rs diff --git a/src/test/ui/auxiliary/issue-72470-lib.rs b/src/test/ui/async-await/auxiliary/issue-72470-lib.rs index 8383eba8912..8383eba8912 100644 --- a/src/test/ui/auxiliary/issue-72470-lib.rs +++ b/src/test/ui/async-await/auxiliary/issue-72470-lib.rs diff --git a/src/test/ui/issue-72470-llvm-dominate.rs b/src/test/ui/async-await/issue-72470-llvm-dominate.rs index 5bb69a07305..5bb69a07305 100644 --- a/src/test/ui/issue-72470-llvm-dominate.rs +++ b/src/test/ui/async-await/issue-72470-llvm-dominate.rs diff --git a/src/test/ui/issues/issue-78720.rs b/src/test/ui/closures/issue-78720.rs index 4cdb9f49113..4cdb9f49113 100644 --- a/src/test/ui/issues/issue-78720.rs +++ b/src/test/ui/closures/issue-78720.rs diff --git a/src/test/ui/issues/issue-78720.stderr b/src/test/ui/closures/issue-78720.stderr index 3dd13877298..3dd13877298 100644 --- a/src/test/ui/issues/issue-78720.stderr +++ b/src/test/ui/closures/issue-78720.stderr diff --git a/src/test/ui/issues/issue-23833.rs b/src/test/ui/consts/issue-23833.rs index d4128fa54e3..d4128fa54e3 100644 --- a/src/test/ui/issues/issue-23833.rs +++ b/src/test/ui/consts/issue-23833.rs diff --git a/src/test/ui/issues/issue-34784.rs b/src/test/ui/consts/issue-34784.rs index 98d943470a7..98d943470a7 100644 --- a/src/test/ui/issues/issue-34784.rs +++ b/src/test/ui/consts/issue-34784.rs diff --git a/src/test/ui/issues/issue-3935.rs b/src/test/ui/deriving/issue-3935.rs index e98d68e0eb2..e98d68e0eb2 100644 --- a/src/test/ui/issues/issue-3935.rs +++ b/src/test/ui/deriving/issue-3935.rs diff --git a/src/test/ui/generator/issue-88653.rs b/src/test/ui/generator/issue-88653.rs new file mode 100644 index 00000000000..ce9159b53e0 --- /dev/null +++ b/src/test/ui/generator/issue-88653.rs @@ -0,0 +1,19 @@ +// Regression test for #88653, where a confusing warning about a +// type mismatch in generator arguments was issued. + +#![feature(generators, generator_trait)] + +use std::ops::Generator; + +fn foo(bar: bool) -> impl Generator<(bool,)> { +//~^ ERROR: type mismatch in generator arguments [E0631] +//~| NOTE: expected signature of `fn((bool,)) -> _` + |bar| { + //~^ NOTE: found signature of `fn(bool) -> _` + if bar { + yield bar; + } + } +} + +fn main() {} diff --git a/src/test/ui/generator/issue-88653.stderr b/src/test/ui/generator/issue-88653.stderr new file mode 100644 index 00000000000..5bd8ad129fe --- /dev/null +++ b/src/test/ui/generator/issue-88653.stderr @@ -0,0 +1,12 @@ +error[E0631]: type mismatch in generator arguments + --> $DIR/issue-88653.rs:8:22 + | +LL | fn foo(bar: bool) -> impl Generator<(bool,)> { + | ^^^^^^^^^^^^^^^^^^^^^^^ expected signature of `fn((bool,)) -> _` +... +LL | |bar| { + | ----- found signature of `fn(bool) -> _` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0631`. diff --git a/src/test/ui/mid-path-type-params.rs b/src/test/ui/generics/mid-path-type-params.rs index a8128207c80..a8128207c80 100644 --- a/src/test/ui/mid-path-type-params.rs +++ b/src/test/ui/generics/mid-path-type-params.rs diff --git a/src/test/ui/issues/type-arg-mismatch-due-to-impl-trait.rs b/src/test/ui/impl-trait/type-arg-mismatch-due-to-impl-trait.rs index ecfa5c69e2f..ecfa5c69e2f 100644 --- a/src/test/ui/issues/type-arg-mismatch-due-to-impl-trait.rs +++ b/src/test/ui/impl-trait/type-arg-mismatch-due-to-impl-trait.rs diff --git a/src/test/ui/issues/type-arg-mismatch-due-to-impl-trait.stderr b/src/test/ui/impl-trait/type-arg-mismatch-due-to-impl-trait.stderr index 30322f88cca..30322f88cca 100644 --- a/src/test/ui/issues/type-arg-mismatch-due-to-impl-trait.stderr +++ b/src/test/ui/impl-trait/type-arg-mismatch-due-to-impl-trait.stderr diff --git a/src/test/ui/inference/issue-71309.rs b/src/test/ui/inference/issue-71309.rs new file mode 100644 index 00000000000..c31107d8fed --- /dev/null +++ b/src/test/ui/inference/issue-71309.rs @@ -0,0 +1,7 @@ +fn foo(x: Result<i32, ()>) -> Result<(), ()> { + let y: u32 = x?; + //~^ ERROR: `?` operator has incompatible types + Ok(()) +} + +fn main() {} diff --git a/src/test/ui/inference/issue-71309.stderr b/src/test/ui/inference/issue-71309.stderr new file mode 100644 index 00000000000..af8714f1c80 --- /dev/null +++ b/src/test/ui/inference/issue-71309.stderr @@ -0,0 +1,15 @@ +error[E0308]: `?` operator has incompatible types + --> $DIR/issue-71309.rs:2:18 + | +LL | let y: u32 = x?; + | ^^ expected `u32`, found `i32` + | + = note: `?` operator cannot convert from `i32` to `u32` +help: you can convert an `i32` to a `u32` and panic if the converted value doesn't fit + | +LL | let y: u32 = x?.try_into().unwrap(); + | ++++++++++++++++++++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/issues/issue-51632-try-desugar-incompatible-types.rs b/src/test/ui/issues/issue-51632-try-desugar-incompatible-types.rs index bb74f0e0dc3..35402dff675 100644 --- a/src/test/ui/issues/issue-51632-try-desugar-incompatible-types.rs +++ b/src/test/ui/issues/issue-51632-try-desugar-incompatible-types.rs @@ -6,7 +6,7 @@ fn missing_discourses() -> Result<isize, ()> { fn forbidden_narratives() -> Result<isize, ()> { missing_discourses()? - //~^ ERROR try expression alternatives have incompatible types + //~^ ERROR: `?` operator has incompatible types } fn main() {} diff --git a/src/test/ui/issues/issue-51632-try-desugar-incompatible-types.stderr b/src/test/ui/issues/issue-51632-try-desugar-incompatible-types.stderr index 2c821aa2308..0f61e03c3b5 100644 --- a/src/test/ui/issues/issue-51632-try-desugar-incompatible-types.stderr +++ b/src/test/ui/issues/issue-51632-try-desugar-incompatible-types.stderr @@ -1,9 +1,10 @@ -error[E0308]: try expression alternatives have incompatible types +error[E0308]: `?` operator has incompatible types --> $DIR/issue-51632-try-desugar-incompatible-types.rs:8:5 | LL | missing_discourses()? | ^^^^^^^^^^^^^^^^^^^^^ expected enum `Result`, found `isize` | + = note: `?` operator cannot convert from `isize` to `Result<isize, ()>` = note: expected enum `Result<isize, ()>` found type `isize` help: try removing this `?` diff --git a/src/test/ui/issues/issue-5791.rs b/src/test/ui/issues/issue-5791.rs deleted file mode 100644 index 3544160f094..00000000000 --- a/src/test/ui/issues/issue-5791.rs +++ /dev/null @@ -1,14 +0,0 @@ -// run-pass -#![allow(dead_code)] -#![warn(clashing_extern_declarations)] -// pretty-expanded FIXME #23616 - -extern "C" { - #[link_name = "malloc"] - fn malloc1(len: i32) -> *const u8; - #[link_name = "malloc"] - //~^ WARN `malloc2` redeclares `malloc` with a different signature - fn malloc2(len: i32, foo: i32) -> *const u8; -} - -pub fn main() {} diff --git a/src/test/ui/issues/issue-5791.stderr b/src/test/ui/issues/issue-5791.stderr deleted file mode 100644 index cf60e609deb..00000000000 --- a/src/test/ui/issues/issue-5791.stderr +++ /dev/null @@ -1,21 +0,0 @@ -warning: `malloc2` redeclares `malloc` with a different signature - --> $DIR/issue-5791.rs:9:5 - | -LL | / #[link_name = "malloc"] -LL | | fn malloc1(len: i32) -> *const u8; - | |______________________________________- `malloc` previously declared here -LL | / #[link_name = "malloc"] -LL | | -LL | | fn malloc2(len: i32, foo: i32) -> *const u8; - | |________________________________________________^ this signature doesn't match the previous declaration - | -note: the lint level is defined here - --> $DIR/issue-5791.rs:3:9 - | -LL | #![warn(clashing_extern_declarations)] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - = note: expected `unsafe extern "C" fn(i32) -> *const u8` - found `unsafe extern "C" fn(i32, i32) -> *const u8` - -warning: 1 warning emitted - diff --git a/src/test/ui/enable-unstable-lib-feature.rs b/src/test/ui/lint/enable-unstable-lib-feature.rs index aa6a973d7bd..aa6a973d7bd 100644 --- a/src/test/ui/enable-unstable-lib-feature.rs +++ b/src/test/ui/lint/enable-unstable-lib-feature.rs diff --git a/src/test/ui/enable-unstable-lib-feature.stderr b/src/test/ui/lint/enable-unstable-lib-feature.stderr index bb4e928ad15..bb4e928ad15 100644 --- a/src/test/ui/enable-unstable-lib-feature.stderr +++ b/src/test/ui/lint/enable-unstable-lib-feature.stderr diff --git a/src/test/ui/issues/issue-57410.rs b/src/test/ui/lint/issue-57410.rs index 0cf4b8068e4..0cf4b8068e4 100644 --- a/src/test/ui/issues/issue-57410.rs +++ b/src/test/ui/lint/issue-57410.rs diff --git a/src/test/ui/issues/issue-79744.rs b/src/test/ui/lint/issue-79744.rs index e9725a027d3..e9725a027d3 100644 --- a/src/test/ui/issues/issue-79744.rs +++ b/src/test/ui/lint/issue-79744.rs diff --git a/src/test/ui/issues/issue-79744.stderr b/src/test/ui/lint/issue-79744.stderr index 6f6dd44d236..6f6dd44d236 100644 --- a/src/test/ui/issues/issue-79744.stderr +++ b/src/test/ui/lint/issue-79744.stderr diff --git a/src/test/ui/issues/issue-37433.rs b/src/test/ui/llvm-asm/issue-37433.rs index 1c362e8aba0..1c362e8aba0 100644 --- a/src/test/ui/issues/issue-37433.rs +++ b/src/test/ui/llvm-asm/issue-37433.rs diff --git a/src/test/ui/issues/issue-37433.stderr b/src/test/ui/llvm-asm/issue-37433.stderr index 44a8eb32b7c..44a8eb32b7c 100644 --- a/src/test/ui/issues/issue-37433.stderr +++ b/src/test/ui/llvm-asm/issue-37433.stderr diff --git a/src/test/ui/auxiliary/define-macro.rs b/src/test/ui/macros/auxiliary/define-macro.rs index 4956907c55e..4956907c55e 100644 --- a/src/test/ui/auxiliary/define-macro.rs +++ b/src/test/ui/macros/auxiliary/define-macro.rs diff --git a/src/test/ui/out-of-order-shadowing.rs b/src/test/ui/macros/out-of-order-shadowing.rs index a0d1a973764..a0d1a973764 100644 --- a/src/test/ui/out-of-order-shadowing.rs +++ b/src/test/ui/macros/out-of-order-shadowing.rs diff --git a/src/test/ui/out-of-order-shadowing.stderr b/src/test/ui/macros/out-of-order-shadowing.stderr index 1db31e0272c..1db31e0272c 100644 --- a/src/test/ui/out-of-order-shadowing.stderr +++ b/src/test/ui/macros/out-of-order-shadowing.stderr diff --git a/src/test/ui/guards.rs b/src/test/ui/match/guards.rs index 10a4bb67387..10a4bb67387 100644 --- a/src/test/ui/guards.rs +++ b/src/test/ui/match/guards.rs diff --git a/src/test/ui/issues/issue-33498.rs b/src/test/ui/match/issue-33498.rs index 9c8a97e7e6b..9c8a97e7e6b 100644 --- a/src/test/ui/issues/issue-33498.rs +++ b/src/test/ui/match/issue-33498.rs diff --git a/src/test/ui/issues/issue-41255.rs b/src/test/ui/match/issue-41255.rs index 9d7072f1665..9d7072f1665 100644 --- a/src/test/ui/issues/issue-41255.rs +++ b/src/test/ui/match/issue-41255.rs diff --git a/src/test/ui/issues/issue-41255.stderr b/src/test/ui/match/issue-41255.stderr index bf81c8d371c..bf81c8d371c 100644 --- a/src/test/ui/issues/issue-41255.stderr +++ b/src/test/ui/match/issue-41255.stderr diff --git a/src/test/ui/issues/issue-56685.rs b/src/test/ui/match/issue-56685.rs index f320c99ed15..f320c99ed15 100644 --- a/src/test/ui/issues/issue-56685.rs +++ b/src/test/ui/match/issue-56685.rs diff --git a/src/test/ui/issues/issue-56685.stderr b/src/test/ui/match/issue-56685.stderr index ccf357d4aa0..ccf357d4aa0 100644 --- a/src/test/ui/issues/issue-56685.stderr +++ b/src/test/ui/match/issue-56685.stderr diff --git a/src/test/ui/expr-empty-ret.rs b/src/test/ui/never_type/expr-empty-ret.rs index ce8ffaf94d0..ce8ffaf94d0 100644 --- a/src/test/ui/expr-empty-ret.rs +++ b/src/test/ui/never_type/expr-empty-ret.rs diff --git a/src/test/ui/issues/issue-74614.rs b/src/test/ui/polymorphization/issue-74614.rs index 8b0c00b1355..8b0c00b1355 100644 --- a/src/test/ui/issues/issue-74614.rs +++ b/src/test/ui/polymorphization/issue-74614.rs diff --git a/src/test/ui/issues/issue-79593.rs b/src/test/ui/privacy/issue-79593.rs index b94278bfdd2..b94278bfdd2 100644 --- a/src/test/ui/issues/issue-79593.rs +++ b/src/test/ui/privacy/issue-79593.rs diff --git a/src/test/ui/issues/issue-79593.stderr b/src/test/ui/privacy/issue-79593.stderr index b8c7d4f23a2..b8c7d4f23a2 100644 --- a/src/test/ui/issues/issue-79593.stderr +++ b/src/test/ui/privacy/issue-79593.stderr diff --git a/src/test/ui/repr/repr-transparent-issue-87496.rs b/src/test/ui/repr/repr-transparent-issue-87496.rs new file mode 100644 index 00000000000..a4dd45c63f5 --- /dev/null +++ b/src/test/ui/repr/repr-transparent-issue-87496.rs @@ -0,0 +1,12 @@ +// Regression test for the ICE described in #87496. + +// check-pass + +#[repr(transparent)] +struct TransparentCustomZst(()); +extern "C" { + fn good17(p: TransparentCustomZst); + //~^ WARNING: `extern` block uses type `TransparentCustomZst`, which is not FFI-safe +} + +fn main() {} diff --git a/src/test/ui/repr/repr-transparent-issue-87496.stderr b/src/test/ui/repr/repr-transparent-issue-87496.stderr new file mode 100644 index 00000000000..c488755cc24 --- /dev/null +++ b/src/test/ui/repr/repr-transparent-issue-87496.stderr @@ -0,0 +1,16 @@ +warning: `extern` block uses type `TransparentCustomZst`, which is not FFI-safe + --> $DIR/repr-transparent-issue-87496.rs:8:18 + | +LL | fn good17(p: TransparentCustomZst); + | ^^^^^^^^^^^^^^^^^^^^ not FFI-safe + | + = note: `#[warn(improper_ctypes)]` on by default + = note: this struct contains only zero-sized fields +note: the type is defined here + --> $DIR/repr-transparent-issue-87496.rs:6:1 + | +LL | struct TransparentCustomZst(()); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +warning: 1 warning emitted + diff --git a/src/test/ui/issues/issue-42944.rs b/src/test/ui/resolve/issue-42944.rs index a4404857a56..a4404857a56 100644 --- a/src/test/ui/issues/issue-42944.rs +++ b/src/test/ui/resolve/issue-42944.rs diff --git a/src/test/ui/issues/issue-42944.stderr b/src/test/ui/resolve/issue-42944.stderr index 008492529d1..008492529d1 100644 --- a/src/test/ui/issues/issue-42944.stderr +++ b/src/test/ui/resolve/issue-42944.stderr diff --git a/src/test/ui/use-self-in-inner-fn.rs b/src/test/ui/resolve/use-self-in-inner-fn.rs index eccb315feb1..eccb315feb1 100644 --- a/src/test/ui/use-self-in-inner-fn.rs +++ b/src/test/ui/resolve/use-self-in-inner-fn.rs diff --git a/src/test/ui/use-self-in-inner-fn.stderr b/src/test/ui/resolve/use-self-in-inner-fn.stderr index 96609349924..96609349924 100644 --- a/src/test/ui/use-self-in-inner-fn.stderr +++ b/src/test/ui/resolve/use-self-in-inner-fn.stderr diff --git a/src/test/ui/issues/issue-35376.rs b/src/test/ui/specialization/issue-35376.rs index cc35213b93d..cc35213b93d 100644 --- a/src/test/ui/issues/issue-35376.rs +++ b/src/test/ui/specialization/issue-35376.rs diff --git a/src/test/ui/issues/issue-35376.stderr b/src/test/ui/specialization/issue-35376.stderr index 835277d408e..835277d408e 100644 --- a/src/test/ui/issues/issue-35376.stderr +++ b/src/test/ui/specialization/issue-35376.stderr diff --git a/src/test/ui/issues/issue-34194.rs b/src/test/ui/static/issue-34194.rs index 6dce556e9e3..6dce556e9e3 100644 --- a/src/test/ui/issues/issue-34194.rs +++ b/src/test/ui/static/issue-34194.rs diff --git a/src/test/ui/issues/issue-38002.rs b/src/test/ui/structs-enums/issue-38002.rs index fdb31fc44a1..fdb31fc44a1 100644 --- a/src/test/ui/issues/issue-38002.rs +++ b/src/test/ui/structs-enums/issue-38002.rs diff --git a/src/test/ui/issues/issue-53912.rs b/src/test/ui/symbol-names/issue-53912.rs index 65b6825a832..65b6825a832 100644 --- a/src/test/ui/issues/issue-53912.rs +++ b/src/test/ui/symbol-names/issue-53912.rs diff --git a/src/test/ui/issues/issue-36768.rs b/src/test/ui/test-attrs/issue-36768.rs index f671cbc8205..f671cbc8205 100644 --- a/src/test/ui/issues/issue-36768.rs +++ b/src/test/ui/test-attrs/issue-36768.rs diff --git a/src/test/ui/tls.rs b/src/test/ui/thread-local/tls.rs index fbd3413885f..fbd3413885f 100644 --- a/src/test/ui/tls.rs +++ b/src/test/ui/thread-local/tls.rs diff --git a/src/test/ui/bug-7183-generics.rs b/src/test/ui/traits/bug-7183-generics.rs index f53a1736127..f53a1736127 100644 --- a/src/test/ui/bug-7183-generics.rs +++ b/src/test/ui/traits/bug-7183-generics.rs diff --git a/src/test/ui/issues/issue-20692.rs b/src/test/ui/traits/issue-20692.rs index 1cb2d8c7302..1cb2d8c7302 100644 --- a/src/test/ui/issues/issue-20692.rs +++ b/src/test/ui/traits/issue-20692.rs diff --git a/src/test/ui/issues/issue-20692.stderr b/src/test/ui/traits/issue-20692.stderr index 1d7f252e556..1d7f252e556 100644 --- a/src/test/ui/issues/issue-20692.stderr +++ b/src/test/ui/traits/issue-20692.stderr diff --git a/src/test/ui/issues/issue-23825.rs b/src/test/ui/traits/issue-23825.rs index a9f0095d2e2..a9f0095d2e2 100644 --- a/src/test/ui/issues/issue-23825.rs +++ b/src/test/ui/traits/issue-23825.rs diff --git a/src/test/ui/issues/issue-45107-unnecessary-unsafe-in-closure.mir.stderr b/src/test/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.mir.stderr index 9e9cbcf33ae..9e9cbcf33ae 100644 --- a/src/test/ui/issues/issue-45107-unnecessary-unsafe-in-closure.mir.stderr +++ b/src/test/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.mir.stderr diff --git a/src/test/ui/issues/issue-45107-unnecessary-unsafe-in-closure.rs b/src/test/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.rs index ac1cfd62a05..ac1cfd62a05 100644 --- a/src/test/ui/issues/issue-45107-unnecessary-unsafe-in-closure.rs +++ b/src/test/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.rs diff --git a/src/test/ui/issues/issue-45107-unnecessary-unsafe-in-closure.thir.stderr b/src/test/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.thir.stderr index 9e9cbcf33ae..9e9cbcf33ae 100644 --- a/src/test/ui/issues/issue-45107-unnecessary-unsafe-in-closure.thir.stderr +++ b/src/test/ui/unsafe/issue-45107-unnecessary-unsafe-in-closure.thir.stderr diff --git a/src/tools/tidy/src/ui_tests.rs b/src/tools/tidy/src/ui_tests.rs index 46b5b877b4c..a341527c84c 100644 --- a/src/tools/tidy/src/ui_tests.rs +++ b/src/tools/tidy/src/ui_tests.rs @@ -7,8 +7,8 @@ use std::path::Path; const ENTRY_LIMIT: usize = 1000; // FIXME: The following limits should be reduced eventually. -const ROOT_ENTRY_LIMIT: usize = 1345; -const ISSUES_ENTRY_LIMIT: usize = 2525; +const ROOT_ENTRY_LIMIT: usize = 1330; +const ISSUES_ENTRY_LIMIT: usize = 2488; fn check_entries(path: &Path, bad: &mut bool) { let dirs = walkdir::WalkDir::new(&path.join("test/ui")) |
