@@ -3470,22 +3470,34 @@ 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);
3478
- Opts.PointerAuthVTPtrAddressDiscrimination =
3479
- Args.hasArg (OPT_fptrauth_vtable_pointer_address_discrimination);
3480
- Opts.PointerAuthVTPtrTypeDiscrimination =
3481
- Args.hasArg (OPT_fptrauth_vtable_pointer_type_discrimination);
3482
- Opts.PointerAuthTypeInfoVTPtrDiscrimination =
3483
- Args.hasArg (OPT_fptrauth_type_info_vtable_pointer_discrimination);
3484
- Opts.PointerAuthFunctionTypeDiscrimination =
3485
- Args.hasArg (OPT_fptrauth_function_pointer_type_discrimination);
3486
- Opts.PointerAuthInitFini = Args.hasArg (OPT_fptrauth_init_fini);
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 =
3483
+ GetAndCheckPointerAuthArg (OPT_fptrauth_intrinsics);
3484
+ Opts.PointerAuthCalls = GetAndCheckPointerAuthArg (OPT_fptrauth_calls);
3485
+ Opts.PointerAuthReturns = GetAndCheckPointerAuthArg (OPT_fptrauth_returns);
3486
+ Opts.PointerAuthIndirectGotos =
3487
+ GetAndCheckPointerAuthArg (OPT_fptrauth_indirect_gotos);
3488
+ Opts.PointerAuthAuthTraps =
3489
+ GetAndCheckPointerAuthArg (OPT_fptrauth_auth_traps);
3490
+ Opts.PointerAuthVTPtrAddressDiscrimination = GetAndCheckPointerAuthArg (
3491
+ OPT_fptrauth_vtable_pointer_address_discrimination);
3492
+ Opts.PointerAuthVTPtrTypeDiscrimination = GetAndCheckPointerAuthArg (
3493
+ OPT_fptrauth_vtable_pointer_type_discrimination);
3494
+ Opts.PointerAuthTypeInfoVTPtrDiscrimination = GetAndCheckPointerAuthArg (
3495
+ OPT_fptrauth_type_info_vtable_pointer_discrimination);
3496
+ Opts.PointerAuthFunctionTypeDiscrimination = GetAndCheckPointerAuthArg (
3497
+ OPT_fptrauth_function_pointer_type_discrimination);
3498
+ Opts.PointerAuthInitFini = GetAndCheckPointerAuthArg (OPT_fptrauth_init_fini);
3487
3499
Opts.PointerAuthInitFiniAddressDiscrimination =
3488
- Args. hasArg (OPT_fptrauth_init_fini_address_discrimination);
3500
+ GetAndCheckPointerAuthArg (OPT_fptrauth_init_fini_address_discrimination);
3489
3501
}
3490
3502
3491
3503
// / Check if input file kind and language standard are compatible.
@@ -4895,6 +4907,11 @@ bool CompilerInvocation::CreateFromArgsImpl(
4895
4907
InputKind DashX = Res.getFrontendOpts ().DashX ;
4896
4908
ParseTargetArgs (Res.getTargetOpts (), Args, Diags);
4897
4909
llvm::Triple T (Res.getTargetOpts ().Triple );
4910
+ if (const Arg *PedanticErrors = Args.getLastArgNoClaim (OPT_pedantic_errors);
4911
+ PedanticErrors && T.isArm64e ()) {
4912
+ Diags.Report (diag::err_drv_unsupported_opt_for_target)
4913
+ << PedanticErrors->getSpelling () << T.str ();
4914
+ }
4898
4915
ParseHeaderSearchArgs (Res.getHeaderSearchOpts (), Args, Diags,
4899
4916
Res.getFileSystemOpts ().WorkingDir );
4900
4917
ParseAPINotesArgs (Res.getAPINotesOpts (), Args, Diags);
0 commit comments