about summary refs log tree commit diff
path: root/src/rustllvm/RustWrapper.cpp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-03-28 16:47:33 -0700
committerBrian Anderson <banderson@mozilla.com>2013-04-10 18:49:51 -0700
commita34948a2c5d7cd296abda6970652a9513d67feb7 (patch)
treebc485ce2e6e6ed416a08412edd85085a16211f93 /src/rustllvm/RustWrapper.cpp
parent344628fe91ffa0fad32bc5b3eee3e6b4b48c9990 (diff)
downloadrust-a34948a2c5d7cd296abda6970652a9513d67feb7.tar.gz
rust-a34948a2c5d7cd296abda6970652a9513d67feb7.zip
rustllvm: Initialize target analysis passes
Without this the target info for certain optimizations will not be
created and the compiler will sometimes crash
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
-rw-r--r--src/rustllvm/RustWrapper.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp
index 68483b0280f..5d422b2d2ed 100644
--- a/src/rustllvm/RustWrapper.cpp
+++ b/src/rustllvm/RustWrapper.cpp
@@ -452,6 +452,8 @@ LLVMRustWriteOutputFile(LLVMPassManagerRef PMR,
   Options.NoFramePointerElim = true;
   Options.EnableSegmentedStacks = EnableSegmentedStacks;
 
+  PassManager *PM = unwrap<PassManager>(PMR);
+
   std::string Err;
   std::string Trip(Triple::normalize(triple));
   std::string FeaturesStr;
@@ -461,8 +463,9 @@ LLVMRustWriteOutputFile(LLVMPassManagerRef PMR,
     TheTarget->createTargetMachine(Trip, CPUStr, FeaturesStr,
 				   Options, Reloc::PIC_,
 				   CodeModel::Default, OptLevel);
+  Target->addAnalysisPasses(*PM);
+
   bool NoVerify = false;
-  PassManager *PM = unwrap<PassManager>(PMR);
   std::string ErrorInfo;
   raw_fd_ostream OS(path, ErrorInfo,
                     raw_fd_ostream::F_Binary);