Index: lib/Driver/Tools.cpp =================================================================== --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -3606,7 +3606,9 @@ // loading the bitcode up in 'opt' or 'llc' and running passes gives the // same result as running passes here. For LTO, we don't need to preserve // the use-list order, since serialization to bitcode is part of the flow. - if (JA.getType() == types::TY_LLVM_BC) + // For embed-bitcode, bitcode is directly embedded without serialization. + if (JA.getType() == types::TY_LLVM_BC && + !C.getDriver().embedBitcodeEnabled()) CmdArgs.push_back("-emit-llvm-uselists"); if (D.isUsingLTO()) Index: test/Driver/embed-bitcode.c =================================================================== --- test/Driver/embed-bitcode.c +++ test/Driver/embed-bitcode.c @@ -5,6 +5,7 @@ // RUN: %clang %s -fembed-bitcode 2>&1 -### | FileCheck %s -check-prefix=CHECK-CC // CHECK-CC: -cc1 // CHECK-CC: -emit-llvm-bc +// CHECK-CC-NOT: -emit-llvm-uselists // CHECK-CC: -cc1 // CHECK-CC: -emit-obj // CHECK-CC: -fembed-bitcode @@ -24,3 +25,13 @@ // CHECK-MARKER: -fembed-bitcode-marker // CHECK-MARKER-NOT: -cc1 +// Check clang complains about ios version min if it is used to generate link command. +// RUN: %clang -target armv7-apple-darwin -miphoneos-version-min=6.0 %s -fembed-bitcode -### 2>&1 | \ +// RUN: FileCheck %s -check-prefix=CHECK-PLATFORM-SUPPORTED +// RUN: %clang -target armv7-apple-darwin -miphoneos-version-min=5.0 %s -fembed-bitcode -### 2>&1 | \ +// RUN: FileCheck %s -check-prefix=CHECK-PLATFORM-UNSUPPORTED +// RUN: %clang -target armv7-apple-darwin -miphoneos-version-min=5.0 -c %s -fembed-bitcode -### 2>&1 | \ +// RUN: FileCheck %s -check-prefix=CHECK-PLATFORM-SUPPORTED +// CHECK-PLATFORM-SUPPORTED-NOT: -fembed-bitcode is not supported on versions of iOS prior to 6.0 +// CHECK-PLATFORM-UNSUPPORTED: -fembed-bitcode is not supported on versions of iOS prior to 6.0 +