From 53bb2869e0d877b75236cdaa4297d0757f88b5d2 Mon Sep 17 00:00:00 2001 From: Zahira Ammarguellat Date: Mon, 28 Oct 2024 11:18:46 -0700 Subject: [PATCH] IsDerivedFromInclusive expects a compelete type. --- clang/lib/Sema/SemaAccess.cpp | 3 +++ clang/test/SemaSYCL/attr-add-ir-attributes.cpp | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/clang/lib/Sema/SemaAccess.cpp b/clang/lib/Sema/SemaAccess.cpp index 019bf012e4331..e6600aab7be51 100644 --- a/clang/lib/Sema/SemaAccess.cpp +++ b/clang/lib/Sema/SemaAccess.cpp @@ -301,6 +301,7 @@ static AccessResult IsDerivedFromInclusive(const CXXRecordDecl *Derived, const CXXRecordDecl *Target) { assert(Derived->getCanonicalDecl() == Derived); assert(Target->getCanonicalDecl() == Target); + assert(Derived->getDefinition() && "Expecting a complete type"); if (Derived == Target) return AR_accessible; @@ -776,6 +777,8 @@ static AccessResult HasAccess(Sema &S, // [B3] and [M3] } else { assert(Access == AS_protected); + if (!ECRecord->getDefinition()) + continue; switch (IsDerivedFromInclusive(ECRecord, NamingClass)) { case AR_accessible: break; case AR_inaccessible: continue; diff --git a/clang/test/SemaSYCL/attr-add-ir-attributes.cpp b/clang/test/SemaSYCL/attr-add-ir-attributes.cpp index f670f983da017..bd4ea2a685cde 100644 --- a/clang/test/SemaSYCL/attr-add-ir-attributes.cpp +++ b/clang/test/SemaSYCL/attr-add-ir-attributes.cpp @@ -991,3 +991,16 @@ struct __attribute__((sycl_special_class)) InvalidSpecialClassStruct32 { struct [[__sycl_detail__::add_ir_attributes_kernel_parameter("Attr1", 1)]] InvalidKernelParameterSubjectStruct; // expected-error {{'add_ir_attributes_kernel_parameter' attribute only applies to parameters}} [[__sycl_detail__::add_ir_attributes_kernel_parameter("Attr1", 1)]] void InvalidKernelParameterSubjectFunction() {} // expected-error {{'add_ir_attributes_kernel_parameter' attribute only applies to parameters}} [[__sycl_detail__::add_ir_attributes_kernel_parameter("Attr1", 1)]] int InvalidKernelParameterSubjectVar; // expected-error {{'add_ir_attributes_kernel_parameter' attribute only applies to parameters}} + +struct A { + protected: + static constexpr const char *ir_attribute_name = ""; // expected-note {{declared protected here}} + static constexpr auto ir_attribute_value = nullptr; // expected-note {{declared protected here}} +}; + +template +struct [[__sycl_detail__::add_ir_attributes_global_variable( + Ts::ir_attribute_name, Ts::ir_attribute_value)]] B { // expected-error {{'ir_attribute_name' is a protected member of 'A'}} // expected-error {{'ir_attribute_value' is a protected member of 'A'}} +}; + +B v; // expected-note {{in instantiation of template class 'B' requested here}}