]> granicus.if.org Git - clang/commitdiff
Workaround an LLVM bug where inlining functions with debug info breaks
authorDaniel Dunbar <daniel@zuster.org>
Wed, 29 Oct 2008 08:50:02 +0000 (08:50 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 29 Oct 2008 08:50:02 +0000 (08:50 +0000)
code generation.
 - For now, disable running the always inliner pass (at -O0) if we are
   also generating debug information.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58376 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/Backend.cpp

index fe26f1170cebc6a8c9d334c0f71ecd88255c8c91..dbe46fcf2f1aa1f9bf6717c679b34ba8df57c6a5 100644 (file)
@@ -46,6 +46,8 @@ namespace {
     CompileOptions CompileOpts;
     const std::string &InputFile;
     std::string OutputFile;
+    bool GenerateDebugInfo;
+
     llvm::OwningPtr<CodeGenerator> Gen;
     
     llvm::Module *TheModule;
@@ -76,11 +78,12 @@ namespace {
     BackendConsumer(BackendAction action, Diagnostic &Diags, 
                     const LangOptions &Features, const CompileOptions &compopts,
                     const std::string& infile, const std::string& outfile,
-                    bool GenerateDebugInfo)  :
+                    bool debug)  :
       Action(action), 
       CompileOpts(compopts),
       InputFile(infile), 
       OutputFile(outfile), 
+      GenerateDebugInfo(debug),
       Gen(CreateLLVMCodeGen(Diags, Features, InputFile, GenerateDebugInfo)),
       TheModule(0), TheTargetData(0), AsmOutStream(0), ModuleProvider(0),
       CodeGenPasses(0), PerModulePasses(0), PerFunctionPasses(0) {}
@@ -304,7 +307,10 @@ void BackendConsumer::CreatePasses() {
     if (CompileOpts.OptimizationLevel > 1 && CompileOpts.UnitAtATime)
       PM->add(createConstantMergePass());         // Merge dup global constants 
   } else {
-    PM->add(createAlwaysInlinerPass());  
+    // FIXME: Remove this once LLVM doesn't break when inlining
+    // functions with debug info.
+    if (!GenerateDebugInfo)
+      PM->add(createAlwaysInlinerPass());  
   }
 }