Index: cfe/trunk/lib/Driver/Driver.cpp =================================================================== --- cfe/trunk/lib/Driver/Driver.cpp +++ cfe/trunk/lib/Driver/Driver.cpp @@ -504,9 +504,11 @@ .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(Name) @@ -526,8 +528,6 @@ Args.ClaimAllArgs(options::OPT_fembed_bitcode_EQ); } - setLTOMode(Args); - std::unique_ptr UArgs = llvm::make_unique(std::move(Args)); Index: cfe/trunk/test/Driver/embed-bitcode.c =================================================================== --- cfe/trunk/test/Driver/embed-bitcode.c +++ cfe/trunk/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'