From 74f6cf927af94712412a2b5e20c9ad59a84680c3 Mon Sep 17 00:00:00 2001 From: Steven Wu <stevenwu@apple.com> Date: Wed, 18 May 2016 17:04:52 +0000 Subject: [PATCH] [Driver] Fix the case when use -fembed-bitcode and -flto= together 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 | 6 +++--- test/Driver/embed-bitcode.c | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 1f2c64eaf73..be2971de598 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -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)); diff --git a/test/Driver/embed-bitcode.c b/test/Driver/embed-bitcode.c index 4c014fcb2a1..da60da3fff7 100644 --- a/test/Driver/embed-bitcode.c +++ b/test/Driver/embed-bitcode.c @@ -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' -- GitLab