Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 7 pull requests #65952

Closed
wants to merge 26 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
fb4095d
Update comments re type parameter hack in object safety
mikeyhew Oct 26, 2019
e216b65
Remove sanitizer runtime crates
tmiasko Oct 6, 2019
93c5639
Remove sanitizer_runtime attribute
tmiasko Oct 7, 2019
d56ab6d
Link sanitizer runtimes instead of injecting crate dependencies
tmiasko Oct 6, 2019
160791b
Enable sanitizer-leak test case
tmiasko Oct 8, 2019
7d6f869
Document sanitizers in unstable-book
tmiasko Oct 16, 2019
e42800b
Copy sanitizer runtimes as part of copy_third_party_objects
tmiasko Oct 27, 2019
58b67c8
Use structured suggestion for unnecessary bounds in type aliases
estebank Oct 28, 2019
4479de4
ci: extract uploading artifacts into a script
pietroalbini Oct 10, 2019
0200050
ci: upload toolstates.json to rust-lang-ci2
pietroalbini Oct 10, 2019
bdfcde4
Apply suggestions from lzutao
pietroalbini Oct 29, 2019
afbb89e
Optimize long-linker-command-line test
tmiasko Oct 28, 2019
c3521fe
Custom lifetime error for `impl` item doesn't conform to `trait`
estebank Oct 3, 2019
ef2a853
review comments
estebank Oct 4, 2019
6998085
Point at the trait item and tweak wording
estebank Oct 15, 2019
9ae0c1d
Make error apply only to impl/trait mismatch
estebank Oct 15, 2019
a3b8687
Fix NLL test
estebank Oct 15, 2019
213fd1f
Silence crate external span error in x86 platforms
estebank Oct 29, 2019
08ca236
Add lint for unnecessary parens around types
jack-t Oct 4, 2019
ab9b789
Rollup merge of #65068 - estebank:trait-impl-lt-mismatch, r=nikomatsakis
tmandry Oct 30, 2019
da5d7a7
Rollup merge of #65112 - jack-t:type-parens-lint, r=varkor
tmandry Oct 30, 2019
e9022da
Rollup merge of #65241 - tmiasko:no-std-san, r=nikomatsakis
tmandry Oct 30, 2019
2004e09
Rollup merge of #65274 - pietroalbini:ci-upload-toolstate, r=alexcric…
tmandry Oct 30, 2019
d34aa17
Rollup merge of #65850 - mikeyhew:patch-1, r=nikomatsakis
tmandry Oct 30, 2019
40f8f56
Rollup merge of #65914 - estebank:type-alias-bounds-sugg, r=davidtwco
tmandry Oct 30, 2019
167a8f5
Rollup merge of #65945 - tmiasko:long-linker-command-line, r=alexcric…
tmandry Oct 30, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 0 additions & 48 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3412,17 +3412,6 @@ dependencies = [
"smallvec",
]

[[package]]
name = "rustc_asan"
version = "0.0.0"
dependencies = [
"alloc",
"build_helper",
"cmake",
"compiler_builtins",
"core",
]

[[package]]
name = "rustc_codegen_llvm"
version = "0.0.0"
Expand Down Expand Up @@ -3620,17 +3609,6 @@ dependencies = [
"cc",
]

[[package]]
name = "rustc_lsan"
version = "0.0.0"
dependencies = [
"alloc",
"build_helper",
"cmake",
"compiler_builtins",
"core",
]

[[package]]
name = "rustc_macros"
version = "0.1.0"
Expand Down Expand Up @@ -3685,17 +3663,6 @@ dependencies = [
"syntax_pos",
]

[[package]]
name = "rustc_msan"
version = "0.0.0"
dependencies = [
"alloc",
"build_helper",
"cmake",
"compiler_builtins",
"core",
]

[[package]]
name = "rustc_passes"
version = "0.0.0"
Expand Down Expand Up @@ -3809,17 +3776,6 @@ dependencies = [
"syntax_pos",
]

[[package]]
name = "rustc_tsan"
version = "0.0.0"
dependencies = [
"alloc",
"build_helper",
"cmake",
"compiler_builtins",
"core",
]

