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

Benjamin Kramer benny.kra at gmail.com
Tue Mar 12 08:00:21 PDT 2013


On 11.03.2013, at 21:51, Ted Kremenek <kremenek at apple.com> wrote:

> 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.

This made modules test fail on targets that don't have -integrated-as on by default. Should we limit this behavior to targets that chose to have IA on by default?

- Ben

> 
> 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'
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits





More information about the cfe-commits mailing list