https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/99038
>From fbc9ebb3900e69f2485111cfdc6b7a7dfd3e6ebe Mon Sep 17 00:00:00 2001 From: Nikolas Klauser <nikolasklau...@berlin.de> Date: Tue, 16 Jul 2024 14:53:30 +0200 Subject: [PATCH 1/2] [Clang] Remove __is_nullptr --- clang/docs/LanguageExtensions.rst | 4 ---- clang/lib/Parse/ParseDeclCXX.cpp | 5 ++--- clang/lib/Parse/ParseExpr.cpp | 1 - clang/lib/Sema/SemaExprCXX.cpp | 3 --- clang/test/SemaCXX/type-traits.cpp | 36 ------------------------------ 5 files changed, 2 insertions(+), 47 deletions(-) diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst index 81784c75081ba..cfd7d29fb9eac 100644 --- a/clang/docs/LanguageExtensions.rst +++ b/clang/docs/LanguageExtensions.rst @@ -1614,10 +1614,6 @@ The following type trait primitives are supported by Clang. Those traits marked * ``__is_nothrow_assignable`` (C++, MSVC 2013) * ``__is_nothrow_constructible`` (C++, MSVC 2013) * ``__is_nothrow_destructible`` (C++, MSVC 2013) -* ``__is_nullptr`` (C++, GNU, Microsoft, Embarcadero): - Returns true for ``std::nullptr_t`` and false for everything else. The - corresponding standard library feature is ``std::is_null_pointer``, but - ``__is_null_pointer`` is already in use by some implementations. * ``__is_object`` (C++, Embarcadero) * ``__is_pod`` (C++, GNU, Microsoft, Embarcadero): Note, the corresponding standard trait was deprecated in C++20. diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index ce827c689beb7..2c201d346328b 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -447,9 +447,9 @@ Decl *Parser::ParseLinkage(ParsingDeclSpec &DS, DeclaratorContext Context) { /// /// HLSL: Parse export function declaration. /// -/// export-function-declaration: +/// export-function-declaration: /// 'export' function-declaration -/// +/// /// export-declaration-group: /// 'export' '{' function-declaration-seq[opt] '}' /// @@ -1799,7 +1799,6 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind, tok::kw___is_nothrow_constructible, tok::kw___is_nothrow_convertible, tok::kw___is_nothrow_destructible, - tok::kw___is_nullptr, tok::kw___is_object, tok::kw___is_pod, tok::kw___is_pointer, diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 3d7c58e5b3c3c..b3df9cfbc8b9a 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -800,7 +800,6 @@ bool Parser::isRevertibleTypeTrait(const IdentifierInfo *II, REVERTIBLE_TYPE_TRAIT(__is_nothrow_assignable); REVERTIBLE_TYPE_TRAIT(__is_nothrow_constructible); REVERTIBLE_TYPE_TRAIT(__is_nothrow_destructible); - REVERTIBLE_TYPE_TRAIT(__is_nullptr); REVERTIBLE_TYPE_TRAIT(__is_object); REVERTIBLE_TYPE_TRAIT(__is_pod); REVERTIBLE_TYPE_TRAIT(__is_pointer); diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index bef7da239e6e5..a41b938531cab 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -4979,7 +4979,6 @@ static bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT, case UTT_IsArray: case UTT_IsBoundedArray: case UTT_IsPointer: - case UTT_IsNullPointer: case UTT_IsReferenceable: case UTT_IsLvalueReference: case UTT_IsRvalueReference: @@ -5235,8 +5234,6 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, return T->isIncompleteArrayType(); case UTT_IsPointer: return T->isAnyPointerType(); - case UTT_IsNullPointer: - return T->isNullPtrType(); case UTT_IsLvalueReference: return T->isLValueReferenceType(); case UTT_IsRvalueReference: diff --git a/clang/test/SemaCXX/type-traits.cpp b/clang/test/SemaCXX/type-traits.cpp index 7adbf4aad7afe..b38e8989cb559 100644 --- a/clang/test/SemaCXX/type-traits.cpp +++ b/clang/test/SemaCXX/type-traits.cpp @@ -1041,42 +1041,6 @@ void is_pointer() static_assert(!__is_pointer(void (StructWithMembers::*) ())); } -void is_null_pointer() { - StructWithMembers x; - - static_assert(__is_nullptr(decltype(nullptr))); - static_assert(!__is_nullptr(void *)); - static_assert(!__is_nullptr(cvoid *)); - static_assert(!__is_nullptr(cvoid *)); - static_assert(!__is_nullptr(char *)); - static_assert(!__is_nullptr(int *)); - static_assert(!__is_nullptr(int **)); - static_assert(!__is_nullptr(ClassType *)); - static_assert(!__is_nullptr(Derives *)); - static_assert(!__is_nullptr(Enum *)); - static_assert(!__is_nullptr(IntArNB *)); - static_assert(!__is_nullptr(Union *)); - static_assert(!__is_nullptr(UnionAr *)); - static_assert(!__is_nullptr(StructWithMembers *)); - static_assert(!__is_nullptr(void (*)())); - - static_assert(!__is_nullptr(void)); - static_assert(!__is_nullptr(cvoid)); - static_assert(!__is_nullptr(cvoid)); - static_assert(!__is_nullptr(char)); - static_assert(!__is_nullptr(int)); - static_assert(!__is_nullptr(int)); - static_assert(!__is_nullptr(ClassType)); - static_assert(!__is_nullptr(Derives)); - static_assert(!__is_nullptr(Enum)); - static_assert(!__is_nullptr(IntArNB)); - static_assert(!__is_nullptr(Union)); - static_assert(!__is_nullptr(UnionAr)); - static_assert(!__is_nullptr(StructWithMembers)); - static_assert(!__is_nullptr(int StructWithMembers::*)); - static_assert(!__is_nullptr(void(StructWithMembers::*)())); -} - void is_member_object_pointer() { StructWithMembers x; >From bd3b3b354fd3c94ef4f9eb9acd7f5bfd1beddbb1 Mon Sep 17 00:00:00 2001 From: Nikolas Klauser <nikolasklau...@berlin.de> Date: Wed, 31 Jul 2024 19:59:25 +0200 Subject: [PATCH 2/2] Add a release notes --- clang/docs/ReleaseNotes.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 0b79e952b48af..462e9754d402e 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -43,6 +43,10 @@ C/C++ Language Potentially Breaking Changes C++ Specific Potentially Breaking Changes ----------------------------------------- +- The type trait builtin ``__is_nullptr`` has been removed, since it has very + few users and can be written as ``__is_same(__remove_cv(T), decltype(nullptr))``, + which GCC supports as well. + ABI Changes in This Version --------------------------- @@ -117,7 +121,7 @@ Improvements to Clang's diagnostics - Some template related diagnostics have been improved. .. code-block:: c++ - + void foo() { template <typename> int i; } // error: templates can only be declared in namespace or class scope struct S { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits