[clang] [clang][PAC][darwin] Set correct default ptrauth features for arm64e-darwin (PR #153722)
Oliver Hunt via cfe-commits
cfe-commits at lists.llvm.org
Sun Aug 17 15:13:54 PDT 2025
https://github.com/ojhunt updated https://github.com/llvm/llvm-project/pull/153722
>From 0cbb0846f270c6d6cb15492ba34ff9ae2ed33f67 Mon Sep 17 00:00:00 2001
From: Oliver Hunt <oliver at apple.com>
Date: Thu, 14 Aug 2025 17:43:03 -0700
Subject: [PATCH 1/3] [clang][PAC][darwin] Set correct default ptrauth features
for arm64e-darwin
This PR makes sure that when targeting arm64e on darwin platforms
the correct flags are set for the userspace platform ABI.
---
clang/include/clang/Basic/Features.def | 2 +-
clang/lib/Driver/ToolChains/Darwin.cpp | 33 +++++++
clang/test/Driver/ptrauth-platform-defaults.c | 85 +++++++++++++++++++
clang/test/Sema/ptrauth-platform-defaults.c | 45 ++++++++++
4 files changed, 164 insertions(+), 1 deletion(-)
create mode 100644 clang/test/Driver/ptrauth-platform-defaults.c
create mode 100644 clang/test/Sema/ptrauth-platform-defaults.c
diff --git a/clang/include/clang/Basic/Features.def b/clang/include/clang/Basic/Features.def
index b9efc6a6a2e9d..e59c33a695a4d 100644
--- a/clang/include/clang/Basic/Features.def
+++ b/clang/include/clang/Basic/Features.def
@@ -164,7 +164,7 @@ FEATURE(ptrauth_elf_got, LangOpts.PointerAuthELFGOT)
FEATURE(ptrauth_objc_isa, LangOpts.PointerAuthObjcIsa)
FEATURE(ptrauth_objc_interface_sel, LangOpts.PointerAuthObjcInterfaceSel)
-FEATURE(ptrauth_objc_signable_class, true)
+FEATURE(ptrauth_objc_signable_class, LangOpts.PointerAuthCalls || LangOpts.PointerAuthIntrinsics)
FEATURE(ptrauth_objc_method_list_pointer, LangOpts.PointerAuthCalls)
EXTENSION(swiftcc,
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp
index e5075cbcaf660..6dd170d6f2b8c 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -3291,6 +3291,39 @@ void Darwin::addClangTargetOptions(
if (!RequiresSubdirectorySearch)
CC1Args.push_back("-fno-modulemap-allow-subdirectory-search");
}
+
+ if (getTriple().isArm64e()) {
+ auto EnsureDefaultPtrauthFlag = [&](OptSpecifier Pos, OptSpecifier Neg) {
+ assert(Pos != Neg);
+ if (const Arg *Opt = DriverArgs.getLastArg(Pos, Neg);
+ Opt && Opt->getOption().matches(Neg))
+ return;
+ Option PosOpt = getDriverOptTable().getOption(Pos);
+ CC1Args.push_back(PosOpt.getPrefixedName().data());
+ };
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_calls,
+ options::OPT_fno_ptrauth_calls);
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_returns,
+ options::OPT_fno_ptrauth_returns);
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_intrinsics,
+ options::OPT_fno_ptrauth_intrinsics);
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_indirect_gotos,
+ options::OPT_fno_ptrauth_indirect_gotos);
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_auth_traps,
+ options::OPT_fno_ptrauth_auth_traps);
+ EnsureDefaultPtrauthFlag(
+ options::OPT_fptrauth_vtable_pointer_address_discrimination,
+ options::OPT_fno_ptrauth_vtable_pointer_address_discrimination);
+ EnsureDefaultPtrauthFlag(
+ options::OPT_fptrauth_vtable_pointer_type_discrimination,
+ options::OPT_fno_ptrauth_vtable_pointer_type_discrimination);
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_isa,
+ options::OPT_fno_ptrauth_objc_isa);
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_class_ro,
+ options::OPT_fno_ptrauth_objc_class_ro);
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_interface_sel,
+ options::OPT_fno_ptrauth_objc_interface_sel);
+ }
}
void Darwin::addClangCC1ASTargetOptions(
diff --git a/clang/test/Driver/ptrauth-platform-defaults.c b/clang/test/Driver/ptrauth-platform-defaults.c
new file mode 100644
index 0000000000000..aa2968d9025bc
--- /dev/null
+++ b/clang/test/Driver/ptrauth-platform-defaults.c
@@ -0,0 +1,85 @@
+// RUN: %clang -target arm64 -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target arm64-apple-macosx -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target arm64-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target arm64-apple-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target arm64-apple-ios-macabi -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target arm64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target arm64e-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target aarch64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
+// RUN: %clang -target arm64e-apple-ios -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
+// RUN: %clang -target arm64e-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
+// RUN: %clang -target arm64e-apple-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
+// RUN: %clang -target arm64e-apple-ios-macabi -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
+
+// A simple test case to test basic override logic
+// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH_OVERRIDE -fno-ptrauth-calls %s -fsyntax-only -Xclang -verify=darwin_ptrauth_override
+
+#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \
+ _Static_assert(enabled == __has_##kind(feature), \
+ "Expected to have the " #feature " " #kind " enabled");
+
+#define ASSERT_FEATURE_ENABLED(feature_name) \
+ ASSERT_MODE_AND_KIND(feature_name, 1, feature)
+#define ASSERT_FEATURE_DISABLED(feature_name) \
+ ASSERT_MODE_AND_KIND(feature_name, 0, feature)
+#define ASSERT_EXTENSION_ENABLED(extension_name) \
+ ASSERT_MODE_AND_KIND(extension_name, 1, extension)
+#define ASSERT_EXTENSION_DISABLED(extension_name) \
+ ASSERT_MODE_AND_KIND(extension_name, 0, extension)
+
+#if defined(DARWIN_DEFAULT_PTRAUTH) || defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE)
+ASSERT_FEATURE_ENABLED(ptrauth_intrinsics)
+ASSERT_EXTENSION_ENABLED(ptrauth_qualifier)
+
+#if defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE)
+ASSERT_FEATURE_DISABLED(ptrauth_calls)
+// These flags directly reflect the state of ptrauth_calls, but exist
+// for backward compatibility reasons
+ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer)
+#else
+ASSERT_FEATURE_ENABLED(ptrauth_calls)
+ASSERT_FEATURE_ENABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_method_list_pointer)
+#endif
+
+ASSERT_FEATURE_ENABLED(ptrauth_returns)
+ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_address_discrimination)
+ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors)
+ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination)
+ASSERT_FEATURE_ENABLED(ptrauth_indirect_gotos)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_elf_got)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_isa)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_interface_sel)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_signable_class)
+#endif
+
+#ifdef NO_DEFAULT_PTRAUTH
+ASSERT_FEATURE_DISABLED(ptrauth_intrinsics)
+ASSERT_EXTENSION_DISABLED(ptrauth_qualifier)
+ASSERT_FEATURE_DISABLED(ptrauth_calls)
+ASSERT_FEATURE_DISABLED(ptrauth_returns)
+ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors)
+ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_elf_got)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_isa)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer)
+#endif
+
+// darwin_ptrauth_defaults-no-diagnostics
+// no_default_ptrauth-no-diagnostics
+// darwin_ptrauth_override-no-diagnostics
diff --git a/clang/test/Sema/ptrauth-platform-defaults.c b/clang/test/Sema/ptrauth-platform-defaults.c
new file mode 100644
index 0000000000000..0dcddbfa22f76
--- /dev/null
+++ b/clang/test/Sema/ptrauth-platform-defaults.c
@@ -0,0 +1,45 @@
+// RUN: %clang_cc1 -triple arm64 %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64-apple-macosx %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64-darwin %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64-apple-darwin %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64-apple-ios-macabi %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64-linux-gnu %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64e-linux-gnu %s -fsyntax-only
+// RUN: %clang_cc1 -triple aarch64-linux-gnu %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64e-apple-macosx %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64e-apple-ios %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64e-darwin %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64e-apple-darwin %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64e-apple-ios-macabi %s -fsyntax-only
+
+// The -cc1 mode should not insert default ptrauth flags
+
+#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \
+ _Static_assert(enabled == __has_##kind(feature), \
+ "Expected to have the " #feature " " #kind " enabled");
+
+#define ASSERT_FEATURE_DISABLED(feature_name) \
+ ASSERT_MODE_AND_KIND(feature_name, 0, feature)
+#define ASSERT_EXTENSION_DISABLED(extension_name) \
+ ASSERT_MODE_AND_KIND(extension_name, 0, extension)
+
+ASSERT_FEATURE_DISABLED(ptrauth_intrinsics)
+ASSERT_EXTENSION_DISABLED(ptrauth_qualifier)
+ASSERT_FEATURE_DISABLED(ptrauth_calls)
+ASSERT_FEATURE_DISABLED(ptrauth_returns)
+ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors)
+ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_elf_got)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_isa)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer)
+
+// expected-no-diagnostics
>From 4f7927f26fe87c885c71d70fe1060d07e64bf54f Mon Sep 17 00:00:00 2001
From: Oliver Hunt <oliver at apple.com>
Date: Sun, 17 Aug 2025 04:39:03 -0700
Subject: [PATCH 2/3] addressng feedback
---
clang/lib/Driver/ToolChains/Darwin.cpp | 97 +++++++++----------
clang/test/Driver/arch-arm64e.c | 37 ++++---
clang/test/Driver/ptrauth-platform-defaults.c | 3 -
clang/test/Sema/ptrauth-platform-defaults.c | 17 +---
4 files changed, 67 insertions(+), 87 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp
index 6dd170d6f2b8c..4abc2b1565ba9 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -3187,28 +3187,54 @@ void MachO::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
ToolChain::addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadKind);
- // On arm64e, enable pointer authentication (for the return address and
- // indirect calls), as well as usage of the intrinsics.
- if (getArchName() == "arm64e") {
- if (!DriverArgs.hasArg(options::OPT_fptrauth_returns,
- options::OPT_fno_ptrauth_returns))
- CC1Args.push_back("-fptrauth-returns");
-
- if (!DriverArgs.hasArg(options::OPT_fptrauth_intrinsics,
- options::OPT_fno_ptrauth_intrinsics))
- CC1Args.push_back("-fptrauth-intrinsics");
+ // On arm64e, we enable all the features required for the Darwin userspace
+ // ABI
+ if (getTriple().isArm64e()) {
+ auto EnsureDefaultPtrauthFlag = [&](OptSpecifier Pos, OptSpecifier Neg,
+ const char* param_name) {
+ if (DriverArgs.hasArg(Pos, Neg))
+ return;
+ CC1Args.push_back(param_name);
+ };
- if (!DriverArgs.hasArg(options::OPT_fptrauth_calls,
- options::OPT_fno_ptrauth_calls))
- CC1Args.push_back("-fptrauth-calls");
+ // Core platform ABI
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_calls,
+ options::OPT_fno_ptrauth_calls,
+ "-fptrauth-calls");
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_returns,
+ options::OPT_fno_ptrauth_returns,
+ "-fptrauth-returns");
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_intrinsics,
+ options::OPT_fno_ptrauth_intrinsics,
+ "-fptrauth-intrinsics");
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_indirect_gotos,
+ options::OPT_fno_ptrauth_indirect_gotos,
+ "-fptrauth-indirect-gotos");
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_auth_traps,
+ options::OPT_fno_ptrauth_auth_traps,
+ "-fptrauth-auth-traps");
- if (!DriverArgs.hasArg(options::OPT_fptrauth_indirect_gotos,
- options::OPT_fno_ptrauth_indirect_gotos))
- CC1Args.push_back("-fptrauth-indirect-gotos");
+ // C++ v-table ABI
+ EnsureDefaultPtrauthFlag(
+ options::OPT_fptrauth_vtable_pointer_address_discrimination,
+ options::OPT_fno_ptrauth_vtable_pointer_address_discrimination,
+ "-fptrauth-vtable-pointer-address-discrimination"
+ );
+ EnsureDefaultPtrauthFlag(
+ options::OPT_fptrauth_vtable_pointer_type_discrimination,
+ options::OPT_fno_ptrauth_vtable_pointer_type_discrimination,
+ "-fptrauth-vtable-pointer-type-discrimination");
- if (!DriverArgs.hasArg(options::OPT_fptrauth_auth_traps,
- options::OPT_fno_ptrauth_auth_traps))
- CC1Args.push_back("-fptrauth-auth-traps");
+ // Objective-C ABI
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_isa,
+ options::OPT_fno_ptrauth_objc_isa,
+ "-fptrauth-objc-isa");
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_class_ro,
+ options::OPT_fno_ptrauth_objc_class_ro,
+ "-fptrauth-objc-class-ro");
+ EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_interface_sel,
+ options::OPT_fno_ptrauth_objc_interface_sel,
+ "-fptrauth-objc-interface-sel");
}
}
@@ -3291,39 +3317,6 @@ void Darwin::addClangTargetOptions(
if (!RequiresSubdirectorySearch)
CC1Args.push_back("-fno-modulemap-allow-subdirectory-search");
}
-
- if (getTriple().isArm64e()) {
- auto EnsureDefaultPtrauthFlag = [&](OptSpecifier Pos, OptSpecifier Neg) {
- assert(Pos != Neg);
- if (const Arg *Opt = DriverArgs.getLastArg(Pos, Neg);
- Opt && Opt->getOption().matches(Neg))
- return;
- Option PosOpt = getDriverOptTable().getOption(Pos);
- CC1Args.push_back(PosOpt.getPrefixedName().data());
- };
- EnsureDefaultPtrauthFlag(options::OPT_fptrauth_calls,
- options::OPT_fno_ptrauth_calls);
- EnsureDefaultPtrauthFlag(options::OPT_fptrauth_returns,
- options::OPT_fno_ptrauth_returns);
- EnsureDefaultPtrauthFlag(options::OPT_fptrauth_intrinsics,
- options::OPT_fno_ptrauth_intrinsics);
- EnsureDefaultPtrauthFlag(options::OPT_fptrauth_indirect_gotos,
- options::OPT_fno_ptrauth_indirect_gotos);
- EnsureDefaultPtrauthFlag(options::OPT_fptrauth_auth_traps,
- options::OPT_fno_ptrauth_auth_traps);
- EnsureDefaultPtrauthFlag(
- options::OPT_fptrauth_vtable_pointer_address_discrimination,
- options::OPT_fno_ptrauth_vtable_pointer_address_discrimination);
- EnsureDefaultPtrauthFlag(
- options::OPT_fptrauth_vtable_pointer_type_discrimination,
- options::OPT_fno_ptrauth_vtable_pointer_type_discrimination);
- EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_isa,
- options::OPT_fno_ptrauth_objc_isa);
- EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_class_ro,
- options::OPT_fno_ptrauth_objc_class_ro);
- EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_interface_sel,
- options::OPT_fno_ptrauth_objc_interface_sel);
- }
}
void Darwin::addClangCC1ASTargetOptions(
diff --git a/clang/test/Driver/arch-arm64e.c b/clang/test/Driver/arch-arm64e.c
index 0fb12d4dcc5e3..d678a038f1737 100644
--- a/clang/test/Driver/arch-arm64e.c
+++ b/clang/test/Driver/arch-arm64e.c
@@ -2,11 +2,20 @@
// RUN: %clang -target arm64-apple-darwin -c %s -### 2>&1 | FileCheck %s --check-prefix NONE
// NONE: "-cc1"
-// NONE-NOT: "-fptrauth-intrinsics"
+
// NONE-NOT: "-fptrauth-calls"
// NONE-NOT: "-fptrauth-returns"
+// NONE-NOT: "-fptrauth-intrinsics"
// NONE-NOT: "-fptrauth-indirect-gotos"
// NONE-NOT: "-fptrauth-auth-traps"
+// NONE-NOT: "-fptrauth-vtable-pointer-address-discrimination"
+// NONE-NOT: "-fptrauth-vtable-pointer-type-discrimination"
+// NONE-NOT: "-fptrauth-objc-isa"
+// NONE-NOT: "-fptrauth-objc-class-ro"
+// NONE-NOT: "-fptrauth-objc-interface-sel"
+
+// Final catch all if any new flags are added
+// NONE-NOT: "-fptrauth"
// RUN: %clang -target arm64-apple-darwin -fptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix CALL
// CALL: "-cc1"{{.*}} {{.*}} "-fptrauth-calls"
@@ -27,40 +36,28 @@
// Check the arm64e defaults.
// RUN: %clang -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT
-// RUN: %clang -mkernel -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT
-// RUN: %clang -fapple-kext -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT
-// DEFAULT: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"{{.*}}
+// RUN: %clang -target arm64e-apple-macos -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT
+// DEFAULT: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
// RUN: %clang -target arm64e-apple-none-macho -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-MACHO
-// DEFAULT-MACHO: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"{{.*}}
+// DEFAULT-MACHO: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
// RUN: %clang -target arm64e-apple-ios -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL
-// RUN: %clang -mkernel -target arm64e-apple-ios -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL
-// RUN: %clang -fapple-kext -target arm64e-apple-ios -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL
// DEFAULT-NOCALL-NOT: "-fptrauth-calls"
-// DEFAULT-NOCALL: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"
+// DEFAULT-NOCALL: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
// RUN: %clang -target arm64e-apple-ios -fno-ptrauth-returns -c %s -### 2>&1 | FileCheck %s --check-prefix NORET
// NORET-NOT: "-fptrauth-returns"
-// NORET: "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"
+// NORET: "-fptrauth-calls" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
// RUN: %clang -target arm64e-apple-ios -fno-ptrauth-intrinsics -c %s -### 2>&1 | FileCheck %s --check-prefix NOINTRIN
-// NOINTRIN: "-fptrauth-returns"
// NOINTRIN-NOT: "-fptrauth-intrinsics"
-// NOINTRIN: "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"{{.*}}
+// NOINTRIN: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
// RUN: %clang -target arm64e-apple-ios -fno-ptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix NOTRAP
-// NOTRAP: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" {{.*}}"-target-cpu" "apple-a12"
-
-
-// Check the CPU defaults and overrides.
-
-// RUN: %clang -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix APPLE-A12
-// RUN: %clang -target arm64e-apple-ios -mcpu=apple-a13 -c %s -### 2>&1 | FileCheck %s --check-prefix APPLE-A13
-// APPLE-A12: "-cc1"{{.*}} "-target-cpu" "apple-a12"
-// APPLE-A13: "-cc1"{{.*}} "-target-cpu" "apple-a13"
+// NOTRAP: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
diff --git a/clang/test/Driver/ptrauth-platform-defaults.c b/clang/test/Driver/ptrauth-platform-defaults.c
index aa2968d9025bc..c1d065a8808a0 100644
--- a/clang/test/Driver/ptrauth-platform-defaults.c
+++ b/clang/test/Driver/ptrauth-platform-defaults.c
@@ -3,9 +3,6 @@
// RUN: %clang -target arm64-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
// RUN: %clang -target arm64-apple-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
// RUN: %clang -target arm64-apple-ios-macabi -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
-// RUN: %clang -target arm64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
-// RUN: %clang -target arm64e-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
-// RUN: %clang -target aarch64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
// RUN: %clang -target arm64e-apple-ios -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
// RUN: %clang -target arm64e-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
diff --git a/clang/test/Sema/ptrauth-platform-defaults.c b/clang/test/Sema/ptrauth-platform-defaults.c
index 0dcddbfa22f76..5a959feca01b8 100644
--- a/clang/test/Sema/ptrauth-platform-defaults.c
+++ b/clang/test/Sema/ptrauth-platform-defaults.c
@@ -1,30 +1,23 @@
+// The -cc1 mode should not insert default ptrauth flags
+
// RUN: %clang_cc1 -triple arm64 %s -fsyntax-only
// RUN: %clang_cc1 -triple arm64-apple-macosx %s -fsyntax-only
-// RUN: %clang_cc1 -triple arm64-darwin %s -fsyntax-only
-// RUN: %clang_cc1 -triple arm64-apple-darwin %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64-apple-ios %s -fsyntax-only
// RUN: %clang_cc1 -triple arm64-apple-ios-macabi %s -fsyntax-only
-// RUN: %clang_cc1 -triple arm64-linux-gnu %s -fsyntax-only
-// RUN: %clang_cc1 -triple arm64e-linux-gnu %s -fsyntax-only
-// RUN: %clang_cc1 -triple aarch64-linux-gnu %s -fsyntax-only
+// RUN: %clang_cc1 -triple arm64e %s -fsyntax-only
// RUN: %clang_cc1 -triple arm64e-apple-macosx %s -fsyntax-only
// RUN: %clang_cc1 -triple arm64e-apple-ios %s -fsyntax-only
-// RUN: %clang_cc1 -triple arm64e-darwin %s -fsyntax-only
-// RUN: %clang_cc1 -triple arm64e-apple-darwin %s -fsyntax-only
// RUN: %clang_cc1 -triple arm64e-apple-ios-macabi %s -fsyntax-only
-// The -cc1 mode should not insert default ptrauth flags
-
#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \
_Static_assert(enabled == __has_##kind(feature), \
"Expected to have the " #feature " " #kind " enabled");
#define ASSERT_FEATURE_DISABLED(feature_name) \
ASSERT_MODE_AND_KIND(feature_name, 0, feature)
-#define ASSERT_EXTENSION_DISABLED(extension_name) \
- ASSERT_MODE_AND_KIND(extension_name, 0, extension)
ASSERT_FEATURE_DISABLED(ptrauth_intrinsics)
-ASSERT_EXTENSION_DISABLED(ptrauth_qualifier)
+ASSERT_FEATURE_DISABLED(ptrauth_qualifier)
ASSERT_FEATURE_DISABLED(ptrauth_calls)
ASSERT_FEATURE_DISABLED(ptrauth_returns)
ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination)
>From e47f40fb41d0f285dee3368c67f9c08b2a9aa3b2 Mon Sep 17 00:00:00 2001
From: Oliver Hunt <oliver at apple.com>
Date: Sun, 17 Aug 2025 15:13:35 -0700
Subject: [PATCH 3/3] moving test content around and adding a -arch specific
set
---
.../Driver/arch-arm64e-arch-opt-defaults.c | 138 ++++++++++++++++++
clang/test/Driver/arch-arm64e.c | 80 ++++++++++
clang/test/Driver/ptrauth-platform-defaults.c | 82 -----------
3 files changed, 218 insertions(+), 82 deletions(-)
create mode 100644 clang/test/Driver/arch-arm64e-arch-opt-defaults.c
delete mode 100644 clang/test/Driver/ptrauth-platform-defaults.c
diff --git a/clang/test/Driver/arch-arm64e-arch-opt-defaults.c b/clang/test/Driver/arch-arm64e-arch-opt-defaults.c
new file mode 100644
index 0000000000000..dd7d5836aabf8
--- /dev/null
+++ b/clang/test/Driver/arch-arm64e-arch-opt-defaults.c
@@ -0,0 +1,138 @@
+// REQUIRES: system-darwin && target={{.*}}-{{darwin|macos}}{{.*}}
+// Check the correct ptrauth features are enabled when simply using the -arch
+// option
+
+// RUN: %clang -arch arm64 -c %s -### 2>&1 | FileCheck %s --check-prefix NONE
+// NONE: "-cc1"
+
+// NONE-NOT: "-fptrauth-calls"
+// NONE-NOT: "-fptrauth-returns"
+// NONE-NOT: "-fptrauth-intrinsics"
+// NONE-NOT: "-fptrauth-indirect-gotos"
+// NONE-NOT: "-fptrauth-auth-traps"
+// NONE-NOT: "-fptrauth-vtable-pointer-address-discrimination"
+// NONE-NOT: "-fptrauth-vtable-pointer-type-discrimination"
+// NONE-NOT: "-fptrauth-objc-isa"
+// NONE-NOT: "-fptrauth-objc-class-ro"
+// NONE-NOT: "-fptrauth-objc-interface-sel"
+
+// Final catch all if any new flags are added
+// NONE-NOT: "-fptrauth"
+
+// RUN: %clang -arch arm64 -fptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix CALL
+// CALL: "-cc1"{{.*}} {{.*}} "-fptrauth-calls"
+
+// RUN: %clang -arch arm64 -fptrauth-intrinsics -c %s -### 2>&1 | FileCheck %s --check-prefix INTRIN
+// INTRIN: "-cc1"{{.*}} {{.*}} "-fptrauth-intrinsics"
+
+// RUN: %clang -arch arm64 -fptrauth-returns -c %s -### 2>&1 | FileCheck %s --check-prefix RETURN
+// RETURN: "-cc1"{{.*}} {{.*}} "-fptrauth-returns"
+
+// RUN: %clang -arch arm64 -fptrauth-indirect-gotos -c %s -### 2>&1 | FileCheck %s --check-prefix INDGOTO
+// INDGOTO: "-cc1"{{.*}} {{.*}} "-fptrauth-indirect-gotos"
+
+// RUN: %clang -arch arm64 -fptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix TRAPS
+// TRAPS: "-cc1"{{.*}} {{.*}} "-fptrauth-auth-traps"
+
+
+// Check the `-arch arm64e` defaults.
+
+// RUN: %clang -arch arm64e -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT
+// DEFAULT: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
+
+// RUN: %clang -arch arm64e -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL
+// DEFAULT-NOCALL-NOT: "-fptrauth-calls"
+// DEFAULT-NOCALL: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
+
+
+// RUN: %clang -arch arm64e -fno-ptrauth-returns -c %s -### 2>&1 | FileCheck %s --check-prefix NORET
+
+// NORET-NOT: "-fptrauth-returns"
+// NORET: "-fptrauth-calls" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
+
+// RUN: %clang -arch arm64e -fno-ptrauth-intrinsics -c %s -### 2>&1 | FileCheck %s --check-prefix NOINTRIN
+
+// NOINTRIN-NOT: "-fptrauth-intrinsics"
+// NOINTRIN: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
+
+
+// RUN: %clang -arch arm64e -fno-ptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix NOTRAP
+// NOTRAP: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
+
+// Check that the default driver flags correctly propogate through to the compiler
+
+// RUN: %clang -arch arm64 -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -arch arm64e -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
+
+// A simple test case to test basic override logic
+// RUN: %clang -arch arm64e -DDARWIN_DEFAULT_PTRAUTH_OVERRIDE -fno-ptrauth-calls %s -fsyntax-only -Xclang -verify=darwin_ptrauth_override
+
+
+#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \
+ _Static_assert(enabled == __has_##kind(feature), \
+ "Expected to have the " #feature " " #kind " enabled");
+
+#define ASSERT_FEATURE_ENABLED(feature_name) \
+ ASSERT_MODE_AND_KIND(feature_name, 1, feature)
+#define ASSERT_FEATURE_DISABLED(feature_name) \
+ ASSERT_MODE_AND_KIND(feature_name, 0, feature)
+#define ASSERT_EXTENSION_ENABLED(extension_name) \
+ ASSERT_MODE_AND_KIND(extension_name, 1, extension)
+#define ASSERT_EXTENSION_DISABLED(extension_name) \
+ ASSERT_MODE_AND_KIND(extension_name, 0, extension)
+
+#if defined(DARWIN_DEFAULT_PTRAUTH) || defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE)
+ASSERT_FEATURE_ENABLED(ptrauth_intrinsics)
+ASSERT_EXTENSION_ENABLED(ptrauth_qualifier)
+
+#if defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE)
+ASSERT_FEATURE_DISABLED(ptrauth_calls)
+// These flags directly reflect the state of ptrauth_calls, but exist
+// for backward compatibility reasons
+ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer)
+#else
+ASSERT_FEATURE_ENABLED(ptrauth_calls)
+ASSERT_FEATURE_ENABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_method_list_pointer)
+#endif
+
+ASSERT_FEATURE_ENABLED(ptrauth_returns)
+ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_address_discrimination)
+ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors)
+ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination)
+ASSERT_FEATURE_ENABLED(ptrauth_indirect_gotos)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_elf_got)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_isa)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_interface_sel)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_signable_class)
+#endif
+
+#ifdef NO_DEFAULT_PTRAUTH
+ASSERT_FEATURE_DISABLED(ptrauth_intrinsics)
+ASSERT_EXTENSION_DISABLED(ptrauth_qualifier)
+ASSERT_FEATURE_DISABLED(ptrauth_calls)
+ASSERT_FEATURE_DISABLED(ptrauth_returns)
+ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors)
+ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_elf_got)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_isa)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer)
+#endif
+
+// darwin_ptrauth_defaults-no-diagnostics
+// no_default_ptrauth-no-diagnostics
+// darwin_ptrauth_override-no-diagnostics
diff --git a/clang/test/Driver/arch-arm64e.c b/clang/test/Driver/arch-arm64e.c
index d678a038f1737..c85f22eac39af 100644
--- a/clang/test/Driver/arch-arm64e.c
+++ b/clang/test/Driver/arch-arm64e.c
@@ -61,3 +61,83 @@
// RUN: %clang -target arm64e-apple-ios -fno-ptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix NOTRAP
// NOTRAP: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel"
+
+// Check that the default driver flags correctly propogate through to the compiler
+
+// RUN: %clang -target arm64-apple-macosx -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target arm64-apple-ios -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
+// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
+// RUN: %clang -target arm64e-apple-ios -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
+
+// A simple test case to test basic override logic
+// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH_OVERRIDE -fno-ptrauth-calls %s -fsyntax-only -Xclang -verify=darwin_ptrauth_override
+
+
+#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \
+ _Static_assert(enabled == __has_##kind(feature), \
+ "Expected to have the " #feature " " #kind " enabled");
+
+#define ASSERT_FEATURE_ENABLED(feature_name) \
+ ASSERT_MODE_AND_KIND(feature_name, 1, feature)
+#define ASSERT_FEATURE_DISABLED(feature_name) \
+ ASSERT_MODE_AND_KIND(feature_name, 0, feature)
+#define ASSERT_EXTENSION_ENABLED(extension_name) \
+ ASSERT_MODE_AND_KIND(extension_name, 1, extension)
+#define ASSERT_EXTENSION_DISABLED(extension_name) \
+ ASSERT_MODE_AND_KIND(extension_name, 0, extension)
+
+#if defined(DARWIN_DEFAULT_PTRAUTH) || defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE)
+ASSERT_FEATURE_ENABLED(ptrauth_intrinsics)
+ASSERT_EXTENSION_ENABLED(ptrauth_qualifier)
+
+#if defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE)
+ASSERT_FEATURE_DISABLED(ptrauth_calls)
+// These flags directly reflect the state of ptrauth_calls, but exist
+// for backward compatibility reasons
+ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer)
+#else
+ASSERT_FEATURE_ENABLED(ptrauth_calls)
+ASSERT_FEATURE_ENABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_method_list_pointer)
+#endif
+
+ASSERT_FEATURE_ENABLED(ptrauth_returns)
+ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_address_discrimination)
+ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors)
+ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination)
+ASSERT_FEATURE_ENABLED(ptrauth_indirect_gotos)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_elf_got)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_isa)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_interface_sel)
+ASSERT_FEATURE_ENABLED(ptrauth_objc_signable_class)
+#endif
+
+#ifdef NO_DEFAULT_PTRAUTH
+ASSERT_FEATURE_DISABLED(ptrauth_intrinsics)
+ASSERT_EXTENSION_DISABLED(ptrauth_qualifier)
+ASSERT_FEATURE_DISABLED(ptrauth_calls)
+ASSERT_FEATURE_DISABLED(ptrauth_returns)
+ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors)
+ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini)
+ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination)
+ASSERT_FEATURE_DISABLED(ptrauth_elf_got)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_isa)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class)
+ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer)
+#endif
+
+// darwin_ptrauth_defaults-no-diagnostics
+// no_default_ptrauth-no-diagnostics
+// darwin_ptrauth_override-no-diagnostics
diff --git a/clang/test/Driver/ptrauth-platform-defaults.c b/clang/test/Driver/ptrauth-platform-defaults.c
deleted file mode 100644
index c1d065a8808a0..0000000000000
--- a/clang/test/Driver/ptrauth-platform-defaults.c
+++ /dev/null
@@ -1,82 +0,0 @@
-// RUN: %clang -target arm64 -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
-// RUN: %clang -target arm64-apple-macosx -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
-// RUN: %clang -target arm64-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
-// RUN: %clang -target arm64-apple-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
-// RUN: %clang -target arm64-apple-ios-macabi -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth
-// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
-// RUN: %clang -target arm64e-apple-ios -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
-// RUN: %clang -target arm64e-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
-// RUN: %clang -target arm64e-apple-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
-// RUN: %clang -target arm64e-apple-ios-macabi -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults
-
-// A simple test case to test basic override logic
-// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH_OVERRIDE -fno-ptrauth-calls %s -fsyntax-only -Xclang -verify=darwin_ptrauth_override
-
-#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \
- _Static_assert(enabled == __has_##kind(feature), \
- "Expected to have the " #feature " " #kind " enabled");
-
-#define ASSERT_FEATURE_ENABLED(feature_name) \
- ASSERT_MODE_AND_KIND(feature_name, 1, feature)
-#define ASSERT_FEATURE_DISABLED(feature_name) \
- ASSERT_MODE_AND_KIND(feature_name, 0, feature)
-#define ASSERT_EXTENSION_ENABLED(extension_name) \
- ASSERT_MODE_AND_KIND(extension_name, 1, extension)
-#define ASSERT_EXTENSION_DISABLED(extension_name) \
- ASSERT_MODE_AND_KIND(extension_name, 0, extension)
-
-#if defined(DARWIN_DEFAULT_PTRAUTH) || defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE)
-ASSERT_FEATURE_ENABLED(ptrauth_intrinsics)
-ASSERT_EXTENSION_ENABLED(ptrauth_qualifier)
-
-#if defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE)
-ASSERT_FEATURE_DISABLED(ptrauth_calls)
-// These flags directly reflect the state of ptrauth_calls, but exist
-// for backward compatibility reasons
-ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer)
-#else
-ASSERT_FEATURE_ENABLED(ptrauth_calls)
-ASSERT_FEATURE_ENABLED(ptrauth_member_function_pointer_type_discrimination)
-ASSERT_FEATURE_ENABLED(ptrauth_objc_method_list_pointer)
-#endif
-
-ASSERT_FEATURE_ENABLED(ptrauth_returns)
-ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_address_discrimination)
-ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_type_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors)
-ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination)
-ASSERT_FEATURE_ENABLED(ptrauth_indirect_gotos)
-ASSERT_FEATURE_DISABLED(ptrauth_init_fini)
-ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_elf_got)
-ASSERT_FEATURE_ENABLED(ptrauth_objc_isa)
-ASSERT_FEATURE_ENABLED(ptrauth_objc_interface_sel)
-ASSERT_FEATURE_ENABLED(ptrauth_objc_signable_class)
-#endif
-
-#ifdef NO_DEFAULT_PTRAUTH
-ASSERT_FEATURE_DISABLED(ptrauth_intrinsics)
-ASSERT_EXTENSION_DISABLED(ptrauth_qualifier)
-ASSERT_FEATURE_DISABLED(ptrauth_calls)
-ASSERT_FEATURE_DISABLED(ptrauth_returns)
-ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors)
-ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos)
-ASSERT_FEATURE_DISABLED(ptrauth_init_fini)
-ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination)
-ASSERT_FEATURE_DISABLED(ptrauth_elf_got)
-ASSERT_FEATURE_DISABLED(ptrauth_objc_isa)
-ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel)
-ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class)
-ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer)
-#endif
-
-// darwin_ptrauth_defaults-no-diagnostics
-// no_default_ptrauth-no-diagnostics
-// darwin_ptrauth_override-no-diagnostics
More information about the cfe-commits
mailing list