]> granicus.if.org Git - clang/commitdiff
clang-cl: Implement /GL in terms of -flto.
authorPeter Collingbourne <peter@pcc.me.uk>
Sat, 6 Jun 2015 02:09:34 +0000 (02:09 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Sat, 6 Jun 2015 02:09:34 +0000 (02:09 +0000)
No documentation yet; the linker needs more work.

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

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

include/clang/Driver/CLCompatOptions.td
lib/Driver/Driver.cpp
lib/Driver/Types.cpp
test/Driver/cl-outputs.c

index 959a72e5389ea5c913115c0f072ea0610b5b3800..e217cb755f6e1baf7c342fc4e176750b5ccb4638 100644 (file)
@@ -202,6 +202,7 @@ def _SLASH_Fi : CLCompileJoined<"Fi">,
 def _SLASH_Fo : CLCompileJoined<"Fo">,
   HelpText<"Set output object file, or directory (ends in / or \\)">,
   MetaVarName<"<file or directory>">;
+def _SLASH_GL : CLFlag<"GL">, Alias<flto>;
 def _SLASH_LD : CLFlag<"LD">, HelpText<"Create DLL">;
 def _SLASH_LDd : CLFlag<"LDd">, HelpText<"Create debug DLL">;
 def _SLASH_link : CLRemainingArgs<"link">,
@@ -286,7 +287,6 @@ def _SLASH_G2 : CLFlag<"G2">;
 def _SLASH_Ge : CLFlag<"Ge">;
 def _SLASH_Gh : CLFlag<"Gh">;
 def _SLASH_GH : CLFlag<"GH">;
-def _SLASH_GL : CLFlag<"GL">;
 def _SLASH_GL_ : CLFlag<"GL-">;
 def _SLASH_Gm : CLFlag<"Gm">;
 def _SLASH_Gm_ : CLFlag<"Gm-">;
index 059f424f75d13acddc565f4ed73af23620e75006..a04a1f8d341925a6588926dc4a023e39be9eb84f 100644 (file)
@@ -1744,7 +1744,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C,
   // Determine what the derived output name should be.
   const char *NamedOutput;
 
-  if (JA.getType() == types::TY_Object &&
+  if ((JA.getType() == types::TY_Object || JA.getType() == types::TY_LTO_BC) &&
       C.getArgs().hasArg(options::OPT__SLASH_Fo, options::OPT__SLASH_o)) {
     // The /Fo or /o flag decides the object filename.
     StringRef Val = C.getArgs().getLastArg(options::OPT__SLASH_Fo,
index 7b281457557bc96076a05bdea29830b814eb1482..0b0878fdd802b01d96a7c8fdc120b038113e0da8 100644 (file)
@@ -45,7 +45,7 @@ types::ID types::getPreprocessedType(ID Id) {
 }
 
 const char *types::getTypeTempSuffix(ID Id, bool CLMode) {
-  if (Id == TY_Object && CLMode)
+  if ((Id == TY_Object || Id == TY_LTO_BC) && CLMode)
     return "obj";
   if (Id == TY_Image && CLMode)
     return "exe";
index be1172f30fcece366597d7253d16c6d73a7ccf05..9359968bdc8bb21589f80db19da2c20b44899a7c 100644 (file)
 // RUN: %clang_cl /P /Fifoo.x /obar.x -### -- %s 2>&1 | FileCheck -check-prefix=FioRACE2 %s
 // FioRACE2: "-E"
 // FioRACE2: "-o" "bar.x"
+
+// RUN: %clang_cl /c /GL -### -- %s 2>&1 | FileCheck -check-prefix=LTO-DEFAULT %s
+// LTO-DEFAULT: "-emit-llvm-bc"{{.*}}"-o" "cl-outputs.obj"
+
+// RUN: %clang_cl /c /GL /Fofoo -### -- %s 2>&1 | FileCheck -check-prefix=LTO-FO %s
+// LTO-FO: "-emit-llvm-bc"{{.*}}"-o" "foo.obj"