On Wed, Feb 17, 2021 at 12:08 AM Vivek Pandey < vivek.pan...@tallysolutions.com> wrote:
> I think Clang, on/for windows, should give a compile time flag/option that > can be used to control it (A flag when set make compile-time operator like > sizeoff to behave like MSVC or non-MSVC) > But that would break the ability for that code to call existing libraries (including the MS runtime), I think - which would be quite broken/unusable, so far as I know. > As in the current form it is breaking building of cross-platform > application. > What dependence does this application have on the size of certain structures? That seems quite not-cross-platform to me & the code probably should be changed to be flexible to the different size of layouts on different platforms. > > > With C++11 onward many things are incorporated in standard so that one > code base can be used across platform. Now if compiler is blocking the flow > then it seems moving back to pre C++11. > > > > *From:* David Blaikie <dblai...@gmail.com> > *Sent:* Friday, January 29, 2021 3:23 AM > *To:* Vivek Pandey <vivek.pan...@tallysolutions.com> > *Cc:* cfe-users@lists.llvm.org; Manu Agarwal < > manu.agar...@tallysolutions.com>; Tuhin Sengupta < > tuhin.sengu...@tallysolutions.com> > *Subject:* Re: [cfe-users] Clang Sizeof give diff value for Microsoft and > Linux > > > > Clang on Windows is designed to be compatible with MSVC - which has > different layout requirements than the Itanium ABI/GCC on Linux. I don't > think there's a way to use the same ABI on both platforms - especially not > if you are interacting with any code compiled by another compiler on both > platforms (existing/foregin C++ precompiled libraries). > > > > On Thu, Jan 28, 2021 at 1:45 PM Vivek Pandey via cfe-users < > cfe-users@lists.llvm.org> wrote: > > Hi Team, > > > > We are using Clang 11 for our product that has common C++ code base for > Windows, Linux, Macintosh, …. > > > > We observed that sizeof operator gives different value on Windows and > Linux/OSX, when the inheritance is from a common base class: > > > > Example Sample: > > > > #include <cassert> > > > > struct Base {}; // empty class > > > > struct Derived1 : Base { > > int i; > > }; > > > > struct Derived2 : Base { > > Base c; // Base, occupies 1 byte, followed by padding for i > > int i; > > }; > > > > struct Derived3 : Base { > > Derived1 c; // Derived1 is too derived from same Base class > > int i; > > }; > > > > int main() > > { > > assert > <https://ind01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Ferror%2Fassert&data=04%7C01%7Cvivek.pandey%40tallysolutions.com%7C1a2156b9e1d146b7360608d8c3d71ae2%7C66bcd9b727254893bb969ae424774af6%7C0%7C0%7C637474675935486094%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=NYeOWjC%2B0xhCxaFWPvJTpcN9xvz8uCZDV5gAKEan8J0%3D&reserved=0>(sizeof(Derived2) > == 2*sizeof(int)); > > > > assert > <https://ind01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Ferror%2Fassert&data=04%7C01%7Cvivek.pandey%40tallysolutions.com%7C1a2156b9e1d146b7360608d8c3d71ae2%7C66bcd9b727254893bb969ae424774af6%7C0%7C0%7C637474675935496090%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=ymboJjAMIu8lm26ZdA7L%2FArWNyxIUUu96c89R5f4oR8%3D&reserved=0> > (sizeof(Derived3) == 3*sizeof(int)); > > } > > > > When we compile above program using Clang 11 and run it on > windows and Linux sizeof(Derived3) give different value. > > > > We don’t want a work-around via making first data member of derived class > of type different from class that also is derived from same empty base > class. > > Is there any flag that we can use so that it gives same result on all > platform (Windows/Linux/OSX/Android/iOS/….) > > Or another way to solve this gracefully. > > > > Thank you! > > > > Best Regards, > > Vivek > > > > _______________________________________________ > cfe-users mailing list > cfe-users@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users > <https://ind01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-users&data=04%7C01%7Cvivek.pandey%40tallysolutions.com%7C1a2156b9e1d146b7360608d8c3d71ae2%7C66bcd9b727254893bb969ae424774af6%7C0%7C0%7C637474675935496090%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=jAVCIt7Ty9mpi84hTN3aZKNLj8oHTmEYcmNW4anhe7I%3D&reserved=0> > >
_______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users