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

            Bug ID: 118292
           Summary: Erroneous 'is_standard_layout' value in derived class
                    with multi-level inheritance chain when
                    [[no_unique_address]] is involved
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rush102333 at gmail dot com
  Target Milestone: ---

$g++ -std=c++20 err.cpp

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

struct E1 { }; struct E2 { };
struct A
{
  [[no_unique_address]] E1 e;
};

class C : A{};

class B : C
{
  [[no_unique_address]] E2 e;
};

static_assert(!__is_standard_layout (B), "");

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The test input above is able to trigger the assertion in gcc but not in clang,
EDG or MSVC.

Note that gcc will not assert if the [[no_unique_address]] specifier is
removed.

Compiler Explorer:

https://godbolt.org/z/7EPTGdGzd

Reply via email to