llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Corentin Jabot (cor3ntin)

<details>
<summary>Changes</summary>

In Kona, WG21 decided to revert trivial relocation (P2786).

Keep the notion of relocatability
(used in the wild and likely to come back),
but remove the keyword which is no longer conforming

---

Patch is 50.69 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/174344.diff


16 Files Affected:

- (modified) clang/docs/ReleaseNotes.rst (+7-1) 
- (modified) clang/include/clang/Basic/Attr.td (-8) 
- (modified) clang/include/clang/Basic/DiagnosticParseKinds.td (-13) 
- (modified) clang/include/clang/Parse/Parser.h (-5) 
- (modified) clang/include/clang/Sema/Sema.h (-1) 
- (modified) clang/lib/Parse/ParseDeclCXX.cpp (+5-46) 
- (modified) clang/lib/Parse/Parser.cpp (-1) 
- (modified) clang/lib/Sema/SemaDecl.cpp (-5) 
- (modified) clang/lib/Sema/SemaTypeTraits.cpp (-6) 
- (modified) clang/test/CodeGenCXX/cxx2c-trivially-relocatable.cpp (+1-3) 
- (removed) clang/test/Parser/cxx2c-trivially-relocatable.cpp (-31) 
- (modified) clang/test/SemaCXX/cxx2c-trivially-relocatable.cpp (-123) 
- (modified) clang/test/SemaCXX/ptrauth-triviality.cpp (-24) 
- (modified) clang/test/SemaCXX/ptrauth-type-traits.cpp (-148) 
- (modified) clang/test/SemaCXX/trivially-relocatable-ptrauth.cpp (-43) 
- (modified) clang/test/SemaCXX/type-traits-unsatisfied-diags.cpp (-21) 


``````````diff
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 69497505bbb30..54c311914468a 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -130,6 +130,12 @@ C++ Specific Potentially Breaking Changes
 - ``VarTemplateSpecializationDecl::getTemplateArgsAsWritten()`` method now
   returns ``nullptr`` for implicitly instantiated declarations.
 
+- ``__builtin_is_replaceable``, ``trivially_relocable_if_eligible``, and 
``replaceable_if_eligible``
+  have been removed as `P2786 <https://wg21.link/P2786>`_ have been removed 
from C++2c.
+  ``__builtin_is_cpp_trivially_relocatable`` and 
``__builtin_trivially_relocate`` have been kept back,
+  with the `P2786 <https://wg21.link/P2786>`_ semantics, except there is no 
longer a way
+  to explicitly specify a type is relocatable.
+
 ABI Changes in This Version
 ---------------------------
 - Fix AArch64 argument passing for C++ empty classes with large explicitly 
specified alignment.
@@ -197,7 +203,7 @@ C++2c Feature Support
 ^^^^^^^^^^^^^^^^^^^^^
 
 - Started the implementation of `P2686R5 <https://wg21.link/P2686R5>`_ 
Constexpr structured bindings.
-  At this timem, references to constexpr and decomposition of *tuple-like* 
types are not supported
+  At this time, references to constexpr and decomposition of *tuple-like* 
types are not supported
   (only arrays and aggregates are).
 
 C++23 Feature Support
diff --git a/clang/include/clang/Basic/Attr.td 
b/clang/include/clang/Basic/Attr.td
index b017906a8d690..efa64dbe4b51e 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -1944,14 +1944,6 @@ def Final : InheritableAttr {
   let Documentation = [InternalOnly];
 }
 
