> On Mon, 13 Dec 2021 at 05:14, Andrew Pinski wrote: > > > > On Sun, Dec 12, 2021 at 9:04 PM Nayan Deshmukh via Gcc <gcc@gcc.gnu.org> > >wrote: > > > #include <iostream> > > > #include <stdint.h> > > > #include <cstddef> > > > struct A { > > > int a; > > > uint64_t b; > > > int c = -1; > > > }; > > > > The question becomes is the above a standard layout class or not. I > > Noticed clang does not change the rules for layout between C++11 and > > C++14 but GCC does. > > I don't know the exact rules in the ABI to help you there but I do > > think you should file a bug because it definitely looks unexpected > > really. > > The C++14 behaviour started with https://gcc.gnu.org/r216750 > > Implement N3653 (Member initializers and aggregates) and fix > references to 'this' in constexpr cons > tructors. > > Implement N3653 (Member initializers and aggregates) and fix > references to 'this' in constexpr constructors. > * class.c (check_field_decls): In C++14 an NSDMI does not make the > class non-aggregate. > > But I think the layout should be using "POD for the purpose of > layout", which means the C++98 POD rules. Please do report it to > bugzilla. I file a bug for this issue in bugzilla: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103681
Thanks, Nayan