llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Sam McCall (sam-mccall) <details> <summary>Changes</summary> The intent was that smart-pointers do not participate in completeness checks, but we failed to capture dependent `unique_ptr<T>`, which is not a RecordType but a TemplateSpecializationType. --- Full diff: https://github.com/llvm/llvm-project/pull/88727.diff 2 Files Affected: - (modified) clang/lib/Sema/SemaType.cpp (+2-1) - (modified) clang/test/SemaObjCXX/Inputs/nullability-consistency-smart.h (+4) ``````````diff diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 404c4e8e31b558..6ac8a9433c701b 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -4728,7 +4728,8 @@ static bool shouldHaveNullability(QualType T) { // It's unclear whether the pragma's behavior is useful for C++. // e.g. treating type-aliases and template-type-parameters differently // from types of declarations can be surprising. - !isa<RecordType>(T->getCanonicalTypeInternal()); + !isa<RecordType, TemplateSpecializationType>( + T->getCanonicalTypeInternal()); } static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, diff --git a/clang/test/SemaObjCXX/Inputs/nullability-consistency-smart.h b/clang/test/SemaObjCXX/Inputs/nullability-consistency-smart.h index a28532e5d71668..5ff974af57f49b 100644 --- a/clang/test/SemaObjCXX/Inputs/nullability-consistency-smart.h +++ b/clang/test/SemaObjCXX/Inputs/nullability-consistency-smart.h @@ -5,3 +5,7 @@ void f1(int * _Nonnull); void f2(Smart); // OK, not required on smart-pointer types using Alias = Smart; void f3(Alias); + +template <class T> class _Nullable SmartTmpl; +void f2(SmartTmpl<int>); +template <class T> void f2(SmartTmpl<T>); `````````` </details> https://github.com/llvm/llvm-project/pull/88727 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits