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