r176826 - Disallow using -fmodules with -no-integrated-as.

Ted Kremenek kremenek at apple.com
Mon Mar 11 13:51:53 PDT 2013


Author: kremenek
Date: Mon Mar 11 15:51:52 2013
New Revision: 176826

URL: http://llvm.org/viewvc/llvm-project?rev=176826&view=rev
Log:
Disallow using -fmodules with -no-integrated-as.

Modules enables features such as auto-linking, and we simply do not want to
support a matrix of subtly enabled/disabled features depending on whether or
not a user is using the integrated assembler.

It isn't clear if this is the best place to do this check.  For one thing,
these kind of errors are not caught by the serialized diagnostics.

Fixes <rdar://problem/13289240>

Added:
    cfe/trunk/test/Driver/modules_integrated_as.c
Modified:
    cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
    cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=176826&r1=176825&r2=176826&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Mon Mar 11 15:51:52 2013
@@ -75,7 +75,7 @@ def err_drv_invalid_libcxx_deployment :
   "invalid deployment target for -stdlib=libc++ (requires %0 or later)">;
 def err_drv_invalid_feature : Error<
   "invalid feature '%0' for CPU '%1'">;
-
+  
 def err_drv_I_dash_not_supported : Error<
   "'%0' not supported, please use -iquote instead">;
 def err_drv_unknown_argument : Error<"unknown argument: '%0'">;
@@ -150,4 +150,9 @@ def err_analyzer_config_no_value : Error
   "analyzer-config option '%0' has a key but no value">;
 def err_analyzer_config_multiple_values : Error<
   "analyzer-config option '%0' should contain only one '='">;
+  
+def err_drv_modules_integrated_as : Error<
+  "modules can only be used with the compiler's integrated assembler">;
+def note_drv_modules_integrated_as : Note<
+  "'-no-integrated-as' cannot be used with '-fmodules'">;
 }

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=176826&r1=176825&r2=176826&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Mon Mar 11 15:51:52 2013
@@ -1429,12 +1429,18 @@ static bool ShouldDisableCFI(const ArgLi
                        Default);
 }
 
-static bool ShouldDisableDwarfDirectory(const ArgList &Args,
-                                        const ToolChain &TC) {
+static bool ShouldUseIntegratedAssembler(const ArgList &Args,
+                                         const ToolChain &TC) {
   bool IsIADefault = TC.IsIntegratedAssemblerDefault();
   bool UseIntegratedAs = Args.hasFlag(options::OPT_integrated_as,
                                       options::OPT_no_integrated_as,
                                       IsIADefault);
+  return UseIntegratedAs;
+}
+
+static bool ShouldDisableDwarfDirectory(const ArgList &Args,
+                                        const ToolChain &TC) {
+  bool UseIntegratedAs = ShouldUseIntegratedAssembler(Args, TC);
   bool UseDwarfDirectory = Args.hasFlag(options::OPT_fdwarf_directory_asm,
                                         options::OPT_fno_dwarf_directory_asm,
                                         UseIntegratedAs);
@@ -2778,6 +2784,12 @@ void Clang::ConstructJob(Compilation &C,
       CmdArgs.push_back("-fmodules");
       HaveModules = true;
     }
+
+    if (HaveModules && !ShouldUseIntegratedAssembler(Args, getToolChain())) {
+      D.Diag(diag::err_drv_modules_integrated_as);
+      D.Diag(diag::note_drv_modules_integrated_as);
+      return;
+    }
   }
 
   // If a module path was provided, pass it along. Otherwise, use a temporary

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=176826&view=auto
==============================================================================
--- cfe/trunk/test/Driver/modules_integrated_as.c (added)
+++ cfe/trunk/test/Driver/modules_integrated_as.c Mon Mar 11 15:51:52 2013
@@ -0,0 +1,4 @@
+// RUN: %clang -fmodules -no-integrated-as -fsyntax-only %s 2>&1 | FileCheck %s
+
+// CHECK: error: modules can only be used with the compiler's integrated assembler
+// CHECK note: '-no-integrated-as' cannot be used with '-fmodules'





More information about the cfe-commits mailing list