<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
On 15/09/2011 19:35, r4start wrote:
<blockquote cite="mid:4E721B25.8020809@gmail.com" type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
On 15/09/2011 16:17, Don Williamson wrote:
<blockquote
cite="mid:1316089064.12698.YahooMailNeo@web161716.mail.bf1.yahoo.com"
type="cite">
<div style="color:#000; background-color:#fff;
font-family:arial, helvetica, sans-serif;font-size:10pt">
<div><span>That sounds great!</span></div>
<div><br>
</div>
<div style="font-size: 10pt; font-family: arial, helvetica,
sans-serif; ">
<div style="font-size: 12pt; font-family: 'times new roman',
'new york', times, serif; "><font face="Arial" size="2">
<hr size="1"><b><span style="font-weight:bold;">From:</span></b>
r4start <a moz-do-not-send="true"
class="moz-txt-link-rfc2396E"
href="mailto:r4start@gmail.com"><r4start@gmail.com></a><br>
<b><span style="font-weight: bold;">To:</span></b> Don
Williamson <a moz-do-not-send="true"
class="moz-txt-link-rfc2396E"
href="mailto:don.williamson@yahoo.com"><don.williamson@yahoo.com></a><br>
<b><span style="font-weight: bold;">Cc:</span></b> <a
moz-do-not-send="true"
class="moz-txt-link-abbreviated"
href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<b><span style="font-weight: bold;">Sent:</span></b>
Thursday, September 15, 2011 12:35 PM<br>
<b><span style="font-weight: bold;">Subject:</span></b>
Re: [cfe-dev] Implementation of MSRecordLayoutBuilder.<br>
</font><br>
<meta http-equiv="x-dns-prefetch-control" content="off">
<div id="yiv2083192445"> On 15/09/2011 15:14, Don
Williamson wrote:
<blockquote type="cite">
<div style="color: rgb(0, 0, 0); background-color:
rgb(255, 255, 255); font-size: 10pt; font-family:
arial, helvetica, sans-serif; ">
<div><span>Sure, I started a previous thread about
this:</span></div>
<div><span><br>
</span></div>
<div><span><a moz-do-not-send="true" rel="nofollow"
target="_blank"
href="http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-September/016941.html">http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-September/016941.html</a><br>
</span></div>
<div><a moz-do-not-send="true" rel="nofollow"
target="_blank"
href="http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-September/016942.html">http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-September/016942.html</a><br>
</div>
<div><a moz-do-not-send="true" rel="nofollow"
target="_blank"
href="http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-September/016944.html">http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-September/016944.html</a><br>
</div>
<div><a moz-do-not-send="true" rel="nofollow"
target="_blank"
href="http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-September/016970.html">http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-September/016970.html</a><br>
</div>
<div><br>
</div>
<div>It boils down to two problems I've had:</div>
<div><br>
</div>
<div>* If there is a double anywhere in a struct,
MSVC pads the vftbl pointer.</div>
<div>* The <span
class="yiv2083192445Apple-style-span"
style="white-space: pre; font-size: 16px;
font-family: monospace; ">IsPODForThePurposeOfLayout</span> check
is invalid for MS targets and so you get a
different layout depending upon whether your type
has a struct or not.</div>
<div><br>
</div>
<div>I suggested a simple patch in my last post that
fixes these. My test cases so far are here:</div>
<div><br>
</div>
<div><a moz-do-not-send="true" rel="nofollow"
target="_blank"
href="https://bitbucket.org/dwilliamson/clreflect/src/tip/src/clReflectTest/TestOffsets.cpp">https://bitbucket.org/dwilliamson/clreflect/src/tip/src/clReflectTest/TestOffsets.cpp</a><br>
</div>
<div><br>
</div>
<div>my patch works for all of them but
unfortunately I haven't had time to sync to the
lastest build of clang so I'm not in a position to
submit a patch.</div>
<div><br>
</div>
<div>It would be nice if we could figure something
out that solves the biggest number of cases :)</div>
<div><br>
</div>
<div>Cheers,</div>
<div>- Don</div>
<div><br>
</div>
<div style="font-size: 10pt; font-family: arial,
helvetica, sans-serif; ">
<div style="font-size: 12pt; font-family: times,
serif; "><font face="Arial" size="2">
<hr size="1"><b><span
style="font-weight:bold;">From:</span></b>
r4start <a moz-do-not-send="true"
rel="nofollow"
class="yiv2083192445moz-txt-link-rfc2396E"
ymailto="mailto:r4start@gmail.com"
target="_blank"
href="mailto:r4start@gmail.com"><r4start@gmail.com></a><br>
<b><span style="font-weight:bold;">To:</span></b>
Don Williamson <a moz-do-not-send="true"
rel="nofollow"
class="yiv2083192445moz-txt-link-rfc2396E"
ymailto="mailto:don.williamson@yahoo.com"
target="_blank"
href="mailto:don.williamson@yahoo.com"><don.williamson@yahoo.com></a><br>
<b><span style="font-weight:bold;">Cc:</span></b>
<a moz-do-not-send="true" rel="nofollow"
class="yiv2083192445moz-txt-link-abbreviated"
ymailto="mailto:cfe-dev@cs.uiuc.edu"
target="_blank"
href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<b><span style="font-weight:bold;">Sent:</span></b>
Thursday, September 15, 2011 12:06 PM<br>
<b><span style="font-weight:bold;">Subject:</span></b>
Re: [cfe-dev] Implementation of
MSRecordLayoutBuilder.<br>
</font><br>
<div id="yiv2083192445"> On 15/09/2011 14:52,
Don Williamson wrote:
<blockquote type="cite">
<div style="color: rgb(0, 0, 0);
background-color: rgb(255, 255, 255);
font-size: 10pt; font-family: arial,
helvetica, sans-serif; ">
<div><span>Hi Dmitry,</span></div>
<div><span><br>
</span></div>
<div><span>I'm really interested in the
original test cases you have that
failed with the original
implementation of the record layout
builder - could you share them?</span></div>
<div><span><br>
</span></div>
<div><span>How does your current patch
work with the following test:</span></div>
<div><span><br>
</span></div>
<div><span>#pragma pack(push, 8)</span></div>
<div><span>class B {</span></div>
<div><span>public:</span></div>
<div> virtual void b(){}</div>
<div> int a;</div>
<div> double b;</div>
<div><span>};</span></div>
<div><span>#pragma pack(pop)</span></div>
<div><span><br>
</span></div>
<div><span>Have you also tried test cases
with and without constructors?</span></div>
<div><span><br>
</span></div>
<div><span>Thanks,</span></div>
<div><span>- Don</span></div>
<div><br>
</div>
<div style="font-size: 10pt; font-family:
arial, helvetica, sans-serif; ">
<div style="font-size: 12pt;
font-family: times, serif; "><font
face="Arial" size="2">
<hr size="1"><b><span
style="font-weight:bold;">From:</span></b>
r4start <a moz-do-not-send="true"
rel="nofollow"
class="yiv2083192445moz-txt-link-rfc2396E"
ymailto="mailto:r4start@gmail.com"
target="_blank"
href="mailto:r4start@gmail.com"><r4start@gmail.com></a><br>
<b><span style="font-weight:bold;">To:</span></b>
John McCall <a
moz-do-not-send="true"
rel="nofollow"
class="yiv2083192445moz-txt-link-rfc2396E"
ymailto="mailto:rjmccall@apple.com" target="_blank"
href="mailto:rjmccall@apple.com"><rjmccall@apple.com></a><br>
<b><span style="font-weight:bold;">Cc:</span></b>
<a moz-do-not-send="true"
rel="nofollow"
class="yiv2083192445moz-txt-link-abbreviated"
ymailto="mailto:cfe-dev@cs.uiuc.edu" target="_blank"
href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<b><span style="font-weight:bold;">Sent:</span></b>
Thursday, September 15, 2011 11:20
AM<br>
<b><span style="font-weight:bold;">Subject:</span></b>
Re: [cfe-dev] Implementation of
MSRecordLayoutBuilder.<br>
</font><br>
On 15/09/2011 00:39, r4start wrote:<br>
> On 15/09/2011 00:36, John McCall
wrote:<br>
>> On Sep 14, 2011, at 1:33 PM,
r4start wrote:<br>
>> <br>
>>> On 15/09/2011 00:24, John
McCall wrote:<br>
>>>> On Sep 14, 2011, at
1:23 PM, r4start wrote:<br>
>>>>> On 14/09/2011
21:53, John McCall wrote:<br>
>>>>>> On Sep 14,
2011, at 4:05 AM, r4start wrote:<br>
>>>>>> <br>
>>>>>>> On
14/09/2011 00:42, r4start wrote:<br>
>>>>>>>> On
14/09/2011 00:37, Eli Friedman wrote:<br>
>>>>>>>>>
On Mon, Sep 12, 2011 at 11:45 PM,
r4start<<a moz-do-not-send="true"
rel="nofollow"
ymailto="mailto:r4start@gmail.com"
target="_blank"
href="mailto:r4start@gmail.com">r4start@gmail.com</a>>
wrote:<br>
>>>>>>>>>>
On 12/09/2011 21:57, r4start wrote:<br>
>>>>>>>>>>>
On 12/09/2011 21:37, Eli Friedman
wrote:<br>
>>>>>>>>>>>>
On Mon, Sep 12, 2011 at 8:56 AM,
r4start<<a moz-do-not-send="true"
rel="nofollow"
ymailto="mailto:r4start@gmail.com"
target="_blank"
href="mailto:r4start@gmail.com">r4start@gmail.com</a>>
wrote:<br>
>>>>>>>>>>>>>
Hi,<br>
>>>>>>>>>>>>>
I have some prototype code for
MSRecordLayoutBuilder. I test<br>
>>>>>>>>>>>>>
this code<br>
>>>>>>>>>>>>>
with MSVS 2010 and \Zp8 compiler
option. On simple examples it<br>
>>>>>>>>>>>>>
seems to<br>
>>>>>>>>>>>>>
work properly.<br>
>>>>>>>>>>>>>
<br>
>>>>>>>>>>>>>
Is it interesting to the clang
project?<br>
>>>>>>>>>>>>
We certainly want to fix any cases
where clang does not do struct<br>
>>>>>>>>>>>>
layout consistently with MSVC on
Windows. It's hard to comment on<br>
>>>>>>>>>>>>
your patch without seeing it.<br>
>>>>>>>>>>>>
<br>
>>>>>>>>>>>>
-Eli<br>
>>>>>>>>>>>
Now I'm not at work. When I come to
work I'll send a patch.<br>
>>>>>>>>>>>
<br>
>>>>>>>>>>>
- Dmitry<br>
>>>>>>>>>>
Here is patch for
MSRecordLayoutBuilder.<br>
>>>>>>>>> I
think it would be better to integrate
the checks into the main<br>
>>>>>>>>>
RecordLayoutBuilder class rather than
subclassing it.<br>
>>>>>>>>> <br>
>>>>>>>>>
Please include tests in your patch.
(See test/CodeGen/ms_struct.c for<br>
>>>>>>>>>
an example.)<br>
>>>>>>>>> <br>
>>>>>>>>> I
would like someone more familiar with
MSVC to review the actual<br>
>>>>>>>>>
logic here (ping me if nobody does
within a few days, though, and I'll<br>
>>>>>>>>>
try to review anyway).<br>
>>>>>>>>> <br>
>>>>>>>>>
-Eli<br>
>>>>>>>> Ok,
thanks for hint.<br>
>>>>>>>> <br>
>>>>>>>>
-Dmitry.<br>
>>>>>>> I have a
problem when writing a test. Clang
doesn't implement Microsoft<br>
>>>>>>> ABI and
he crashes at code generation stage.<br>
>>>>>>> Clang
have dump-record-layouts option but he
prints AST layouts and<br>
>>>>>>> CodeGen
layouts.<br>
>>>>>>> <br>
>>>>>>> Is there
a way to save only AST record layout
to file and then check<br>
>>>>>>> or maybe
my patch must include
CGRecordLayoutBuilder for Microsoft?<br>
>>>>>> It would be
easy enough to add a new testing
switch if you'd like to get this in.<br>
>>>>> Can you give me
some hint how can I do this?<br>
>>>> Follow the code for
-dump-record-layouts.<br>
>>> You propose to duplicate
the output to a file and then run
FileCheck to check output, am I right?<br>
>> It would probably be better
to run FileCheck directly on the
output, but<br>
>> I think you get the general
idea.<br>
>> <br>
>> Whenever you get
CGRecordLayoutBuilder working
adequately, you can rip<br>
>> out the new option and just
use -dump-record-layouts.<br>
>> <br>
>> John.<br>
> Ok, thanks. Tomorrow I'll do it.<br>
> <br>
Here is a test and patch.<br>
<br>
- Dmitry.<br>
<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a moz-do-not-send="true"
rel="nofollow"
ymailto="mailto:cfe-dev@cs.uiuc.edu"
target="_blank"
href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a moz-do-not-send="true"
rel="nofollow" target="_blank"
href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br>
<br>
</div>
</div>
</div>
</blockquote>
Hi,<br>
what I get from MSVS output :<br>
<br>
class B size(24):<br>
1> +---<br>
1> 0 | {vfptr}<br>
1> 8 | a<br>
1> | <alignment member>
(size=4)<br>
1> 16 | c<br>
1> +---<br>
<br>
And this I get from clang with my patch:<br>
0 | class B<br>
0 | (B vtable pointer)<br>
4 | int a<br>
8 | double c<br>
sizeof=16, dsize=16, align=8<br>
nvsize=16, nvalign=8<br>
<br>
I'll try to fix this.<br>
<br>
What do you mean when you say "<span>Have you
also tried test cases with and without
constructors?</span>", can you give me some
examples and I check them.<br>
<br>
- Dmitry.<br>
</div>
<br>
<br>
</div>
</div>
</div>
</blockquote>
Thanks for examples. I'll add your patch to my code.<br>
I think it will be great if we will have full support
for Microsoft layout.<br>
<br>
- Dmitry.<br>
</div>
<meta http-equiv="x-dns-prefetch-control" content="on">
<br>
<br>
</div>
</div>
</div>
</blockquote>
Now it seems working fine.<br>
</blockquote>
Hi Eli,<br>
can you review my patch?<br>
<br>
- Dmitry.<br>
</body>
</html>