[Bug c++/97038] New: [[no_unique_address]] support anonymous unions

no_unique_address at mail dot de gcc-bugzilla@gcc.gnu.org
Sun Sep 13 11:47:51 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97038

            Bug ID: 97038
           Summary: [[no_unique_address]] support anonymous unions
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: no_unique_address at mail dot de
  Target Milestone: ---

Compiling the following source file with g++ -std=c++20 -Wall -pedantic
--
struct A {};
struct B {};
struct C
{
    [[no_unique_address]] union
    {
        [[no_unique_address]] A a;
        [[no_unique_address]] B b;
    } /*u*/;
    char c;
};

static_assert(sizeof(C) == sizeof(char));
--
leads to the following output:

<source>:6:5: warning: attribute ignored in declaration of 'union C::<unnamed>'
[-Wattributes]

    6 |     {

      |     ^

<source>:6:5: note: attribute for 'union C::<unnamed>' must follow the 'union'
keyword

<source>:13:25: error: static assertion failed

   13 | static_assert(sizeof(C) == sizeof(char));

      |               ~~~~~~~~~~^~~~~~~~~~~~~~~

Compiler returned: 1

See also: https://godbolt.org/z/GcW9cr

This works fine if the union is not anonymous.
This also works on clang 10.

It would be nice if it could be supported on gcc.


More information about the Gcc-bugs mailing list