forked from OSchip/llvm-project
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> llvm-svn: 176826
This commit is contained in:
parent
a4f4223853
commit
4b3ecba537
|
@ -75,7 +75,7 @@ def err_drv_invalid_libcxx_deployment : Error<
|
|||
"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'">;
|
||||
}
|
||||
|
|
|
@ -1429,12 +1429,18 @@ static bool ShouldDisableCFI(const ArgList &Args,
|
|||
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, const JobAction &JA,
|
|||
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
|
||||
|
|
|
@ -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'
|
Loading…
Reference in New Issue