diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs
index 735c9d8af7a..82c252ae4d7 100644
--- a/src/librustdoc/html/markdown.rs
+++ b/src/librustdoc/html/markdown.rs
@@ -190,8 +190,8 @@ fn next(&mut self) -> Option {
.map(|l| map_line(l).for_code())
.collect::>().join("\n");
let krate = krate.as_ref().map(|s| &**s);
- let test = test::maketest(&test, krate, false,
- &Default::default());
+ let test = test::make_test(&test, krate, false,
+ &Default::default());
let channel = if test.contains("#![feature(") {
"&version=nightly"
} else {
@@ -584,8 +584,8 @@ pub fn render(w: &mut fmt::Formatter,
.map(|l| map_line(l).for_code())
.collect::>().join("\n");
let krate = krate.as_ref().map(|s| &**s);
- let test = test::maketest(&test, krate, false,
- &Default::default());
+ let test = test::make_test(&test, krate, false,
+ &Default::default());
let channel = if test.contains("#![feature(") {
"&version=nightly"
} else {
diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs
index fff047c99c0..b1fb343b8bb 100644
--- a/src/librustdoc/test.rs
+++ b/src/librustdoc/test.rs
@@ -174,16 +174,16 @@ fn scrape_test_config(krate: &::rustc::hir::Crate) -> TestOptions {
opts
}
-fn runtest(test: &str, cratename: &str, cfgs: Vec, libs: SearchPaths,
- externs: Externs,
- should_panic: bool, no_run: bool, as_test_harness: bool,
- compile_fail: bool, mut error_codes: Vec, opts: &TestOptions,
- maybe_sysroot: Option) {
+fn run_test(test: &str, cratename: &str, filename: &str, cfgs: Vec, libs: SearchPaths,
+ externs: Externs,
+ should_panic: bool, no_run: bool, as_test_harness: bool,
+ compile_fail: bool, mut error_codes: Vec, opts: &TestOptions,
+ maybe_sysroot: Option) {
// the test harness wants its own `main` & top level functions, so
// never wrap the test in `fn main() { ... }`
- let test = maketest(test, Some(cratename), as_test_harness, opts);
+ let test = make_test(test, Some(cratename), as_test_harness, opts);
let input = config::Input::Str {
- name: driver::anon_src(),
+ name: filename.to_owned(),
input: test.to_owned(),
};
let outputs = OutputTypes::new(&[(OutputType::Exe, None)]);
@@ -320,8 +320,11 @@ fn drop(&mut self) {
}
}
-pub fn maketest(s: &str, cratename: Option<&str>, dont_insert_main: bool,
- opts: &TestOptions) -> String {
+pub fn make_test(s: &str,
+ cratename: Option<&str>,
+ dont_insert_main: bool,
+ opts: &TestOptions)
+ -> String {
let (crate_attrs, everything_else) = partition_source(s);
let mut prog = String::new();
@@ -505,18 +508,19 @@ pub fn add_test(&mut self, test: String,
rustc_driver::in_rustc_thread(move || {
io::set_panic(panic);
io::set_print(print);
- runtest(&test,
- &cratename,
- cfgs,
- libs,
- externs,
- should_panic,
- no_run,
- as_test_harness,
- compile_fail,
- error_codes,
- &opts,
- maybe_sysroot)
+ run_test(&test,
+ &cratename,
+ &filename,
+ cfgs,
+ libs,
+ externs,
+ should_panic,
+ no_run,
+ as_test_harness,
+ compile_fail,
+ error_codes,
+ &opts,
+ maybe_sysroot)
})
} {
Ok(()) => (),
diff --git a/src/libsyntax/ext/source_util.rs b/src/libsyntax/ext/source_util.rs
index b293aa8de38..95fe41be122 100644
--- a/src/libsyntax/ext/source_util.rs
+++ b/src/libsyntax/ext/source_util.rs
@@ -193,13 +193,14 @@ pub fn expand_include_bytes(cx: &mut ExtCtxt, sp: Span, tts: &[tokenstream::Toke
// resolve a file-system path to an absolute file-system path (if it
// isn't already)
fn res_rel_file(cx: &mut ExtCtxt, sp: syntax_pos::Span, arg: &Path) -> PathBuf {
- // NB: relative paths are resolved relative to the compilation unit
+ // Relative paths are resolved relative to the file in which they are found
+ // after macro expansion (that is, they are unhygienic).
if !arg.is_absolute() {
let callsite = sp.source_callsite();
- let mut cu = PathBuf::from(&cx.codemap().span_to_filename(callsite));
- cu.pop();
- cu.push(arg);
- cu
+ let mut path = PathBuf::from(&cx.codemap().span_to_filename(callsite));
+ path.pop();
+ path.push(arg);
+ path
} else {
arg.to_path_buf()
}
diff --git a/src/test/rustdoc/issue-43153.rs b/src/test/rustdoc/issue-43153.rs
new file mode 100644
index 00000000000..6ac341d8b02
--- /dev/null
+++ b/src/test/rustdoc/issue-43153.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.
+
+// Test that `include!` in a doc test searches relative to the directory in
+// which the test is declared.
+
+// compile-flags:--test
+
+/// ```rust
+/// include!("auxiliary/empty.rs");
+/// fn main() {}
+/// ```
+pub struct Foo;