[cfe-dev] Implementation of the CGRecordLayoutBuilder for Microsoft ABI.

Aaron Ballman aaron at aaronballman.com
Mon Sep 26 16:52:14 PDT 2011


On Mon, Sep 26, 2011 at 6:42 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Mon, Sep 26, 2011 at 4:36 PM, Francois Pichet <pichet2000 at gmail.com> wrote:
>> On Mon, Sep 26, 2011 at 6:52 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
>>> On Mon, Sep 26, 2011 at 6:09 AM, r4start <r4start at gmail.com> wrote:
>>>> I really don't understand why align=4 isn't correct.
>>>> I always thought that #pragma pack only affects members of the structure.
>>>> And __declspec(align(n)) specifies the alignment for objects of type.
>>>> In MSVS align for B is 4 and for A is 1.
>>>
>>> The only answer I can come up with is the model MSVC uses is simply insane.
>>>
>>> One more attempt to get some sanity: does the following compile with
>>> MSVC?  If so, what is the output?
>>>
>>> #include <cstdio>
>>> class A {
>>>  char c;
>>> };
>>> class B : public virtual A {
>>>  public:
>>>  void *p;
>>> };
>>> B* x = new B[10];
>>> int main() { std::printf("%d\n", (int)(x[1].p)); }
>>>
>>
>> it compiles and the output is 0.
>> not sure what you are trying to test here.
>
> Err, I meant to write the following:
> int main() { std::printf("%d\n", (int)&(x[1].p)); }

x86:
Debug: 1395565
Release: 1715501

x64:
Debug:3242496
Release: 1320128

~Aaron




More information about the cfe-dev mailing list