]> granicus.if.org Git - clang/commitdiff
[Driver] Fix the case when use -fembed-bitcode and -flto= together
authorSteven Wu <stevenwu@apple.com>
Wed, 18 May 2016 17:04:52 +0000 (17:04 +0000)
committerSteven Wu <stevenwu@apple.com>
Wed, 18 May 2016 17:04:52 +0000 (17:04 +0000)
Summary:
-fembed-bitcode was only checking for old style LTO flag (-flto) but not
considering the new -flto= style option. That makes clang output bitcode
embedded in bitcode object when using -flto= and -fembed-bitcode= together.
Now clang should output normal bitcode file when using LTO and ignores
-fembed-bitcode option.

Reviewers: joker.eph

Subscribers: joker.eph, cfe-commits

Differential Revision: http://reviews.llvm.org/D20374

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

lib/Driver/Driver.cpp
test/Driver/embed-bitcode.c

index 1f2c64eaf7344f2c1b8a5ef8022b79f921643ba6..be2971de598c23579fae2ed74002fe6a9e8156f3 100644 (file)
@@ -504,9 +504,11 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
                     .Default(SaveTempsCwd);
   }
 
+  setLTOMode(Args);
+
   // Ignore -fembed-bitcode options with LTO
   // since the output will be bitcode anyway.
-  if (!Args.hasFlag(options::OPT_flto, options::OPT_fno_lto, false)) {
+  if (getLTOMode() == LTOK_None) {
     if (Arg *A = Args.getLastArg(options::OPT_fembed_bitcode_EQ)) {
       StringRef Name = A->getValue();
       unsigned Model = llvm::StringSwitch<unsigned>(Name)
@@ -526,8 +528,6 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
     Args.ClaimAllArgs(options::OPT_fembed_bitcode_EQ);
   }
 
-  setLTOMode(Args);
-
   std::unique_ptr<llvm::opt::InputArgList> UArgs =
       llvm::make_unique<InputArgList>(std::move(Args));
 
index 4c014fcb2a1544666f20da89c98f5a95f720927e..da60da3fff7b5dfaa9788cc7d0da3402383ef693 100644 (file)
@@ -27,6 +27,8 @@
 // CHECK-SAVE-TEMP: -cc1as
 
 // RUN: %clang -c %s -flto -fembed-bitcode 2>&1 -### | FileCheck %s -check-prefix=CHECK-LTO
+// RUN: %clang -c %s -flto=full -fembed-bitcode 2>&1 -### | FileCheck %s -check-prefix=CHECK-LTO
+// RUN: %clang -c %s -flto=thin -fembed-bitcode 2>&1 -### | FileCheck %s -check-prefix=CHECK-LTO
 // CHECK-LTO: -cc1
 // CHECK-LTO: -emit-llvm-bc
 // CHECK-LTO-NOT: warning: argument unused during compilation: '-fembed-bitcode'