{
- let l4re_lib_path = env::var_os("L4RE_LIBDIR").ok_or("Unable to find L4Re \
- library directory: L4RE_LIBDIR not set.")?.into_string().unwrap();
- let mut pre_link_args = LinkArgs::new();
- pre_link_args.insert(LinkerFlavor::Ld, vec![
- format!("-T{}/main_stat.ld", l4re_lib_path),
- "--defsym=__executable_start=0x01000000".to_string(),
- "--defsym=__L4_KIP_ADDR__=0x6ffff000".to_string(),
- format!("{}/crt1.o", l4re_lib_path),
- format!("{}/crti.o", l4re_lib_path),
- get_path_or("crtbeginT.o"),
- ]);
- let mut post_link_args = LinkArgs::new();
- post_link_args.insert(LinkerFlavor::Ld, vec![
- format!("{}/l4f/libpthread.a", l4re_lib_path),
- format!("{}/l4f/libc_be_sig.a", l4re_lib_path),
- format!("{}/l4f/libc_be_sig_noop.a", l4re_lib_path),
- format!("{}/l4f/libc_be_socket_noop.a", l4re_lib_path),
- format!("{}/l4f/libc_be_fs_noop.a", l4re_lib_path),
- format!("{}/l4f/libc_be_sem_noop.a", l4re_lib_path),
- format!("{}/l4f/libl4re-vfs.o.a", l4re_lib_path),
- format!("{}/l4f/lib4re.a", l4re_lib_path),
- format!("{}/l4f/lib4re-util.a", l4re_lib_path),
- format!("{}/l4f/libc_support_misc.a", l4re_lib_path),
- format!("{}/l4f/libsupc++.a", l4re_lib_path),
- format!("{}/l4f/lib4shmc.a", l4re_lib_path),
- format!("{}/l4f/lib4re-c.a", l4re_lib_path),
- format!("{}/l4f/lib4re-c-util.a", l4re_lib_path),
- get_path_or("libgcc_eh.a"),
- format!("{}/l4f/libdl.a", l4re_lib_path),
- "--start-group".to_string(),
- format!("{}/l4f/libl4util.a", l4re_lib_path),
- format!("{}/l4f/libc_be_l4re.a", l4re_lib_path),
- format!("{}/l4f/libuc_c.a", l4re_lib_path),
- format!("{}/l4f/libc_be_l4refile.a", l4re_lib_path),
- "--end-group".to_string(),
- format!("{}/l4f/libl4sys.a", l4re_lib_path),
- "-gc-sections".to_string(),
- get_path_or("crtend.o"),
- format!("{}/crtn.o", l4re_lib_path),
- ]);
+pub fn opts() -> TargetOptions {
+ let mut args = LinkArgs::new();
+ args.insert(LinkerFlavor::Gcc, vec![]);
- Ok(TargetOptions {
+ TargetOptions {
executables: true,
has_elf_tls: false,
exe_allocation_crate: None,
panic_strategy: PanicStrategy::Abort,
- pre_link_args,
- post_link_args,
+ linker: Some("ld".to_string()),
+ pre_link_args: args,
target_family: Some("unix".to_string()),
.. Default::default()
- })
+ }
}
diff --git a/src/librustc_back/target/x86_64_unknown_l4re_uclibc.rs b/src/librustc_back/target/x86_64_unknown_l4re_uclibc.rs
index 6e849f19cf20f..821a77f52f511 100644
--- a/src/librustc_back/target/x86_64_unknown_l4re_uclibc.rs
+++ b/src/librustc_back/target/x86_64_unknown_l4re_uclibc.rs
@@ -12,7 +12,7 @@ use LinkerFlavor;
use target::{Target, TargetResult};
pub fn target() -> TargetResult {
- let mut base = super::l4re_base::opts()?;
+ let mut base = super::l4re_base::opts();
base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64);
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index 19085ff039ec5..1ea1ff1fae24d 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -3096,10 +3096,10 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
};
}
ty::TyRawPtr(..) => {
- err.note(&format!("`{0}` is a native pointer; perhaps you need to deref \
- with `(*{0}).{1}`",
- self.tcx.hir.node_to_pretty_string(base.id),
- field.node));
+ let base = self.tcx.hir.node_to_pretty_string(base.id);
+ let msg = format!("`{}` is a native pointer; try dereferencing it", base);
+ let suggestion = format!("(*{}).{}", base, field.node);
+ err.span_suggestion(field.span, &msg, suggestion);
}
_ => {}
}
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 3750faec801ad..678e1762a5519 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -3181,14 +3181,16 @@ fn render_assoc_items(w: &mut fmt::Formatter,
render_impls(cx, w, concrete, containing_item)?;
write!(w, "")?;
- write!(w, "
-
-
- ")?;
- render_impls(cx, w, synthetic, containing_item)?;
- write!(w, "
")?;
+ if !synthetic.is_empty() {
+ write!(w, "
+
+
+ ")?;
+ render_impls(cx, w, synthetic, containing_item)?;
+ write!(w, "
")?;
+ }
}
Ok(())
}
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index f1c9c58a4ebcf..28d39cb174a10 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -1628,6 +1628,7 @@
function toggleAllDocs() {
var toggle = document.getElementById("toggle-all-docs");
if (hasClass(toggle, "will-expand")) {
+ updateLocalStorage("rustdoc-collapse", "false");
removeClass(toggle, "will-expand");
onEveryMatchingChild(toggle, "inner", function(e) {
e.innerHTML = labelForToggleButton(false);
@@ -1637,6 +1638,7 @@
collapseDocs(e, "show");
});
} else {
+ updateLocalStorage("rustdoc-collapse", "true");
addClass(toggle, "will-expand");
onEveryMatchingChild(toggle, "inner", function(e) {
e.innerHTML = labelForToggleButton(true);
@@ -1988,6 +1990,10 @@
window.onresize = function() {
hideSidebar();
};
+
+ if (getCurrentValue("rustdoc-collapse") === "true") {
+ toggleAllDocs();
+ }
}());
// Sets the focus on the search bar at the top of the page
diff --git a/src/libstd/fs.rs b/src/libstd/fs.rs
index 292a78278ab0a..db52ed67d3a85 100644
--- a/src/libstd/fs.rs
+++ b/src/libstd/fs.rs
@@ -453,6 +453,10 @@ impl File {
/// will be extended to `size` and have all of the intermediate data filled
/// in with 0s.
///
+ /// The file's cursor isn't changed. In particular, if the cursor was at the
+ /// end and the file is shrunk using this operation, the cursor will now be
+ /// past the end.
+ ///
/// # Errors
///
/// This function will return an error if the file is not opened for writing.
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index f5aa01fb03459..bd0ca0e670487 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -2831,9 +2831,10 @@ impl<'a> Parser<'a> {
let (span, e) = self.interpolated_or_expr_span(e)?;
let span_of_tilde = lo;
let mut err = self.diagnostic().struct_span_err(span_of_tilde,
- "`~` can not be used as a unary operator");
- err.span_label(span_of_tilde, "did you mean `!`?");
- err.help("use `!` instead of `~` if you meant to perform bitwise negation");
+ "`~` cannot be used as a unary operator");
+ err.span_suggestion_short(span_of_tilde,
+ "use `!` to perform bitwise negation",
+ "!".to_owned());
err.emit();
(lo.to(span), self.mk_unary(UnOp::Not, e))
}
@@ -3389,7 +3390,7 @@ impl<'a> Parser<'a> {
None)?;
if let Err(mut e) = self.expect(&token::OpenDelim(token::Brace)) {
if self.token == token::Token::Semi {
- e.span_note(match_span, "did you mean to remove this `match` keyword?");
+ e.span_suggestion_short(match_span, "try removing this `match`", "".to_owned());
}
return Err(e)
}
@@ -5361,7 +5362,9 @@ impl<'a> Parser<'a> {
if is_macro_rules {
let mut err = self.diagnostic()
.struct_span_err(sp, "can't qualify macro_rules invocation with `pub`");
- err.help("did you mean #[macro_export]?");
+ err.span_suggestion(sp,
+ "try exporting the macro",
+ "#[macro_export]".to_owned());
Err(err)
} else {
let mut err = self.diagnostic()
diff --git a/src/libsyntax_ext/deriving/debug.rs b/src/libsyntax_ext/deriving/debug.rs
index 82fc09fca69af..7b23de582a79a 100644
--- a/src/libsyntax_ext/deriving/debug.rs
+++ b/src/libsyntax_ext/deriving/debug.rs
@@ -70,7 +70,7 @@ fn show_substructure(cx: &mut ExtCtxt, span: Span, substr: &Substructure) -> P usize {
// FIXME: implement
1
}
+
+ #[cfg(target_os = "l4re")]
+ fn num_cpus() -> usize {
+ // FIXME: implement
+ 1
+ }
}
pub fn filter_tests(opts: &TestOpts, tests: Vec) -> Vec {
diff --git a/src/stdsimd b/src/stdsimd
index 678cbd325c840..ab9356f2af650 160000
--- a/src/stdsimd
+++ b/src/stdsimd
@@ -1 +1 @@
-Subproject commit 678cbd325c84070c9dbe4303969fbd2734c0b4ee
+Subproject commit ab9356f2af650815d339d77306f0d09c44d531ad
diff --git a/src/test/run-pass/issue-42453.rs b/src/test/run-pass/issue-42453.rs
new file mode 100644
index 0000000000000..dfe3a21961e3b
--- /dev/null
+++ b/src/test/run-pass/issue-42453.rs
@@ -0,0 +1,17 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 or the MIT license
+// , at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#[derive(Debug)]
+struct builder;
+
+fn main() {
+
+}
+
diff --git a/src/test/rustdoc/empty-section.rs b/src/test/rustdoc/empty-section.rs
new file mode 100644
index 0000000000000..3748313593fc2
--- /dev/null
+++ b/src/test/rustdoc/empty-section.rs
@@ -0,0 +1,20 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 or the MIT license
+// , at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![crate_name = "foo"]
+
+#![feature(optin_builtin_traits)]
+
+pub struct Foo;
+
+// @has foo/struct.Foo.html
+// @!has - '//*[@class="synthetic-implementations"]' 'Auto Trait Implementations'
+impl !Send for Foo {}
+impl !Sync for Foo {}
diff --git a/src/test/ui/did_you_mean/issue-41679.rs b/src/test/ui/did_you_mean/issue-41679-tilde-bitwise-negation-attempt.rs
similarity index 88%
rename from src/test/ui/did_you_mean/issue-41679.rs
rename to src/test/ui/did_you_mean/issue-41679-tilde-bitwise-negation-attempt.rs
index 98c909e212fdd..e8fd248011cb8 100644
--- a/src/test/ui/did_you_mean/issue-41679.rs
+++ b/src/test/ui/did_you_mean/issue-41679-tilde-bitwise-negation-attempt.rs
@@ -9,5 +9,5 @@
// except according to those terms.
fn main() {
- let x = ~1; //~ ERROR can not be used as a unary operator
+ let x = ~1; //~ ERROR cannot be used as a unary operator
}
diff --git a/src/test/ui/did_you_mean/issue-41679-tilde-bitwise-negation-attempt.stderr b/src/test/ui/did_you_mean/issue-41679-tilde-bitwise-negation-attempt.stderr
new file mode 100644
index 0000000000000..f13f15f63771d
--- /dev/null
+++ b/src/test/ui/did_you_mean/issue-41679-tilde-bitwise-negation-attempt.stderr
@@ -0,0 +1,8 @@
+error: `~` cannot be used as a unary operator
+ --> $DIR/issue-41679-tilde-bitwise-negation-attempt.rs:12:13
+ |
+LL | let x = ~1; //~ ERROR cannot be used as a unary operator
+ | ^ help: use `!` to perform bitwise negation
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/did_you_mean/issue-41679.stderr b/src/test/ui/did_you_mean/issue-41679.stderr
deleted file mode 100644
index c17812fc0cb9d..0000000000000
--- a/src/test/ui/did_you_mean/issue-41679.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-error: `~` can not be used as a unary operator
- --> $DIR/issue-41679.rs:12:13
- |
-LL | let x = ~1; //~ ERROR can not be used as a unary operator
- | ^ did you mean `!`?
- |
- = help: use `!` instead of `~` if you meant to perform bitwise negation
-
-error: aborting due to previous error
-
diff --git a/src/test/parse-fail/match-refactor-to-expr.rs b/src/test/ui/did_you_mean/match-refactor-to-expr.rs
similarity index 91%
rename from src/test/parse-fail/match-refactor-to-expr.rs
rename to src/test/ui/did_you_mean/match-refactor-to-expr.rs
index e2fee1d189591..3c88608697aad 100644
--- a/src/test/parse-fail/match-refactor-to-expr.rs
+++ b/src/test/ui/did_you_mean/match-refactor-to-expr.rs
@@ -12,7 +12,7 @@
fn main() {
let foo =
- match //~ NOTE did you mean to remove this `match` keyword?
+ match
Some(4).unwrap_or_else(5)
//~^ NOTE expected one of `.`, `?`, `{`, or an operator here
; //~ NOTE unexpected token
diff --git a/src/test/ui/did_you_mean/match-refactor-to-expr.stderr b/src/test/ui/did_you_mean/match-refactor-to-expr.stderr
new file mode 100644
index 0000000000000..ecca781684cec
--- /dev/null
+++ b/src/test/ui/did_you_mean/match-refactor-to-expr.stderr
@@ -0,0 +1,13 @@
+error: expected one of `.`, `?`, `{`, or an operator, found `;`
+ --> $DIR/match-refactor-to-expr.rs:18:9
+ |
+LL | match
+ | ----- help: try removing this `match`
+LL | Some(4).unwrap_or_else(5)
+ | - expected one of `.`, `?`, `{`, or an operator here
+LL | //~^ NOTE expected one of `.`, `?`, `{`, or an operator here
+LL | ; //~ NOTE unexpected token
+ | ^ unexpected token
+
+error: aborting due to previous error
+
diff --git a/src/test/parse-fail/pub-macro-rules.rs b/src/test/ui/did_you_mean/pub-macro-rules.rs
similarity index 91%
rename from src/test/parse-fail/pub-macro-rules.rs
rename to src/test/ui/did_you_mean/pub-macro-rules.rs
index 93b992f2f8af2..65a0d642cd7d1 100644
--- a/src/test/parse-fail/pub-macro-rules.rs
+++ b/src/test/ui/did_you_mean/pub-macro-rules.rs
@@ -9,8 +9,7 @@
// except according to those terms.
#[macro_use] mod bleh {
- pub macro_rules! foo { //~ ERROR can't qualify macro_rules invocation with `pub`
- //~^ HELP did you mean #[macro_export]?
+ pub macro_rules! foo { //~ ERROR can't qualify macro_rules invocation
($n:ident) => (
fn $n () -> i32 {
1
diff --git a/src/test/ui/did_you_mean/pub-macro-rules.stderr b/src/test/ui/did_you_mean/pub-macro-rules.stderr
new file mode 100644
index 0000000000000..dfeab75525ba3
--- /dev/null
+++ b/src/test/ui/did_you_mean/pub-macro-rules.stderr
@@ -0,0 +1,8 @@
+error: can't qualify macro_rules invocation with `pub`
+ --> $DIR/pub-macro-rules.rs:12:5
+ |
+LL | pub macro_rules! foo { //~ ERROR can't qualify macro_rules invocation
+ | ^^^ help: try exporting the macro: `#[macro_export]`
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/issue-11004.stderr b/src/test/ui/issue-11004.stderr
index 4cfc7d23bd0b9..268c3cd6d2afd 100644
--- a/src/test/ui/issue-11004.stderr
+++ b/src/test/ui/issue-11004.stderr
@@ -2,17 +2,13 @@ error[E0609]: no field `x` on type `*mut A`
--> $DIR/issue-11004.rs:17:21
|
LL | let x : i32 = n.x; //~ no field `x` on type `*mut A`
- | ^
- |
- = note: `n` is a native pointer; perhaps you need to deref with `(*n).x`
+ | ^ help: `n` is a native pointer; try dereferencing it: `(*n).x`
error[E0609]: no field `y` on type `*mut A`
--> $DIR/issue-11004.rs:18:21
|
LL | let y : f64 = n.y; //~ no field `y` on type `*mut A`
- | ^
- |
- = note: `n` is a native pointer; perhaps you need to deref with `(*n).y`
+ | ^ help: `n` is a native pointer; try dereferencing it: `(*n).y`
error: aborting due to 2 previous errors
diff --git a/src/test/ui/lifetime-errors/ex3-both-anon-regions-4.stderr b/src/test/ui/lifetime-errors/ex3-both-anon-regions-4.stderr
deleted file mode 100644
index 19339800a7a98..0000000000000
--- a/src/test/ui/lifetime-errors/ex3-both-anon-regions-4.stderr
+++ /dev/null
@@ -1,19 +0,0 @@
-error[E0623]: lifetime mismatch
- --> $DIR/ex3-both-anon-regions-4.rs:12:13
- |
-11 | fn foo(z: &mut Vec<(&u8,&u8)>, (x, y): (&u8, &u8)) {
- | --- --- these references are declared with different lifetimes...
-12 | z.push((x,y));
- | ^ ...but data flows into `z` here
-
-error[E0623]: lifetime mismatch
- --> $DIR/ex3-both-anon-regions-4.rs:12:15
- |
-11 | fn foo(z: &mut Vec<(&u8,&u8)>, (x, y): (&u8, &u8)) {
- | --- --- these references are declared with different lifetimes...
-12 | z.push((x,y));
- | ^ ...but data flows into `z` here
-
-error: aborting due to 2 previous errors
-
-If you want more information on this error, try using "rustc --explain E0623"
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-to-empty.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-to-empty.stderr
deleted file mode 100644
index 502b344c89e44..0000000000000
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-to-empty.stderr
+++ /dev/null
@@ -1,45 +0,0 @@
-warning: not reporting region error due to -Znll
- --> $DIR/propagate-approximated-to-empty.rs:41:9
- |
-41 | demand_y(x, y, x.get())
- | ^^^^^^^^^^^^^^^^^^^^^^^
-
-error: free region `'_#6r` does not outlive free region `'_#4r`
- --> $DIR/propagate-approximated-to-empty.rs:41:18
- |
-41 | demand_y(x, y, x.get())
- | ^
-
-note: No external requirements
- --> $DIR/propagate-approximated-to-empty.rs:39:47
- |
-39 | establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
- | _______________________________________________^
-40 | | // Only works if 'x: 'y:
-41 | | demand_y(x, y, x.get())
-42 | | //~^ WARN not reporting region error due to -Znll
-43 | | //~| ERROR free region `'_#6r` does not outlive free region `'_#4r`
-44 | | });
- | |_____^
- |
- = note: defining type: DefId(0/1:18 ~ propagate_approximated_to_empty[317d]::supply[0]::{{closure}}[0]) with closure substs [
- i16,
- for<'r, 's, 't0, 't1, 't2> extern "rust-call" fn((&ReLateBound(DebruijnIndex { depth: 1 }, BrNamed(crate0:DefIndex(0:0), 'r)) std::cell::Cell<&ReLateBound(DebruijnIndex { depth: 1 }, BrNamed(crate0:DefIndex(0:0), 's)) &'_#1r u32>, &ReLateBound(DebruijnIndex { depth: 1 }, BrNamed(crate0:DefIndex(0:0), 't0)) std::cell::Cell<&ReLateBound(DebruijnIndex { depth: 1 }, BrNamed(crate0:DefIndex(0:0), 't1)) u32>, &ReLateBound(DebruijnIndex { depth: 1 }, BrNamed(crate0:DefIndex(0:0), 't2)) std::cell::Cell<&ReLateBound(DebruijnIndex { depth: 1 }, BrNamed(crate0:DefIndex(0:0), 's)) u32>))
- ]
-
-note: No external requirements
- --> $DIR/propagate-approximated-to-empty.rs:38:1
- |
-38 | / fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
-39 | | establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
-40 | | // Only works if 'x: 'y:
-41 | | demand_y(x, y, x.get())
-... |
-44 | | });
-45 | | }
- | |_^
- |
- = note: defining type: DefId(0/0:6 ~ propagate_approximated_to_empty[317d]::supply[0]) with substs []
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/resolve-error.stderr b/src/test/ui/resolve-error.stderr
deleted file mode 100644
index 27f93939246c0..0000000000000
--- a/src/test/ui/resolve-error.stderr
+++ /dev/null
@@ -1,62 +0,0 @@
-error: cannot find derive macro `FooWithLongNan` in this scope
- --> $DIR/resolve-error.rs:37:10
- |
-37 | #[derive(FooWithLongNan)]
- | ^^^^^^^^^^^^^^ help: try: `FooWithLongName`
-
-error: cannot find attribute macro `attr_proc_macra` in this scope
- --> $DIR/resolve-error.rs:40:3
- |
-40 | #[attr_proc_macra]
- | ^^^^^^^^^^^^^^^ help: try: `attr_proc_macro`
-
-error: cannot find attribute macro `FooWithLongNan` in this scope
- --> $DIR/resolve-error.rs:43:3
- |
-43 | #[FooWithLongNan]
- | ^^^^^^^^^^^^^^
-
-error: cannot find derive macro `Dlone` in this scope
- --> $DIR/resolve-error.rs:46:10
- |
-46 | #[derive(Dlone)]
- | ^^^^^ help: try: `Clone`
-
-error: cannot find derive macro `Dlona` in this scope
- --> $DIR/resolve-error.rs:49:10
- |
-49 | #[derive(Dlona)]
- | ^^^^^ help: try: `Clona`
-
-error: cannot find derive macro `attr_proc_macra` in this scope
- --> $DIR/resolve-error.rs:52:10
- |
-52 | #[derive(attr_proc_macra)]
- | ^^^^^^^^^^^^^^^
-
-error: cannot find macro `FooWithLongNama!` in this scope
- --> $DIR/resolve-error.rs:56:5
- |
-56 | FooWithLongNama!();
- | ^^^^^^^^^^^^^^^ help: you could try the macro: `FooWithLongNam!`
-
-error: cannot find macro `attr_proc_macra!` in this scope
- --> $DIR/resolve-error.rs:58:5
- |
-58 | attr_proc_macra!();
- | ^^^^^^^^^^^^^^^ help: you could try the macro: `attr_proc_mac!`
-
-error: cannot find macro `Dlona!` in this scope
- --> $DIR/resolve-error.rs:60:5
- |
-60 | Dlona!();
- | ^^^^^
-
-error: cannot find macro `bang_proc_macrp!` in this scope
- --> $DIR/resolve-error.rs:62:5
- |
-62 | bang_proc_macrp!();
- | ^^^^^^^^^^^^^^^ help: you could try the macro: `bang_proc_macro!`
-
-error: aborting due to previous error(s)
-
diff --git a/src/test/ui/span/loan-extend.stderr b/src/test/ui/span/loan-extend.stderr
deleted file mode 100644
index af498129fc440..0000000000000
--- a/src/test/ui/span/loan-extend.stderr
+++ /dev/null
@@ -1,14 +0,0 @@
-error[E0597]: `short` does not live long enough
- --> $DIR/loan-extend.rs:21:1
- |
-19 | long = borrow(&mut short);
- | ----- borrow occurs here
-20 |
-21 | }
- | ^ `short` dropped here while still borrowed
- |
- = note: values in a scope are dropped in the opposite order they are created
-
-error: aborting due to previous error
-
-If you want more information on this error, try using "rustc --explain E0597"
diff --git a/src/tools/tidy/src/lib.rs b/src/tools/tidy/src/lib.rs
index c927ff19b279b..06eb055f68e06 100644
--- a/src/tools/tidy/src/lib.rs
+++ b/src/tools/tidy/src/lib.rs
@@ -51,6 +51,7 @@ pub mod features;
pub mod cargo;
pub mod pal;
pub mod deps;
+pub mod ui_tests;
pub mod unstable_book;
fn filter_dirs(path: &Path) -> bool {
diff --git a/src/tools/tidy/src/main.rs b/src/tools/tidy/src/main.rs
index afa3ebd198319..2497419279560 100644
--- a/src/tools/tidy/src/main.rs
+++ b/src/tools/tidy/src/main.rs
@@ -45,6 +45,7 @@ fn main() {
deps::check(&path, &mut bad);
}
deps::check_whitelist(&path, &cargo, &mut bad);
+ ui_tests::check(&path, &mut bad);
if bad {
eprintln!("some tidy checks failed");
diff --git a/src/tools/tidy/src/ui_tests.rs b/src/tools/tidy/src/ui_tests.rs
new file mode 100644
index 0000000000000..f7fec2e667ab9
--- /dev/null
+++ b/src/tools/tidy/src/ui_tests.rs
@@ -0,0 +1,26 @@
+// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 or the MIT license
+// , at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//! Tidy check to ensure that there are no stray `.stderr` files in UI test directories.
+
+use std::path::Path;
+
+pub fn check(path: &Path, bad: &mut bool) {
+ super::walk_many(&[&path.join("test/ui"), &path.join("test/ui-fulldeps")],
+ &mut |_| false,
+ &mut |file_path| {
+ if let Some(ext) = file_path.extension() {
+ if (ext == "stderr" || ext == "stdout") && !file_path.with_extension("rs").exists() {
+ println!("Stray file with UI testing output: {:?}", file_path);
+ *bad = true;
+ }
+ }
+ });
+}