@@ -3602,30 +3602,43 @@ static void GeneratePointerAuthArgs(const LangOptions &Opts,
3602
3602
3603
3603
static void ParsePointerAuthArgs (LangOptions &Opts, ArgList &Args,
3604
3604
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);
3619
3631
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);
3622
3634
Opts.AArch64JumpTableHardening =
3623
- Args. hasArg (OPT_faarch64_jump_table_hardening);
3635
+ GetAndCheckPointerAuthArg (OPT_faarch64_jump_table_hardening);
3624
3636
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);
3627
3640
Opts.PointerAuthObjcInterfaceSel =
3628
- Args. hasArg (OPT_fptrauth_objc_interface_sel);
3641
+ GetAndCheckPointerAuthArg (OPT_fptrauth_objc_interface_sel);
3629
3642
3630
3643
if (Opts.PointerAuthObjcInterfaceSel )
3631
3644
Opts.PointerAuthObjcInterfaceSelKey =
@@ -5021,6 +5034,11 @@ bool CompilerInvocation::CreateFromArgsImpl(
5021
5034
InputKind DashX = Res.getFrontendOpts ().DashX ;
5022
5035
ParseTargetArgs (Res.getTargetOpts (), Args, Diags);
5023
5036
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
+ }
5024
5042
ParseHeaderSearchArgs (Res.getHeaderSearchOpts (), Args, Diags,
5025
5043
Res.getFileSystemOpts ().WorkingDir );
5026
5044
if (Res.getFrontendOpts ().GenReducedBMI ||
0 commit comments