[llvm-branch-commits] [clang] release/21.x: [clang][PAC] Don't try to diagnose use of pointer auth on dependent types #159505 (#159859) (PR #161288)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Oct 1 08:18:32 PDT 2025
https://github.com/dyung updated https://github.com/llvm/llvm-project/pull/161288
>From a867bd53e86173e6e1b9f40960133e72ff206414 Mon Sep 17 00:00:00 2001
From: Oliver Hunt <oliver at apple.com>
Date: Fri, 19 Sep 2025 19:34:09 -0600
Subject: [PATCH] [clang][PAC] Don't try to diagnose use of pointer auth on
dependent types #159505 (#159859)
We can't give a correct answer for dependent types, so for now just
report no ptrauth involves if the type being queried is dependent. In
future we may want to distinguigh the `None` vs `Dependent` cases but
that does not seem warranted for now.
Fixes #159505
(cherry picked from commit f6c711b426300d2f8b914fc7debe6d09c026740e)
---
clang/lib/AST/ASTContext.cpp | 3 ++
clang/test/SemaCXX/ptrauth-type-traits.cpp | 38 +++++++++++++++++++++-
2 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 92d1b536e474b..862f1d5741c5b 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -1725,6 +1725,9 @@ ASTContext::PointerAuthContent ASTContext::findPointerAuthContent(QualType T) {
assert(isPointerAuthenticationAvailable());
T = T.getCanonicalType();
+ if (T->isDependentType())
+ return PointerAuthContent::None;
+
if (T.hasAddressDiscriminatedPointerAuth())
return PointerAuthContent::AddressDiscriminatedData;
const RecordDecl *RD = T->getAsRecordDecl();
diff --git a/clang/test/SemaCXX/ptrauth-type-traits.cpp b/clang/test/SemaCXX/ptrauth-type-traits.cpp
index aefbd63fa1677..a81ef1cce25b6 100644
--- a/clang/test/SemaCXX/ptrauth-type-traits.cpp
+++ b/clang/test/SemaCXX/ptrauth-type-traits.cpp
@@ -8,13 +8,14 @@
// expected-no-diagnostics
#ifdef __PTRAUTH__
-
+#define PTRAUTH_ENABLED 1
#define NonAddressDiscriminatedVTablePtrAttr \
[[clang::ptrauth_vtable_pointer(process_independent, no_address_discrimination, no_extra_discrimination)]]
#define AddressDiscriminatedVTablePtrAttr \
[[clang::ptrauth_vtable_pointer(process_independent, address_discrimination, no_extra_discrimination)]]
#define ADDR_DISC_ENABLED true
#else
+#define PTRAUTH_ENABLED 0
#define NonAddressDiscriminatedVTablePtrAttr
#define AddressDiscriminatedVTablePtrAttr
#define ADDR_DISC_ENABLED false
@@ -399,3 +400,38 @@ static_assert(!ASSIGNABLE_WRAPPER(RelocatableAddressDiscriminatedPrimaryBase));
static_assert(!ASSIGNABLE_WRAPPER(RelocatableAddressDiscriminatedSecondaryBase));
static_assert(!ASSIGNABLE_WRAPPER(EmbdeddedAddressDiscriminatedPolymorphicClass));
static_assert(!ASSIGNABLE_WRAPPER(RelocatableEmbdeddedAddressDiscriminatedPolymorphicClass));
+
+namespace GH159505 {
+ class A {
+ virtual void f();
+ };
+
+ template <int N> struct B {
+ class C : A {
+ A a[N];
+ } d;
+ };
+
+ template <int N> struct C {
+ void *__ptrauth(1,1,1) ptr[N];
+ static_assert(PTRAUTH_ENABLED != __is_trivially_copyable(decltype(ptr)));
+ };
+ template <class T, bool isPtrauth> struct D {
+ T ptr;
+ static_assert(isPtrauth != __is_trivially_copyable(decltype(ptr)));
+ };
+
+
+ template <class T> using Ptr = T * __ptrauth(1,1,1);
+ template <class T> void test() {
+ static_assert(PTRAUTH_ENABLED != __is_trivially_copyable(Ptr<T>));
+ }
+
+ auto f = test<int>;
+ static_assert(!__is_trivially_copyable(B<1>));
+ static_assert(PTRAUTH_ENABLED != __is_trivially_copyable(C<1>));
+
+
+ D<void *, false> d_void;
+ D<void * __ptrauth(1,1,1), PTRAUTH_ENABLED> d_void_ptrauth;
+}
More information about the llvm-branch-commits
mailing list