[PATCH] D155895: git squash commit for trivial-abi-vs-anonymous-unions.

Ɓukasz Anforowicz via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 20 15:05:24 PDT 2023


lukasza created this revision.
Herald added a project: All.
lukasza requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

1480d173fca1c83809ed5ac350c19021c7036a99
Anonymous unions should be transparent wrt `[[clang::trivial_abi]]`.

Consider the test input below:

  struct [[clang::trivial_abi]] Trivial {
    Trivial() {}
    Trivial(Trivial&& other) {}
    Trivial& operator=(Trivial&& other) { return *this; }
    ~Trivial() {}
  };
  static_assert(__is_trivially_relocatable(Trivial), "");
  
  struct [[clang::trivial_abi]] S2 {
    S2(S2&& other) {}
    S2& operator=(S2&& other) { return *this; }
    ~S2() {}
    union { Trivial field; };
  };
  static_assert(__is_trivially_relocatable(S2), "");


Before the fix Clang would warn that 'trivial_abi' is disallowed on 'S2'
because it has a field of a non-trivial class type (the type of the
anonymous union is non-trivial, because it doesn't have the
`[[clang::trivial_abi]]` attribute applied to it).  Consequently, before
the fix the `static_assert` about `__is_trivially_relocatable` would
fail.

Note that `[[clang::trivial_abi]]` cannot be applied to the anonymous
union, because Clang warns that 'trivial_abi' is disallowed on '(unnamed
union at ...)' because its copy constructors and move constructors are
all deleted. Also note that it is impossible to provide copy nor move
constructors for anonymous unions and structs.

f1ba3de456dd2b5561c5ef78ddeea345066f8400
.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D155895

Files:
  clang/lib/Sema/SemaDeclCXX.cpp
  clang/test/SemaCXX/attr-trivial-abi.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D155895.542697.patch
Type: text/x-patch
Size: 5796 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230720/fee65c74/attachment.bin>


More information about the cfe-commits mailing list