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 16 pull requests #62182

Closed
wants to merge 40 commits into from
Closed
Changes from 2 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
b66dcb9
explain better that structural pinning is a per-field choice
RalfJung Jun 15, 2019
c489636
mention that overwrite-without-drop also violates the drop guarantee,…
RalfJung Jun 15, 2019
665aa3e
minor edits
RalfJung Jun 15, 2019
86e283a
keep links in local crate where possible
RalfJung Jun 16, 2019
2eb074d
make example code typecheck at least
RalfJung Jun 16, 2019
f250951
Apply suggestions from code review
RalfJung Jun 19, 2019
bf03a3c
nits
RalfJung Jun 19, 2019
a99a7b7
Remove FnBox.
Centril Jun 22, 2019
1c12b1b
call out explicitly that general read needs to be called with an init…
RalfJung Jun 24, 2019
b75021b
refactor lexer to use idiomatic borrowing
matklad Jun 25, 2019
0f34d7a
Updated RELEASES.md for 1.36.0
XAMPPRocky Jun 23, 2019
ba12e78
Add more tests for async/await
cramertj Jun 25, 2019
57db25e
cleanup: rename name_from to symbol_from
matklad Jun 25, 2019
390f717
tweak wording
RalfJung Jun 25, 2019
5cb841d
Don't ICE on item in `.await` expression
doctorn Jun 26, 2019
182ce77
remove old fixme
mark-i-m Jun 26, 2019
72ca844
Add regression test for MIR drop generation in async loops
cramertj Jun 26, 2019
7e62050
Update books
ehuss Jun 26, 2019
e053eed
Remove outdated question_mark_macro_sep lint
ia0 Jun 26, 2019
b366f2b
Implement mem::{zeroed,uninitialized} in terms of MaybeUninit.
alex Jun 26, 2019
768d500
save-analysis: use buffered writes
jsgf Jun 27, 2019
b608749
rustc: Retry SIGILL linker invocations
alexcrichton Jun 27, 2019
d79104b
Update RLS
Xanewok Jun 27, 2019
8819420
Add suggestion for missing `.await` keyword
doctorn Jun 19, 2019
ed8cba1
Rollup merge of #61878 - RalfJung:pin, r=Dylan-DPC
Centril Jun 27, 2019
ebdf01c
Rollup merge of #62043 - Centril:remove-fnbox, r=cramertj
Centril Jun 27, 2019
2cdfff8
Rollup merge of #62067 - doctorn:await_diagnostic, r=matthewjasper
Centril Jun 27, 2019
5343acd
Rollup merge of #62076 - XAMPPRocky:master, r=XAMPPRocky
Centril Jun 27, 2019
d95e074
Rollup merge of #62102 - RalfJung:read, r=Centril
Centril Jun 27, 2019
de92646
Rollup merge of #62106 - cramertj:test-await, r=centril
Centril Jun 27, 2019
13d2727
Rollup merge of #62124 - matklad:without-with, r=petrochenkov
Centril Jun 27, 2019
2a0a6a4
Rollup merge of #62150 - alex:mem-uninit-refactor, r=RalfJung,oli-obk…
Centril Jun 27, 2019
cf53bc6
Rollup merge of #62152 - doctorn:async_let_ice, r=cramertj
Centril Jun 27, 2019
457e9e6
Rollup merge of #62154 - mark-i-m:old-fixme, r=Centril
Centril Jun 27, 2019
54adc9f
Rollup merge of #62155 - cramertj:61872, r=centril
Centril Jun 27, 2019
a067d22
Rollup merge of #62156 - ehuss:update-books, r=ehuss
Centril Jun 27, 2019
9551ab9
Rollup merge of #62160 - ia0:question_mark_macro_sep, r=petrochenkov
Centril Jun 27, 2019
0b690f0
Rollup merge of #62164 - jsgf:buffer-save-analysis, r=Xanewok
Centril Jun 27, 2019
ab7143c
Rollup merge of #62171 - alexcrichton:more-restarts, r=eddyb
Centril Jun 27, 2019
24a356f
Rollup merge of #62176 - Xanewok:update-rls, r=alexcrichton
Centril Jun 27, 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
71 changes: 47 additions & 24 deletions src/librustc_codegen_ssa/back/link.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use std::fmt;
use std::fs;
use std::io;
use std::path::{Path, PathBuf};
use std::process::{Output, Stdio};
use std::process::{Output, Stdio, ExitStatus};
use std::str;
use std::env;

Expand Down Expand Up @@ -510,21 +510,6 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
sess.abort_if_errors();

// Invoke the system linker
//
// Note that there's a terribly awful hack that really shouldn't be present
// in any compiler. Here an environment variable is supported to
// automatically retry the linker invocation if the linker looks like it
// segfaulted.
//
// Gee that seems odd, normally segfaults are things we want to know about!
// Unfortunately though in rust-lang/rust#38878 we're experiencing the
// linker segfaulting on Travis quite a bit which is causing quite a bit of
// pain to land PRs when they spuriously fail due to a segfault.
//
// The issue #38878 has some more debugging information on it as well, but
// this unfortunately looks like it's just a race condition in macOS's linker
// with some thread pool working in the background. It seems that no one
// currently knows a fix for this so in the meantime we're left with this...
info!("{:?}", &cmd);
let retry_on_segfault = env::var("RUSTC_RETRY_LINKER_ON_SEGFAULT").is_ok();
let mut prog;
Expand Down Expand Up @@ -567,21 +552,59 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(sess: &'a Session,
info!("{:?}", &cmd);
continue;
}

// Here's a terribly awful hack that really shouldn't be present in any
// compiler. Here an environment variable is supported to automatically
// retry the linker invocation if the linker looks like it segfaulted.
//
// Gee that seems odd, normally segfaults are things we want to know
// about! Unfortunately though in rust-lang/rust#38878 we're
// experiencing the linker segfaulting on Travis quite a bit which is
// causing quite a bit of pain to land PRs when they spuriously fail
// due to a segfault.
//
// The issue #38878 has some more debugging information on it as well,
// but this unfortunately looks like it's just a race condition in
// macOS's linker with some thread pool working in the background. It
// seems that no one currently knows a fix for this so in the meantime
// we're left with this...
if !retry_on_segfault || i > 3 {
break
}
let msg_segv = "clang: error: unable to execute command: Segmentation fault: 11";
let msg_bus = "clang: error: unable to execute command: Bus error: 10";
if !(out.contains(msg_segv) || out.contains(msg_bus)) {
break
if out.contains(msg_segv) || out.contains(msg_bus) {
warn!(
"looks like the linker segfaulted when we tried to call it, \
automatically retrying again. cmd = {:?}, out = {}.",
cmd,
out,
);
continue;
}

warn!(
"looks like the linker segfaulted when we tried to call it, \
automatically retrying again. cmd = {:?}, out = {}.",
cmd,
out,
);
if is_illegal_instruction(&output.status) {
warn!(
"looks like the linker hit an illegal instruction when we \
tried to call it, automatically retrying again. cmd = {:?}, ]\
out = {}, status = {}.",
cmd,
out,
output.status,
);
continue;
}

#[cfg(unix)]
fn is_illegal_instruction(status: &ExitStatus) -> bool {
use std::os::unix::prelude::*;
status.signal() == Some(libc::SIGILL)
}

#[cfg(windows)]
fn is_illegal_instruction(_status: &ExitStatus) -> bool {
false
}
}

match prog {
Expand Down