-def TriviallyRelocatable : InheritableAttr {
-  let Spellings = [CustomKeyword<"trivially_relocatable_if_eligible">];
-  let SemaHandler = 0;
-  // Omitted from docs, since this is language syntax, not an attribute, as far
-  // as users are concerned.
-  let Documentation = [InternalOnly];
-}
-
 def MinSize : InheritableAttr {
   let Spellings = [Clang<"minsize">];
   let Subjects = SubjectList<[Function, ObjCMethod], ErrorDiag>;
diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td 
b/clang/include/clang/Basic/DiagnosticParseKinds.td
index 662fe16d965b6..f4cdc827239f5 100644
--- a/clang/include/clang/Basic/DiagnosticParseKinds.td
+++ b/clang/include/clang/Basic/DiagnosticParseKinds.td
@@ -1079,25 +1079,12 @@ def ext_ms_abstract_keyword : ExtWarn<
   "'abstract' keyword is a Microsoft extension">,
   InGroup<MicrosoftAbstract>;
 
-def ext_relocatable_keyword
-    : ExtWarn<
-          "'trivially_relocatable_if_eligible' keyword is a C++2c extension">,
-      InGroup<CXX26>;
-def warn_relocatable_keyword
-    : Warning<"'trivially_relocatable_if_eligible' keyword is incompatible "
-              "with standards before C++2c">,
-      DefaultIgnore,
-      InGroup<CXXPre26Compat>;
-
 def err_access_specifier_interface : Error<
   "interface types cannot specify '%select{private|protected}0' access">;
 
 def err_duplicate_class_virt_specifier : Error<
   "class already marked '%0'">;
 
-def err_duplicate_class_relocation_specifier
-    : Error<"class already marked 'trivially_relocatable_if_eligible'">;
-
 def err_duplicate_virt_specifier : Error<
   "class member already marked '%0'">;
 
diff --git a/clang/include/clang/Parse/Parser.h 
b/clang/include/clang/Parse/Parser.h
index e03d7994e2fa5..9d21c507959f1 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -2834,7 +2834,6 @@ class Parser : public CodeCompletionHandler {
   mutable IdentifierInfo *Ident_final;
   mutable IdentifierInfo *Ident_GNU_final;
   mutable IdentifierInfo *Ident_override;
-  mutable IdentifierInfo *Ident_trivially_relocatable_if_eligible;
 
   /// Representation of a class that has been parsed, including
   /// any member function declarations or definitions that need to be
@@ -3598,10 +3597,6 @@ class Parser : public CodeCompletionHandler {
   /// \endverbatim
   AccessSpecifier getAccessSpecifierIfPresent() const;
 
-  bool isCXX2CTriviallyRelocatableKeyword(Token Tok) const;
-  bool isCXX2CTriviallyRelocatableKeyword() const;
-  void ParseCXX2CTriviallyRelocatableSpecifier(SourceLocation &TRS);
-
   /// 'final', a C++26 'trivially_relocatable_if_eligible',
   /// or Microsoft 'sealed' or 'abstract' contextual
   /// keyword.
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index c9ad6860dc625..b0fc2034eb336 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -4365,7 +4365,6 @@ class Sema final : public SemaBase {
                                        SourceLocation FinalLoc,
                                        bool IsFinalSpelledSealed,
                                        bool IsAbstract,
-                                       SourceLocation TriviallyRelocatable,
                                        SourceLocation LBraceLoc);
 
   /// ActOnTagFinishDefinition - Invoked once we have finished parsing
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 6b67a2aa99cc7..af0361c10a011 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1871,8 +1871,7 @@ void Parser::ParseClassSpecifier(tok::TokenKind 
TagTokKind,
              (NextToken().is(tok::l_square) ||
               NextToken().is(tok::kw_alignas) ||
               NextToken().isRegularKeywordAttribute() ||
-              isCXX11VirtSpecifier(NextToken()) != VirtSpecifiers::VS_None ||
-              isCXX2CTriviallyRelocatableKeyword())) {
+              isCXX11VirtSpecifier(NextToken()) != VirtSpecifiers::VS_None)) {
     // We can't tell if this is a definition or reference
     // until we skipped the 'final' and C++11 attribute specifiers.
     TentativeParsingAction PA(*this);
@@ -2478,34 +2477,7 @@ bool Parser::isCXX11FinalKeyword() const {
          Specifier == VirtSpecifiers::VS_Sealed;
 }
 
-bool Parser::isCXX2CTriviallyRelocatableKeyword(Token Tok) const {
-  if (!getLangOpts().CPlusPlus || Tok.isNot(tok::identifier))
-    return false;
-  if (!Ident_trivially_relocatable_if_eligible)
-    Ident_trivially_relocatable_if_eligible =
-        &PP.getIdentifierTable().get("trivially_relocatable_if_eligible");
-  IdentifierInfo *II = Tok.getIdentifierInfo();
-  return II == Ident_trivially_relocatable_if_eligible;
-}
-
-bool Parser::isCXX2CTriviallyRelocatableKeyword() const {
-  return isCXX2CTriviallyRelocatableKeyword(Tok);
-}
-
-void Parser::ParseCXX2CTriviallyRelocatableSpecifier(SourceLocation &TRS) {
-  assert(isCXX2CTriviallyRelocatableKeyword() &&
-         "expected a trivially_relocatable specifier");
-
-  Diag(Tok.getLocation(), getLangOpts().CPlusPlus26
-                              ? diag::warn_relocatable_keyword
-                              : diag::ext_relocatable_keyword);
-
-  TRS = ConsumeToken();
-}
-
 bool Parser::isClassCompatibleKeyword(Token Tok) const {
-  if (isCXX2CTriviallyRelocatableKeyword(Tok))
-    return true;
   VirtSpecifiers::Specifier Specifier = isCXX11VirtSpecifier(Tok);
   return Specifier == VirtSpecifiers::VS_Final ||
          Specifier == VirtSpecifiers::VS_GNU_Final ||
@@ -3559,24 +3531,12 @@ void Parser::ParseCXXMemberSpecification(SourceLocation 
RecordLoc,
   SourceLocation AbstractLoc;
   bool IsFinalSpelledSealed = false;
   bool IsAbstract = false;
-  SourceLocation TriviallyRelocatable;
 
   // Parse the optional 'final' keyword.
   if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {
     while (true) {
       VirtSpecifiers::Specifier Specifier = isCXX11VirtSpecifier(Tok);
       if (Specifier == VirtSpecifiers::VS_None) {
-        if (isCXX2CTriviallyRelocatableKeyword(Tok)) {
-          if (TriviallyRelocatable.isValid()) {
-            auto Skipped = Tok;
-            ConsumeToken();
-            Diag(Skipped, diag::err_duplicate_class_relocation_specifier)
-                << TriviallyRelocatable;
-          } else {
-            ParseCXX2CTriviallyRelocatableSpecifier(TriviallyRelocatable);
-          }
-          continue;
-        }
         break;
       }
       if (isCXX11FinalKeyword()) {
@@ -3614,8 +3574,7 @@ void Parser::ParseCXXMemberSpecification(SourceLocation 
RecordLoc,
       else if (Specifier == VirtSpecifiers::VS_GNU_Final)
         Diag(FinalLoc, diag::ext_warn_gnu_final);
     }
-    assert((FinalLoc.isValid() || AbstractLoc.isValid() ||
-            TriviallyRelocatable.isValid()) &&
+    assert((FinalLoc.isValid() || AbstractLoc.isValid()) &&
            "not a class definition");
 
     // Parse any C++11 attributes after 'final' keyword.
@@ -3688,9 +3647,9 @@ void Parser::ParseCXXMemberSpecification(SourceLocation 
RecordLoc,
   T.consumeOpen();
 
   if (TagDecl)
-    Actions.ActOnStartCXXMemberDeclarations(
-        getCurScope(), TagDecl, FinalLoc, IsFinalSpelledSealed, IsAbstract,
-        TriviallyRelocatable, T.getOpenLocation());
+    Actions.ActOnStartCXXMemberDeclarations(getCurScope(), TagDecl, FinalLoc,
+                                            IsFinalSpelledSealed, IsAbstract,
+                                            T.getOpenLocation());
 
   // C++ 11p3: Members of a class defined with the keyword class are private
   // by default. Members of a class defined with the keywords struct or union
diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp
index 1f32bf8009ded..8f6f023dd79d0 100644
--- a/clang/lib/Parse/Parser.cpp
+++ b/clang/lib/Parse/Parser.cpp
@@ -514,7 +514,6 @@ void Parser::Initialize() {
   Ident_sealed = nullptr;
   Ident_abstract = nullptr;
   Ident_override = nullptr;
-  Ident_trivially_relocatable_if_eligible = nullptr;
   Ident_GNU_final = nullptr;
   Ident_import = nullptr;
   Ident_module = nullptr;
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index b943ea2f85030..d55b8afc1b7f7 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -18806,7 +18806,6 @@ void Sema::ActOnStartCXXMemberDeclarations(Scope *S, 
Decl *TagD,
                                            SourceLocation FinalLoc,
                                            bool IsFinalSpelledSealed,
                                            bool IsAbstract,
-                                           SourceLocation TriviallyRelocatable,
                                            SourceLocation LBraceLoc) {
   AdjustDeclIfTemplate(TagD);
   CXXRecordDecl *Record = cast<CXXRecordDecl>(TagD);
@@ -18826,10 +18825,6 @@ void Sema::ActOnStartCXXMemberDeclarations(Scope *S, 
Decl *TagD,
                                           : FinalAttr::Keyword_final));
   }
 
-  if (TriviallyRelocatable.isValid())
-    Record->addAttr(
-        TriviallyRelocatableAttr::Create(Context, TriviallyRelocatable));
-
   // C++ [class]p2:
   //   [...] The class-name is also inserted into the scope of the
   //   class itself; this is known as the injected-class-name. For
diff --git a/clang/lib/Sema/SemaTypeTraits.cpp 
b/clang/lib/Sema/SemaTypeTraits.cpp
index f9d223a67e393..be2c8853d6433 100644
--- a/clang/lib/Sema/SemaTypeTraits.cpp
+++ b/clang/lib/Sema/SemaTypeTraits.cpp
@@ -243,10 +243,6 @@ Sema::CheckCXX2CRelocatable(const CXXRecordDecl *D) {
     if (!IsEligibleForTrivialRelocation(*this, D))
       return false;
 
-    // has the trivially_relocatable_if_eligible class-property-specifier,
-    if (D->hasAttr<TriviallyRelocatableAttr>())
-      return true;
-
     // is a union with no user-declared special member functions, or
     if (IsUnion())
       return true;
@@ -2082,8 +2078,6 @@ static void DiagnoseNonTriviallyRelocatableReason(Sema 
&SemaRef,
         << diag::TraitNotSatisfiedReason::DeletedDtr << /*Deleted*/ 0
         << D->getDestructor()->getSourceRange();
 
-  if (D->hasAttr<TriviallyRelocatableAttr>())
-    return;
   DiagnoseNonDefaultMovable(SemaRef, Loc, D);
 }
 
diff --git a/clang/test/CodeGenCXX/cxx2c-trivially-relocatable.cpp 
b/clang/test/CodeGenCXX/cxx2c-trivially-relocatable.cpp
index 465e539d363e8..c772c82ae0b4f 100644
--- a/clang/test/CodeGenCXX/cxx2c-trivially-relocatable.cpp
+++ b/clang/test/CodeGenCXX/cxx2c-trivially-relocatable.cpp
@@ -2,9 +2,7 @@
 
 typedef __SIZE_TYPE__ size_t;
 
-struct S trivially_relocatable_if_eligible {
-    S(const S&);
-    ~S();
+struct S {
     int a;
     int b;
 };
diff --git a/clang/test/Parser/cxx2c-trivially-relocatable.cpp 
b/clang/test/Parser/cxx2c-trivially-relocatable.cpp
deleted file mode 100644
index e47fe2a32972c..0000000000000
--- a/clang/test/Parser/cxx2c-trivially-relocatable.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-// RUN: %clang_cc1 -std=c++03 -verify=expected,cxx11,cxx03 -fsyntax-only %s
-// RUN: %clang_cc1 -std=c++11 -verify=expected,cxx11 -fsyntax-only %s
-// RUN: %clang_cc1 -std=c++2c -verify=expected -fsyntax-only %s
-
-
-class A trivially_relocatable_if_eligible {};
-// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c 
extension}}
-class E final trivially_relocatable_if_eligible {};
-// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c 
extension}}
-// cxx03-warning@-2 {{'final' keyword is a C++11 extension}}
-class G trivially_relocatable_if_eligible final{};
-// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c 
extension}}
-// cxx03-warning@-2 {{'final' keyword is a C++11 extension}}
-class I trivially_relocatable_if_eligible trivially_relocatable_if_eligible 
final {};
-// expected-error@-1 {{class already marked 
'trivially_relocatable_if_eligible'}}
-// cxx11-warning@-2 {{'trivially_relocatable_if_eligible' keyword is a C++2c 
extension}}
-// cxx03-warning@-3 {{'final' keyword is a C++11 extension}}
-class trivially_relocatable_if_eligible trivially_relocatable_if_eligible {};
-// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c 
extension}}
-class L trivially_relocatable_if_eligible final {};
-// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c 
extension}}
-// cxx03-warning@-2 {{'final' keyword is a C++11 extension}}
-class M final trivially_relocatable_if_eligible {};
-// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c 
extension}}
-// cxx03-warning@-2 {{'final' keyword is a C++11 extension}}
-class N final trivially_relocatable_if_eligible {};
-// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c 
extension}}
-// cxx03-warning@-2 {{'final' keyword is a C++11 extension}}
-class O trivially_relocatable_if_eligible final {};
-// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c 
extension}}
-// cxx03-warning@-2 {{'final' keyword is a C++11 extension}}
diff --git a/clang/test/SemaCXX/cxx2c-trivially-relocatable.cpp 
b/clang/test/SemaCXX/cxx2c-trivially-relocatable.cpp
index 1fdce9cf2ec0b..deaa3d1057d3f 100644
--- a/clang/test/SemaCXX/cxx2c-trivially-relocatable.cpp
+++ b/clang/test/SemaCXX/cxx2c-trivially-relocatable.cpp
@@ -8,59 +8,6 @@ struct NonRelocatable {
 };
 static NonRelocatable NonRelocatable_g;
 
