Skip to content

Commit 1b2cebc

Browse files
committed
auto merge of #11170 : alexcrichton/rust/fix-llvm-race, r=pcwalton
This also appears to fix a race in LLVM that was causing a deadlock on the bots during the doc-test tests (where we use rustc in parallel).
2 parents d2a4a10 + b6a7463 commit 1b2cebc

File tree

1 file changed

+25
-25
lines changed

1 file changed

+25
-25
lines changed

src/librustc/back/link.rs

+25-25
Original file line numberDiff line numberDiff line change
@@ -111,38 +111,14 @@ pub mod write {
111111
let llmod = trans.module;
112112
let llcx = trans.context;
113113
unsafe {
114-
llvm::LLVMInitializePasses();
115-
116-
// Only initialize the platforms supported by Rust here, because
117-
// using --llvm-root will have multiple platforms that rustllvm
118-
// doesn't actually link to and it's pointless to put target info
119-
// into the registry that Rust can not generate machine code for.
120-
llvm::LLVMInitializeX86TargetInfo();
121-
llvm::LLVMInitializeX86Target();
122-
llvm::LLVMInitializeX86TargetMC();
123-
llvm::LLVMInitializeX86AsmPrinter();
124-
llvm::LLVMInitializeX86AsmParser();
125-
126-
llvm::LLVMInitializeARMTargetInfo();
127-
llvm::LLVMInitializeARMTarget();
128-
llvm::LLVMInitializeARMTargetMC();
129-
llvm::LLVMInitializeARMAsmPrinter();
130-
llvm::LLVMInitializeARMAsmParser();
131-
132-
llvm::LLVMInitializeMipsTargetInfo();
133-
llvm::LLVMInitializeMipsTarget();
134-
llvm::LLVMInitializeMipsTargetMC();
135-
llvm::LLVMInitializeMipsAsmPrinter();
136-
llvm::LLVMInitializeMipsAsmParser();
114+
configure_llvm(sess);
137115

138116
if sess.opts.save_temps {
139117
output.with_extension("no-opt.bc").with_c_str(|buf| {
140118
llvm::LLVMWriteBitcodeToFile(llmod, buf);
141119
})
142120
}
143121

144-
configure_llvm(sess);
145-
146122
let OptLevel = match sess.opts.optimize {
147123
session::No => lib::llvm::CodeGenLevelNone,
148124
session::Less => lib::llvm::CodeGenLevelLess,
@@ -367,6 +343,30 @@ pub mod write {
367343

368344
LOCK.lock();
369345
if !CONFIGURED {
346+
llvm::LLVMInitializePasses();
347+
348+
// Only initialize the platforms supported by Rust here, because
349+
// using --llvm-root will have multiple platforms that rustllvm
350+
// doesn't actually link to and it's pointless to put target info
351+
// into the registry that Rust can not generate machine code for.
352+
llvm::LLVMInitializeX86TargetInfo();
353+
llvm::LLVMInitializeX86Target();
354+
llvm::LLVMInitializeX86TargetMC();
355+
llvm::LLVMInitializeX86AsmPrinter();
356+
llvm::LLVMInitializeX86AsmParser();
357+
358+
llvm::LLVMInitializeARMTargetInfo();
359+
llvm::LLVMInitializeARMTarget();
360+
llvm::LLVMInitializeARMTargetMC();
361+
llvm::LLVMInitializeARMAsmPrinter();
362+
llvm::LLVMInitializeARMAsmParser();
363+
364+
llvm::LLVMInitializeMipsTargetInfo();
365+
llvm::LLVMInitializeMipsTarget();
366+
llvm::LLVMInitializeMipsTargetMC();
367+
llvm::LLVMInitializeMipsAsmPrinter();
368+
llvm::LLVMInitializeMipsAsmParser();
369+
370370
llvm::LLVMRustSetLLVMOptions(llvm_args.len() as c_int,
371371
llvm_args.as_ptr());
372372
CONFIGURED = true;

0 commit comments

Comments
 (0)