r176897 - [driver] Only enable -fmodules-autolink if we are using the integrated assembler.

Ted Kremenek kremenek at apple.com
Tue Mar 12 14:08:08 PDT 2013


Author: kremenek
Date: Tue Mar 12 16:08:08 2013
New Revision: 176897

URL: http://llvm.org/viewvc/llvm-project?rev=176897&view=rev
Log:
[driver] Only enable -fmodules-autolink if we are using the integrated assembler.

Fixes <rdar://problem/13289240>

Added:
    cfe/trunk/test/Driver/modules_integrated_as.c
Modified:
    cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=176897&r1=176896&r2=176897&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Tue Mar 12 16:08:08 2013
@@ -1414,15 +1414,21 @@ static void addExceptionArgs(const ArgLi
     CmdArgs.push_back("-fexceptions");
 }
 
+/// \brief Check if the toolchain should use the integrated assembler.
+static bool ShouldUseIntegratedAssembler(const ArgList &Args,
+                                         const ToolChain &TC) {
+  return Args.hasFlag(options::OPT_integrated_as,
+                      options::OPT_no_integrated_as,
+                      TC.IsIntegratedAssemblerDefault());
+}
+
 static bool ShouldDisableCFI(const ArgList &Args,
                              const ToolChain &TC) {
   bool Default = true;
   if (TC.getTriple().isOSDarwin()) {
     // The native darwin assembler doesn't support cfi directives, so
     // we disable them if we think the .s file will be passed to it.
-    Default = Args.hasFlag(options::OPT_integrated_as,
-                           options::OPT_no_integrated_as,
-                           TC.IsIntegratedAssemblerDefault());
+    Default = ShouldUseIntegratedAssembler(Args, TC);
   }
   return !Args.hasFlag(options::OPT_fdwarf2_cfi_asm,
                        options::OPT_fno_dwarf2_cfi_asm,
@@ -1431,13 +1437,9 @@ static bool ShouldDisableCFI(const ArgLi
 
 static bool ShouldDisableDwarfDirectory(const ArgList &Args,
                                         const ToolChain &TC) {
-  bool IsIADefault = TC.IsIntegratedAssemblerDefault();
-  bool UseIntegratedAs = Args.hasFlag(options::OPT_integrated_as,
-                                      options::OPT_no_integrated_as,
-                                      IsIADefault);
   bool UseDwarfDirectory = Args.hasFlag(options::OPT_fdwarf_directory_asm,
                                         options::OPT_fno_dwarf_directory_asm,
-                                        UseIntegratedAs);
+                                        ShouldUseIntegratedAssembler(Args, TC));
   return !UseDwarfDirectory;
 }
 
@@ -2802,8 +2804,9 @@ void Clang::ConstructJob(Compilation &C,
   Args.AddAllArgs(CmdArgs, options::OPT_fmodules_ignore_macro);
 
   // -fmodules-autolink (on by default when modules is enabled) automatically
-  // links against libraries for imported modules.
-  if (HaveModules &&
+  // links against libraries for imported modules.  This requires the
+  // integrated assembler.
+  if (HaveModules && ShouldUseIntegratedAssembler(Args, getToolChain()) &&
       Args.hasFlag(options::OPT_fmodules_autolink,
                    options::OPT_fno_modules_autolink,
                    true)) {

Added: cfe/trunk/test/Driver/modules_integrated_as.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/modules_integrated_as.c?rev=176897&view=auto
==============================================================================
--- cfe/trunk/test/Driver/modules_integrated_as.c (added)
+++ cfe/trunk/test/Driver/modules_integrated_as.c Tue Mar 12 16:08:08 2013
@@ -0,0 +1,6 @@
+// RUN: %clang -fsyntax-only modules_integrated_as.c -fmodules -no-integrated-as -### 2>&1 | FileCheck %s
+
+// Test that the autolinking feature is disabled with *not* using the
+// integrated assembler.
+
+// CHECK-NOT: -fmodules-autolink





More information about the cfe-commits mailing list