-class A trivially_relocatable_if_eligible {};
-static_assert(__builtin_is_cpp_trivially_relocatable(A));
-
-
-class B trivially_relocatable_if_eligible : Trivial{};
-static_assert(__builtin_is_cpp_trivially_relocatable(B));
-
-class C trivially_relocatable_if_eligible {
-    int a;
-    void* b;
-    int c[3];
-    Trivial d[3];
-    NonRelocatable& e = NonRelocatable_g;
-};
-static_assert(__builtin_is_cpp_trivially_relocatable(C));
-
-
-class D trivially_relocatable_if_eligible : Trivial {};
-static_assert(__builtin_is_cpp_trivially_relocatable(D));
-
-
-class E trivially_relocatable_if_eligible : virtual Trivial {};
-static_assert(!__builtin_is_cpp_trivially_relocatable(E));
-
-
-class F trivially_relocatable_if_eligible : NonRelocatable {};
-static_assert(!__builtin_is_cpp_trivially_relocatable(F));
-
-class G trivially_relocatable_if_eligible {
-    G(G&&);
-};
-static_assert(__builtin_is_cpp_trivially_relocatable(G));
-
-class H trivially_relocatable_if_eligible {
-    ~H();
-};
-static_assert(__builtin_is_cpp_trivially_relocatable(H));
-
-class I trivially_relocatable_if_eligible {
-    NonRelocatable a;
-    NonRelocatable b[1];
-    const NonRelocatable c;
-    const NonRelocatable d[1];
-};
-static_assert(!__builtin_is_cpp_trivially_relocatable(I));
-
-
-class J trivially_relocatable_if_eligible:  virtual Trivial, NonRelocatable {
-    NonRelocatable a;
-};
-static_assert(!__builtin_is_cpp_trivially_relocatable(J));
-
-
 struct Incomplete; // expected-note {{forward declaration of 'Incomplete'}}
 static_assert(__builtin_is_cpp_trivially_relocatable(Incomplete));  // 
