@@ -3602,30 +3602,43 @@ static void GeneratePointerAuthArgs(const LangOptions &Opts,
36023602
36033603static void ParsePointerAuthArgs (LangOptions &Opts, ArgList &Args,
36043604 DiagnosticsEngine &Diags) {
3605- Opts.PointerAuthIntrinsics = Args.hasArg (OPT_fptrauth_intrinsics);
3606- Opts.PointerAuthCalls = Args.hasArg (OPT_fptrauth_calls);
3607- Opts.PointerAuthReturns = Args.hasArg (OPT_fptrauth_returns);
3608- Opts.PointerAuthIndirectGotos = Args.hasArg (OPT_fptrauth_indirect_gotos);
3609- Opts.PointerAuthAuthTraps = Args.hasArg (OPT_fptrauth_auth_traps);
3610- Opts.PointerAuthVTPtrAddressDiscrimination =
3611- Args.hasArg (OPT_fptrauth_vtable_pointer_address_discrimination);
3612- Opts.PointerAuthVTPtrTypeDiscrimination =
3613- Args.hasArg (OPT_fptrauth_vtable_pointer_type_discrimination);
3614- Opts.PointerAuthTypeInfoVTPtrDiscrimination =
3615- Args.hasArg (OPT_fptrauth_type_info_vtable_pointer_discrimination);
3616- Opts.PointerAuthFunctionTypeDiscrimination =
3617- Args.hasArg (OPT_fptrauth_function_pointer_type_discrimination);
3618- Opts.PointerAuthInitFini = Args.hasArg (OPT_fptrauth_init_fini);
3605+ const Arg *PedanticErrors = Args.getLastArgNoClaim (OPT_pedantic_errors);
3606+ auto GetAndCheckPointerAuthArg = [&](driver::options::ID Option) {
3607+ Arg *OptionArg = Args.getLastArg (Option);
3608+ if (OptionArg && PedanticErrors) {
3609+ Diags.Report (diag::err_drv_incompatible_options)
3610+ << OptionArg->getSpelling () << PedanticErrors->getSpelling ();
3611+ }
3612+ return OptionArg != nullptr ;
3613+ };
3614+ Opts.PointerAuthIntrinsics =
3615+ GetAndCheckPointerAuthArg (OPT_fptrauth_intrinsics);
3616+ Opts.PointerAuthCalls = GetAndCheckPointerAuthArg (OPT_fptrauth_calls);
3617+ Opts.PointerAuthReturns = GetAndCheckPointerAuthArg (OPT_fptrauth_returns);
3618+ Opts.PointerAuthIndirectGotos =
3619+ GetAndCheckPointerAuthArg (OPT_fptrauth_indirect_gotos);
3620+ Opts.PointerAuthAuthTraps =
3621+ GetAndCheckPointerAuthArg (OPT_fptrauth_auth_traps);
3622+ Opts.PointerAuthVTPtrAddressDiscrimination = GetAndCheckPointerAuthArg (
3623+ OPT_fptrauth_vtable_pointer_address_discrimination);
3624+ Opts.PointerAuthVTPtrTypeDiscrimination = GetAndCheckPointerAuthArg (
3625+ OPT_fptrauth_vtable_pointer_type_discrimination);
3626+ Opts.PointerAuthTypeInfoVTPtrDiscrimination = GetAndCheckPointerAuthArg (
3627+ OPT_fptrauth_type_info_vtable_pointer_discrimination);
3628+ Opts.PointerAuthFunctionTypeDiscrimination = GetAndCheckPointerAuthArg (
3629+ OPT_fptrauth_function_pointer_type_discrimination);
3630+ Opts.PointerAuthInitFini = GetAndCheckPointerAuthArg (OPT_fptrauth_init_fini);
36193631 Opts.PointerAuthInitFiniAddressDiscrimination =
3620- Args. hasArg (OPT_fptrauth_init_fini_address_discrimination);
3621- Opts.PointerAuthELFGOT = Args. hasArg (OPT_fptrauth_elf_got);
3632+ GetAndCheckPointerAuthArg (OPT_fptrauth_init_fini_address_discrimination);
3633+ Opts.PointerAuthELFGOT = GetAndCheckPointerAuthArg (OPT_fptrauth_elf_got);
36223634 Opts.AArch64JumpTableHardening =
3623- Args. hasArg (OPT_faarch64_jump_table_hardening);
3635+ GetAndCheckPointerAuthArg (OPT_faarch64_jump_table_hardening);
36243636
3625- Opts.PointerAuthObjcIsa = Args.hasArg (OPT_fptrauth_objc_isa);
3626- Opts.PointerAuthObjcClassROPointers = Args.hasArg (OPT_fptrauth_objc_class_ro);
3637+ Opts.PointerAuthObjcIsa = GetAndCheckPointerAuthArg (OPT_fptrauth_objc_isa);
3638+ Opts.PointerAuthObjcClassROPointers =
3639+ GetAndCheckPointerAuthArg (OPT_fptrauth_objc_class_ro);
36273640 Opts.PointerAuthObjcInterfaceSel =
3628- Args. hasArg (OPT_fptrauth_objc_interface_sel);
3641+ GetAndCheckPointerAuthArg (OPT_fptrauth_objc_interface_sel);
36293642
36303643 if (Opts.PointerAuthObjcInterfaceSel )
36313644 Opts.PointerAuthObjcInterfaceSelKey =
@@ -5021,6 +5034,11 @@ bool CompilerInvocation::CreateFromArgsImpl(
50215034 InputKind DashX = Res.getFrontendOpts ().DashX ;
50225035 ParseTargetArgs (Res.getTargetOpts (), Args, Diags);
50235036 llvm::Triple T (Res.getTargetOpts ().Triple );
5037+ if (const Arg *PedanticErrors = Args.getLastArgNoClaim (OPT_pedantic_errors);
5038+ PedanticErrors && T.isArm64e ()) {
5039+ Diags.Report (diag::err_drv_unsupported_opt_for_target)
5040+ << PedanticErrors->getSpelling () << T.str ();
5041+ }
50245042 ParseHeaderSearchArgs (Res.getHeaderSearchOpts (), Args, Diags,
50255043 Res.getFileSystemOpts ().WorkingDir );
50265044 if (Res.getFrontendOpts ().GenReducedBMI ||
0 commit comments