forked from OSchip/llvm-project
Driver: extract ARCMT flag construction (NFC)
Extract the ARC migration tool flag handling into its own function. This simplifies the flow of the clang frontend command line construction function. NFC. llvm-svn: 312244
This commit is contained in:
parent
c0a976d417
commit
0a322c6c81
|
@ -2119,6 +2119,78 @@ static void RenderOpenCLOptions(const ArgList &Args, ArgStringList &CmdArgs) {
|
|||
CmdArgs.push_back(Args.MakeArgString(A->getOption().getPrefixedName()));
|
||||
}
|
||||
|
||||
static void RenderARCMigrateToolOptions(const Driver &D, const ArgList &Args,
|
||||
ArgStringList &CmdArgs) {
|
||||
bool ARCMTEnabled = false;
|
||||
if (!Args.hasArg(options::OPT_fno_objc_arc, options::OPT_fobjc_arc)) {
|
||||
if (const Arg *A = Args.getLastArg(options::OPT_ccc_arcmt_check,
|
||||
options::OPT_ccc_arcmt_modify,
|
||||
options::OPT_ccc_arcmt_migrate)) {
|
||||
ARCMTEnabled = true;
|
||||
switch (A->getOption().getID()) {
|
||||
default: llvm_unreachable("missed a case");
|
||||
case options::OPT_ccc_arcmt_check:
|
||||
CmdArgs.push_back("-arcmt-check");
|
||||
break;
|
||||
case options::OPT_ccc_arcmt_modify:
|
||||
CmdArgs.push_back("-arcmt-modify");
|
||||
break;
|
||||
case options::OPT_ccc_arcmt_migrate:
|
||||
CmdArgs.push_back("-arcmt-migrate");
|
||||
CmdArgs.push_back("-mt-migrate-directory");
|
||||
CmdArgs.push_back(A->getValue());
|
||||
|
||||
Args.AddLastArg(CmdArgs, options::OPT_arcmt_migrate_report_output);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_arcmt_migrate_emit_arc_errors);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Args.ClaimAllArgs(options::OPT_ccc_arcmt_check);
|
||||
Args.ClaimAllArgs(options::OPT_ccc_arcmt_modify);
|
||||
Args.ClaimAllArgs(options::OPT_ccc_arcmt_migrate);
|
||||
}
|
||||
|
||||
if (const Arg *A = Args.getLastArg(options::OPT_ccc_objcmt_migrate)) {
|
||||
if (ARCMTEnabled)
|
||||
D.Diag(diag::err_drv_argument_not_allowed_with)
|
||||
<< A->getAsString(Args) << "-ccc-arcmt-migrate";
|
||||
|
||||
CmdArgs.push_back("-mt-migrate-directory");
|
||||
CmdArgs.push_back(A->getValue());
|
||||
|
||||
if (!Args.hasArg(options::OPT_objcmt_migrate_literals,
|
||||
options::OPT_objcmt_migrate_subscripting,
|
||||
options::OPT_objcmt_migrate_property)) {
|
||||
// None specified, means enable them all.
|
||||
CmdArgs.push_back("-objcmt-migrate-literals");
|
||||
CmdArgs.push_back("-objcmt-migrate-subscripting");
|
||||
CmdArgs.push_back("-objcmt-migrate-property");
|
||||
} else {
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_literals);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_subscripting);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_property);
|
||||
}
|
||||
} else {
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_literals);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_subscripting);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_all);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_readonly_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_readwrite_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_property_dot_syntax);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_annotation);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_instancetype);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_nsmacros);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_protocol_conformance);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_atomic_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_returns_innerpointer_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_ns_nonatomic_iosonly);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_designated_init);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_whitelist_dir_path);
|
||||
}
|
||||
}
|
||||
|
||||
void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
const InputInfo &Output, const InputInfoList &Inputs,
|
||||
const ArgList &Args, const char *LinkingOutput) const {
|
||||
|
@ -3036,75 +3108,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
|
||||
Args.AddLastArg(CmdArgs, options::OPT_working_directory);
|
||||
|
||||
bool ARCMTEnabled = false;
|
||||
if (!Args.hasArg(options::OPT_fno_objc_arc, options::OPT_fobjc_arc)) {
|
||||
if (const Arg *A = Args.getLastArg(options::OPT_ccc_arcmt_check,
|
||||
options::OPT_ccc_arcmt_modify,
|
||||
options::OPT_ccc_arcmt_migrate)) {
|
||||
ARCMTEnabled = true;
|
||||
switch (A->getOption().getID()) {
|
||||
default:
|
||||
llvm_unreachable("missed a case");
|
||||
case options::OPT_ccc_arcmt_check:
|
||||
CmdArgs.push_back("-arcmt-check");
|
||||
break;
|
||||
case options::OPT_ccc_arcmt_modify:
|
||||
CmdArgs.push_back("-arcmt-modify");
|
||||
break;
|
||||
case options::OPT_ccc_arcmt_migrate:
|
||||
CmdArgs.push_back("-arcmt-migrate");
|
||||
CmdArgs.push_back("-mt-migrate-directory");
|
||||
CmdArgs.push_back(A->getValue());
|
||||
|
||||
Args.AddLastArg(CmdArgs, options::OPT_arcmt_migrate_report_output);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_arcmt_migrate_emit_arc_errors);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Args.ClaimAllArgs(options::OPT_ccc_arcmt_check);
|
||||
Args.ClaimAllArgs(options::OPT_ccc_arcmt_modify);
|
||||
Args.ClaimAllArgs(options::OPT_ccc_arcmt_migrate);
|
||||
}
|
||||
|
||||
if (const Arg *A = Args.getLastArg(options::OPT_ccc_objcmt_migrate)) {
|
||||
if (ARCMTEnabled) {
|
||||
D.Diag(diag::err_drv_argument_not_allowed_with) << A->getAsString(Args)
|
||||
<< "-ccc-arcmt-migrate";
|
||||
}
|
||||
CmdArgs.push_back("-mt-migrate-directory");
|
||||
CmdArgs.push_back(A->getValue());
|
||||
|
||||
if (!Args.hasArg(options::OPT_objcmt_migrate_literals,
|
||||
options::OPT_objcmt_migrate_subscripting,
|
||||
options::OPT_objcmt_migrate_property)) {
|
||||
// None specified, means enable them all.
|
||||
CmdArgs.push_back("-objcmt-migrate-literals");
|
||||
CmdArgs.push_back("-objcmt-migrate-subscripting");
|
||||
CmdArgs.push_back("-objcmt-migrate-property");
|
||||
} else {
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_literals);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_subscripting);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_property);
|
||||
}
|
||||
} else {
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_literals);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_subscripting);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_all);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_readonly_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_readwrite_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_property_dot_syntax);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_annotation);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_instancetype);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_nsmacros);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_protocol_conformance);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_atomic_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_returns_innerpointer_property);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_ns_nonatomic_iosonly);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_migrate_designated_init);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_objcmt_whitelist_dir_path);
|
||||
}
|
||||
RenderARCMigrateToolOptions(D, Args, CmdArgs);
|
||||
|
||||
// Add preprocessing options like -I, -D, etc. if we are using the
|
||||
// preprocessor.
|
||||
|
|
Loading…
Reference in New Issue