expected-error {{incomplete type 'Incomplete' used in type trait expression}}
 static_assert(__builtin_is_cpp_trivially_relocatable(int));
@@ -76,11 +23,6 @@ struct WithConst {
 };
 static_assert(!__builtin_is_cpp_trivially_relocatable(WithConst));
 
-struct WithConstExplicit trivially_relocatable_if_eligible {
-    const int i;
-};
-static_assert(__builtin_is_cpp_trivially_relocatable(WithConstExplicit));
-
 struct UserDtr {
     ~UserDtr();
 };
@@ -130,11 +72,6 @@ 
static_assert(__builtin_is_cpp_trivially_relocatable(UserMoveAssignDefault));
 static_assert(__builtin_is_cpp_trivially_relocatable(UserCopyDefault));
 static_assert(!__builtin_is_cpp_trivially_relocatable(UserDeletedMove));
 
-template <typename T>
-class TestDependentErrors trivially_relocatable_if_eligible : T {};
-TestDependentErrors<Trivial> Ok;
-TestDependentErrors<NonRelocatable> Err;
-
 struct DeletedMove {
     DeletedMove(DeletedMove&&) = delete;
 };
@@ -155,13 +92,6 @@ 
static_assert(!__builtin_is_cpp_trivially_relocatable(DeletedMoveAssign));
 static_assert(!__builtin_is_cpp_trivially_relocatable(DeletedDtr));
 
 
