]> granicus.if.org Git - clang/commitdiff
Produce an error when trying to link with -emit-llvm.
authorRafael Espindola <rafael.espindola@gmail.com>
Sun, 25 Aug 2013 14:27:09 +0000 (14:27 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sun, 25 Aug 2013 14:27:09 +0000 (14:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189193 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticDriverKinds.td
lib/Driver/Driver.cpp
test/Driver/lto.c

index 81c1e5849f7c5faa7725275dcf2f6dd4b276ad1d..26d39149e6b0eb140b10726698ad220bd9034b6f 100644 (file)
@@ -109,6 +109,8 @@ def err_drv_mg_requires_m_or_mm : Error<
   "option '-MG' requires '-M' or '-MM'">;
 def err_drv_unknown_objc_runtime : Error<
   "unknown or ill-formed Objective-C runtime '%0'">;
+def err_drv_emit_llvm_link : Error<
+   "-emit-llvm cannot be used when linking">;
 
 def warn_c_kext : Warning<
   "ignoring -fapple-kext which is valid for C++ and Objective-C++ only">;
index a309625ac400ffd9867c1f1a79889738783c43a8..de589628b774e570f7c173b232840a15ea5234ce 100644 (file)
@@ -1171,6 +1171,10 @@ void Driver::BuildActions(const ToolChain &TC, DerivedArgList &Args,
   Arg *FinalPhaseArg;
   phases::ID FinalPhase = getFinalPhase(Args, &FinalPhaseArg);
 
+  if (FinalPhase == phases::Link && Args.hasArg(options::OPT_emit_llvm)) {
+    Diag(clang::diag::err_drv_emit_llvm_link);
+  }
+
   // Reject -Z* at the top level, these options should never have been exposed
   // by gcc.
   if (Arg *A = Args.getLastArg(options::OPT_Z_Joined))
index 511c19b578e87d8b74d51b5a763f65d6c9c1e74a..91524bf78b1d688324c1f3bae28435b45798e08d 100644 (file)
@@ -18,3 +18,5 @@
 // RUN: %clang %s -flto -S -### 2> %t.log
 // RUN: grep '"-o" ".*lto\.s" "-x" "c" ".*lto\.c"' %t.log
 
+// RUN: not %clang %s -emit-llvm 2>&1 | FileCheck --check-prefix=LLVM-LINK %s
+// LLVM-LINK: -emit-llvm cannot be used when linking