[clang] [clang][PAC] Don't try to diagnose use of pointer auth on dependent types #159505 (PR #159859)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 19 15:08:49 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Oliver Hunt (ojhunt)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/159859.diff
2 Files Affected:
- (modified) clang/lib/AST/ASTContext.cpp (+3)
- (modified) clang/test/SemaCXX/ptrauth-type-traits.cpp (+37-1)
``````````diff
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index e49ff9080571e..97c59b2ceec2f 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -1707,6 +1707,9 @@ ASTContext::findPointerAuthContent(QualType T) const {
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;
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/159859
More information about the cfe-commits
mailing list