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
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to