diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp --- a/llvm/lib/IR/AutoUpgrade.cpp +++ b/llvm/lib/IR/AutoUpgrade.cpp @@ -32,12 +32,18 @@ #include "llvm/IR/Metadata.h" #include "llvm/IR/Module.h" #include "llvm/IR/Verifier.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Regex.h" #include "llvm/TargetParser/Triple.h" #include + using namespace llvm; +static cl::opt + DisableAutoUpgradeDebugInfo("disable-auto-upgrade-debug-info", + cl::desc("Disable autoupgrade of debug info")); + static void rename(GlobalValue *GV) { GV->setName(GV->getName() + ".old"); } // Upgrade the declarations of the SSE4.1 ptest intrinsics whose arguments have @@ -4480,6 +4486,9 @@ /// Check the debug info version number, if it is out-dated, drop the debug /// info. Return true if module is modified. bool llvm::UpgradeDebugInfo(Module &M) { + if (DisableAutoUpgradeDebugInfo) + return false; + unsigned Version = getDebugMetadataVersionFromModule(M); if (Version == DEBUG_METADATA_VERSION) { bool BrokenDebugInfo = false; @@ -4988,7 +4997,6 @@ } void llvm::UpgradeOperandBundles(std::vector &Bundles) { - // clang.arc.attachedcall bundles are now required to have an operand. // If they don't, it's okay to drop them entirely: when there is an operand, // the "attachedcall" is meaningful and required, but without an operand, diff --git a/llvm/test/LTO/X86/strip-debug-info.ll b/llvm/test/LTO/X86/strip-debug-info.ll --- a/llvm/test/LTO/X86/strip-debug-info.ll +++ b/llvm/test/LTO/X86/strip-debug-info.ll @@ -24,10 +24,18 @@ ; RUN: -exported-symbol foo -exported-symbol _foo \ ; RUN: %t-stripped.bc -disable-verify 2>&1 | \ ; RUN: FileCheck %s -allow-empty -check-prefix=CHECK-WARN +; ---- Thin LTO (optimize, don't strip imported file) +; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %t-stripped.bc %t2.bc +; RUN: llvm-lto -thinlto -thinlto-action=import -disable-auto-upgrade-debug-info \ +; RUN: -thinlto-index=%t.index.bc \ +; RUN: -exported-symbol foo -exported-symbol _foo \ +; RUN: %t-stripped.bc -disable-verify 2>&1 | \ +; RUN: FileCheck %s -allow-empty -check-prefix=CHECK-NO-WARN ; CHECK-WARN: warning{{.*}} ignoring invalid debug info ; CHECK-WARN-NOT: Broken module found ; CHECK: foo +; CHECK-NO-WARN-NOT: ignoring invalid debug info target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.12"