@@ -3470,22 +3470,31 @@ static void GeneratePointerAuthArgs(const LangOptions &Opts,
3470
3470
3471
3471
static void ParsePointerAuthArgs (LangOptions &Opts, ArgList &Args,
3472
3472
DiagnosticsEngine &Diags) {
3473
- Opts.PointerAuthIntrinsics = Args.hasArg (OPT_fptrauth_intrinsics);
3474
- Opts.PointerAuthCalls = Args.hasArg (OPT_fptrauth_calls);
3475
- Opts.PointerAuthReturns = Args.hasArg (OPT_fptrauth_returns);
3476
- Opts.PointerAuthIndirectGotos = Args.hasArg (OPT_fptrauth_indirect_gotos);
3477
- Opts.PointerAuthAuthTraps = Args.hasArg (OPT_fptrauth_auth_traps);
3473
+ const Arg *PedanticErrors = Args.getLastArgNoClaim (OPT_pedantic_errors);
3474
+ auto GetAndCheckPointerAuthArg = [&](driver::options::ID Option) {
3475
+ Arg *OptionArg = Args.getLastArg (Option);
3476
+ if (OptionArg && PedanticErrors) {
3477
+ Diags.Report (diag::err_drv_incompatible_options)
3478
+ << OptionArg->getSpelling () << PedanticErrors->getSpelling ();
3479
+ }
3480
+ return OptionArg != nullptr ;
3481
+ };
3482
+ Opts.PointerAuthIntrinsics = GetAndCheckPointerAuthArg (OPT_fptrauth_intrinsics);
3483
+ Opts.PointerAuthCalls = GetAndCheckPointerAuthArg (OPT_fptrauth_calls);
3484
+ Opts.PointerAuthReturns = GetAndCheckPointerAuthArg (OPT_fptrauth_returns);
3485
+ Opts.PointerAuthIndirectGotos = GetAndCheckPointerAuthArg (OPT_fptrauth_indirect_gotos);
3486
+ Opts.PointerAuthAuthTraps = GetAndCheckPointerAuthArg (OPT_fptrauth_auth_traps);
3478
3487
Opts.PointerAuthVTPtrAddressDiscrimination =
3479
- Args. hasArg (OPT_fptrauth_vtable_pointer_address_discrimination);
3488
+ GetAndCheckPointerAuthArg (OPT_fptrauth_vtable_pointer_address_discrimination);
3480
3489
Opts.PointerAuthVTPtrTypeDiscrimination =
3481
- Args. hasArg (OPT_fptrauth_vtable_pointer_type_discrimination);
3490
+ GetAndCheckPointerAuthArg (OPT_fptrauth_vtable_pointer_type_discrimination);
3482
3491
Opts.PointerAuthTypeInfoVTPtrDiscrimination =
3483
- Args. hasArg (OPT_fptrauth_type_info_vtable_pointer_discrimination);
3492
+ GetAndCheckPointerAuthArg (OPT_fptrauth_type_info_vtable_pointer_discrimination);
3484
3493
Opts.PointerAuthFunctionTypeDiscrimination =
3485
- Args. hasArg (OPT_fptrauth_function_pointer_type_discrimination);
3486
- Opts.PointerAuthInitFini = Args. hasArg (OPT_fptrauth_init_fini);
3494
+ GetAndCheckPointerAuthArg (OPT_fptrauth_function_pointer_type_discrimination);
3495
+ Opts.PointerAuthInitFini = GetAndCheckPointerAuthArg (OPT_fptrauth_init_fini);
3487
3496
Opts.PointerAuthInitFiniAddressDiscrimination =
3488
- Args. hasArg (OPT_fptrauth_init_fini_address_discrimination);
3497
+ GetAndCheckPointerAuthArg (OPT_fptrauth_init_fini_address_discrimination);
3489
3498
}
3490
3499
3491
3500
// / Check if input file kind and language standard are compatible.
@@ -4895,6 +4904,11 @@ bool CompilerInvocation::CreateFromArgsImpl(
4895
4904
InputKind DashX = Res.getFrontendOpts ().DashX ;
4896
4905
ParseTargetArgs (Res.getTargetOpts (), Args, Diags);
4897
4906
llvm::Triple T (Res.getTargetOpts ().Triple );
4907
+ if (const Arg *PedanticErrors = Args.getLastArgNoClaim (OPT_pedantic_errors);
4908
+ PedanticErrors && T.isArm64e ()) {
4909
+ Diags.Report (diag::err_drv_unsupported_opt_for_target)
4910
+ << PedanticErrors->getSpelling () << T.str ();
4911
+ }
4898
4912
ParseHeaderSearchArgs (Res.getHeaderSearchOpts (), Args, Diags,
4899
4913
Res.getFileSystemOpts ().WorkingDir );
4900
4914
ParseAPINotesArgs (Res.getAPINotesOpts (), Args, Diags);
0 commit comments