[[package]]
name = "rustc_typeck"
version = "0.0.0"
Expand Down Expand Up @@ -4175,10 +4131,6 @@ dependencies = [
"panic_unwind",
"profiler_builtins",
"rand 0.7.0",
"rustc_asan",
"rustc_lsan",
"rustc_msan",
"rustc_tsan",
"unwind",
"wasi",
]
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ impl Step for Std {
let compiler = builder.compiler(0, builder.config.build);

let mut cargo = builder.cargo(compiler, Mode::Std, target, cargo_subcommand(builder.kind));
std_cargo(builder, &compiler, target, &mut cargo);
std_cargo(builder, target, &mut cargo);

builder.info(&format!("Checking std artifacts ({} -> {})", &compiler.host, target));
run_cargo(builder,
Expand Down
139 changes: 103 additions & 36 deletions src/bootstrap/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ impl Step for Std {
target_deps.extend(copy_third_party_objects(builder, &compiler, target).into_iter());

let mut cargo = builder.cargo(compiler, Mode::Std, target, "build");
std_cargo(builder, &compiler, target, &mut cargo);
std_cargo(builder, target, &mut cargo);

builder.info(&format!("Building stage{} std artifacts ({} -> {})", compiler.stage,
&compiler.host, target));
Expand Down Expand Up @@ -157,13 +157,18 @@ fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target:
copy_and_stamp(Path::new(&src), "libunwind.a");
}

if builder.config.sanitizers && compiler.stage != 0 {
// The sanitizers are only copied in stage1 or above,
// to avoid creating dependency on LLVM.
target_deps.extend(copy_sanitizers(builder, &compiler, target));
}

target_deps
}

/// Configure cargo to compile the standard library, adding appropriate env vars
/// and such.
pub fn std_cargo(builder: &Builder<'_>,
compiler: &Compiler,
target: Interned<String>,
cargo: &mut Cargo) {
if let Some(target) = env::var_os("MACOSX_STD_DEPLOYMENT_TARGET") {
Expand Down Expand Up @@ -208,21 +213,6 @@ pub fn std_cargo(builder: &Builder<'_>,
let mut features = builder.std_features();
features.push_str(&compiler_builtins_c_feature);

if compiler.stage != 0 && builder.config.sanitizers {
// This variable is used by the sanitizer runtime crates, e.g.
// rustc_lsan, to build the sanitizer runtime from C code
// When this variable is missing, those crates won't compile the C code,
// so we don't set this variable during stage0 where llvm-config is
// missing
// We also only build the runtimes when --enable-sanitizers (or its
// config.toml equivalent) is used
let llvm_config = builder.ensure(native::Llvm {
target: builder.config.build,
});
cargo.env("LLVM_CONFIG", llvm_config);
cargo.env("RUSTC_BUILD_SANITIZERS", "1");
}

cargo.arg("--features").arg(features)
.arg("--manifest-path")
.arg(builder.src.join("src/libtest/Cargo.toml"));
Expand Down Expand Up @@ -280,31 +270,108 @@ impl Step for StdLink {
let libdir = builder.sysroot_libdir(target_compiler, target);
let hostdir = builder.sysroot_libdir(target_compiler, compiler.host);
add_to_sysroot(builder, &libdir, &hostdir, &libstd_stamp(builder, compiler, target));
}
}

/// Copies sanitizer runtime libraries into target libdir.
fn copy_sanitizers(builder: &Builder<'_>,
compiler: &Compiler,
target: Interned<String>) -> Vec<PathBuf> {
let mut target_deps = Vec::new();

let sanitizers = supported_sanitizers(target);
if sanitizers.is_empty() {
return target_deps;
}

let llvm_config: PathBuf = builder.ensure(native::Llvm {
target: compiler.host,
});
if builder.config.dry_run {
return target_deps;
}

// The compiler-rt installs sanitizer runtimes into clang resource directory.
let clang_resourcedir = clang_resourcedir(&llvm_config);
let libdir = builder.sysroot_libdir(*compiler, target);

if builder.config.sanitizers && compiler.stage != 0 && target == "x86_64-apple-darwin" {
// The sanitizers are only built in stage1 or above, so the dylibs will
// be missing in stage0 and causes panic. See the `std()` function above
// for reason why the sanitizers are not built in stage0.
copy_apple_sanitizer_dylibs(builder, &builder.native_dir(target), "osx", &libdir);
for (path, name) in &sanitizers {
let src = clang_resourcedir.join(path);
let dst = libdir.join(name);
if !src.exists() {
println!("Ignoring missing runtime: {}", src.display());
continue;
}
builder.copy(&src, &dst);

if target == "x86_64-apple-darwin" {
// Update the library install name reflect the fact it has been renamed.
let status = Command::new("install_name_tool")
.arg("-id")
.arg(format!("@rpath/{}", name))
.arg(&dst)
.status()
.expect("failed to execute `install_name_tool`");
assert!(status.success());
}

target_deps.push(dst);
}

target_deps
}

fn copy_apple_sanitizer_dylibs(
builder: &Builder<'_>,
native_dir: &Path,
platform: &str,
into: &Path,
) {
for &sanitizer in &["asan", "tsan"] {
let filename = format!("lib__rustc__clang_rt.{}_{}_dynamic.dylib", sanitizer, platform);
let mut src_path = native_dir.join(sanitizer);
src_path.push("build");
src_path.push("lib");
src_path.push("darwin");
src_path.push(&filename);
builder.copy(&src_path, &into.join(filename));
/// Returns path to clang's resource directory.
fn clang_resourcedir(llvm_config: &Path) -> PathBuf {
let llvm_version = output(Command::new(&llvm_config).arg("--version"));
let llvm_version = llvm_version.trim();
let llvm_libdir = output(Command::new(&llvm_config).arg("--libdir"));
let llvm_libdir = PathBuf::from(llvm_libdir.trim());

// Determine CLANG_VERSION by stripping LLVM_VERSION_SUFFIX from LLVM_VERSION.
let mut non_digits = 0;
let mut third_non_digit = llvm_version.len();
for (i, c) in llvm_version.char_indices() {
if !c.is_digit(10) {
non_digits += 1;
if non_digits == 3 {
third_non_digit = i;
break;
}
}
}
let clang_version = &llvm_version[..third_non_digit];
llvm_libdir.join("clang").join(&clang_version)
}

/// Returns a list of paths to sanitizer libraries supported on given target,
/// and corresponding names we plan to give them when placed in target libdir.
///
/// Returned paths are relative to clang's resource directory.
fn supported_sanitizers(target: Interned<String>) -> Vec<(PathBuf, String)> {
let sanitizers = &["asan", "lsan", "msan", "tsan"];
let mut result = Vec::new();
match &*target {
"x86_64-apple-darwin" => {
let srcdir = Path::new("lib/darwin");
for s in sanitizers {
let src = format!("libclang_rt.{}_osx_dynamic.dylib", s);
let dst = format!("librustc_rt.{}.dylib", s);
result.push((srcdir.join(src), dst));
}

}
"x86_64-unknown-linux-gnu" => {
let srcdir = Path::new("lib/linux");
for s in sanitizers {
let src = format!("libclang_rt.{}-x86_64.a", s);
let dst = format!("librustc_rt.{}.a", s);
result.push((srcdir.join(src), dst));
}
}
_ => {}
}
result
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
Expand Down
4 changes: 0 additions & 4 deletions src/bootstrap/dist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -960,10 +960,6 @@ impl Step for Src {
"src/libcore",
"src/libpanic_abort",
"src/libpanic_unwind",
"src/librustc_asan",
"src/librustc_lsan",
"src/librustc_msan",
"src/librustc_tsan",
"src/libstd",
"src/libunwind",
"src/libtest",
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/doc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ impl Step for Std {

let run_cargo_rustdoc_for = |package: &str| {
let mut cargo = builder.cargo(compiler, Mode::Std, target, "rustdoc");
compile::std_cargo(builder, &compiler, target, &mut cargo);
compile::std_cargo(builder, target, &mut cargo);

// Keep a whitelist so we do not build internal stdlib crates, these will be
// build by the rustc step later if enabled.
Expand Down
7 changes: 7 additions & 0 deletions src/bootstrap/native.rs
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,13 @@ impl Step for Llvm {
enabled_llvm_projects.push("compiler-rt");
}

if builder.config.sanitizers {
enabled_llvm_projects.push("compiler-rt");
cfg.define("COMPILER_RT_BUILD_SANITIZERS", "ON");
// Avoids building instrumented version of libcxx.
cfg.define("COMPILER_RT_USE_LIBCXX", "OFF");
}

if builder.config.lldb_enabled {
enabled_llvm_projects.push("clang");
enabled_llvm_projects.push("lldb");
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1764,7 +1764,7 @@ impl Step for Crate {
let mut cargo = builder.cargo(compiler, mode, target, test_kind.subcommand());
match mode {
Mode::Std => {
compile::std_cargo(builder, &compiler, target, &mut cargo);
compile::std_cargo(builder, target, &mut cargo);
}
Mode::Rustc => {
builder.ensure(compile::Rustc { compiler, target });
Expand Down
Loading