diff options
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 0082c15..bf57add 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1479,8 +1479,10 @@ void CompilerInvocation::setDefaultPointerAuthOptions( using Key = PointerAuthSchema::ARM8_3Key; using Discrimination = PointerAuthSchema::Discrimination; // If you change anything here, be sure to update <ptrauth.h>. - Opts.FunctionPointers = - PointerAuthSchema(Key::ASIA, false, Discrimination::None); + Opts.FunctionPointers = PointerAuthSchema( + Key::ASIA, false, + LangOpts.PointerAuthFunctionTypeDiscrimination ? Discrimination::Type + : Discrimination::None); Opts.CXXVTablePointers = PointerAuthSchema( Key::ASDA, LangOpts.PointerAuthVTPtrAddressDiscrimination, @@ -3411,6 +3413,8 @@ static void GeneratePointerAuthArgs(const LangOptions &Opts, GenerateArg(Consumer, OPT_fptrauth_vtable_pointer_type_discrimination); if (Opts.PointerAuthInitFini) GenerateArg(Consumer, OPT_fptrauth_init_fini); + if (Opts.PointerAuthFunctionTypeDiscrimination) + GenerateArg(Consumer, OPT_fptrauth_function_pointer_type_discrimination); } static void ParsePointerAuthArgs(LangOptions &Opts, ArgList &Args, @@ -3424,6 +3428,8 @@ static void ParsePointerAuthArgs(LangOptions &Opts, ArgList &Args, Opts.PointerAuthVTPtrTypeDiscrimination = Args.hasArg(OPT_fptrauth_vtable_pointer_type_discrimination); Opts.PointerAuthInitFini = Args.hasArg(OPT_fptrauth_init_fini); + Opts.PointerAuthFunctionTypeDiscrimination = + Args.hasArg(OPT_fptrauth_function_pointer_type_discrimination); } /// Check if input file kind and language standard are compatible. |