-union U {
-    G g;
-};
-static_assert(!__is_trivially_copyable(U));
-static_assert(__builtin_is_cpp_trivially_relocatable(U));
-
-
 template <typename T>
 struct S {
     T t;
@@ -175,21 +105,6 @@ 
static_assert(__builtin_is_cpp_trivially_relocatable(S<int[2]>));
 static_assert(!__builtin_is_cpp_trivially_relocatable(S<const int[2]>));
 static_assert(__builtin_is_cpp_trivially_relocatable(S<int[]>));
 
-
-template <typename T>
-struct SExplicit trivially_relocatable_if_eligible{
-    T t;
-};
-static_assert(__builtin_is_cpp_trivially_relocatable(SExplicit<int>));
-static_assert(__builtin_is_cpp_trivially_relocatable(SExplicit<volatile int>));
-static_assert(__builtin_is_cpp_trivially_relocatable(SExplicit<const int>));
-static_assert(__builtin_is_cpp_trivially_relocatable(SExplicit<const int&>));
-static_assert(__builtin_is_cpp_trivially_relocatable(SExplicit<int&>));
-static_assert(__builtin_is_cpp_trivially_relocatable(SExplicit<int[2]>));
-static_assert(__builtin_is_cpp_trivially_relocatable(SExplicit<const int[2]>));
-static_assert(__builtin_is_cpp_trivially_relocatable(SExplicit<int[]>));
-
-
 namespace replaceable {
 
 struct DeletedMove {
@@ -252,15 +167,6 @@ 
static_assert(!__builtin_is_cpp_trivially_relocatable(int[n]));
 // expected-note@-2 {{read of non-const variable 'n' is not allowed in a 
constant expression}}
 
 
-struct S42 trivially_relocatable_if_eligible {
-    S42(S42&&);
-    S42& operator=(S42&&) = default;
-};
-struct S43 trivially_relocatable_if_eligible {
-    S43(S43&&) = default;
-    S43& operator=(S43&&);
-};
-
 
 struct Copyable1Explicit {
    Copyable1Explicit(Copyable1Explicit const &) = default;
@@ -348,32 +254,3 @@ C& C::operator=(const C&) = default;
 
 static_assert (!__builtin_is_cpp_trivially_relocatable(C));
 }
-
-namespace GH144232 {
-
-struct E trivially_relocatable_if_eligible {
-  E (E &&);
-  E &operator= (E &&) = default;
-};
-
-struct F trivially_relocatable_if_eligible {
-  F (F &&) = default;
-  F &operator= (F &&);
-};
-
-struct G trivially_relocatable_if_eligible { G (G const &) = default; };
-
-struct I trivially_relocatable_if_eligible { I &operator= (const I &) = 
default; };
-
-struct J trivially_relocatable_if_eligible { J (J const &); };
-struct K trivially_relocatable_if_eligible { K (K const &); };
-
-
-static_assert (__builtin_is_cpp_trivially_relocatable(E));
-static_assert (__builtin_is_cpp_trivially_relocatable(F));
-static_assert (__builtin_is_cpp_trivially_relocatable(G));
-static_assert (__builtin_is_cpp_trivially_relocatable(I));
-static_assert (__builtin_is_cpp_trivially_relocatable(J));
-static_assert (__builtin_is_cpp_trivially_relocatable(K));
-
-}
diff --git a/clang/test/...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/174344
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to