<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>183311</bug_id>
          
          <creation_ts>2018-03-03 02:38:10 -0800</creation_ts>
          <short_desc>dump-class-layout mishandles duplicates base classes and miscomputes padding</short_desc>
          <delta_ts>2018-05-19 11:42:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>183939</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>joepeck</cc>
    
    <cc>lforschler</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1403466</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-03-03 02:38:10 -0800</bug_when>
    <thetext>dump-class-layout mishandles duplicates base classes and miscomputes padding

INPUT: (I want to see the layout of Target)

&gt; class VirtualBaseOne {
&gt; public:
&gt;     virtual ~VirtualBaseOne() {}
&gt; };
&gt; 
&gt; class VirtualBaseTwo {
&gt; public:
&gt;     virtual ~VirtualBaseTwo() {}
&gt; };
&gt; 
&gt; class OtherBase {};
&gt; class OtherOtherBase : public OtherBase {};
&gt; 
&gt; class ThingWithData {
&gt;     void* inputs[16];
&gt;     unsigned count;
&gt; };
&gt; 
&gt; class Base : virtual public VirtualBaseOne, virtual public VirtualBaseTwo, virtual protected OtherOtherBase {
&gt; public:
&gt;     virtual ~Base() {};
&gt;     bool x;
&gt;     ThingWithData data;
&gt; };
&gt; 
&gt; class Target : public Base {
&gt;     int a;
&gt;     int b;
&gt;     int c;
&gt;     int d;
&gt; };
&gt; 
&gt; int main() {
&gt;     Target x;
&gt;     return 0;
&gt; }

BEFORE:

&gt; Found 1 types matching &quot;Target&quot; in &quot;/tmp/a.out&quot; for systemArch
&gt;   +0 {176} Target
&gt;   +0 {160}     Base
&gt;   +0 {  8}         VirtualBaseOne
&gt;   +0 &lt;  8&gt;             __vtbl_ptr_type * _vptr;
&gt;   +0 {  1}         OtherOtherBase
&gt;   +0 {  1}             OtherBase
&gt;   +0 {  8}         VirtualBaseOne
&gt;   +0 &lt;  8&gt;             __vtbl_ptr_type * _vptr;
&gt;   +0 {  1}         OtherOtherBase
&gt;   +0 {  1}             OtherBase
&gt;   +1 &lt;  7&gt;         &lt;PADDING&gt;
&gt;   +8 &lt;  1&gt;         bool x;
&gt;   +9 &lt;  7&gt;         &lt;PADDING&gt;
&gt;  +16 &lt;136&gt;         ThingWithData data;
&gt;  +16 &lt;128&gt;             void *[16] inputs;
&gt; +144 &lt;  4&gt;             unsigned int count;
&gt; +148 &lt;  4&gt;         &lt;PADDING&gt;
&gt; +152 {  8}         VirtualBaseTwo
&gt; +152 &lt;  8&gt;             __vtbl_ptr_type * _vptr;
&gt; +152 {  8}         VirtualBaseTwo
&gt; +152 &lt;  8&gt;             __vtbl_ptr_type * _vptr;
&gt;   +0 {  8}     VirtualBaseOne
&gt;   +0 &lt;  8&gt;         __vtbl_ptr_type * _vptr;
&gt;   +0 {  1}     OtherOtherBase
&gt;   +0 {  1}         OtherBase
&gt;   +1 &lt;151&gt;     &lt;PADDING&gt;
&gt; +152 &lt;  4&gt;     int a;
&gt; +156 &lt;  4&gt;     int b;
&gt; +160 &lt;  4&gt;     int c;
&gt; +164 &lt;  4&gt;     int d;
&gt; +168 {  8}     VirtualBaseTwo
&gt; +168 &lt;  8&gt;         __vtbl_ptr_type * _vptr;
&gt; Total byte size: 176
&gt; Total pad bytes: 169
&gt; Padding percentage: 96.02 %

AFTER:

&gt; Found 1 types matching &quot;Target&quot; in &quot;/tmp/a.out&quot; for systemArch
&gt;   +0 {176} Target
&gt;   +0 {160}     Base
&gt;   +0 {  8}         VirtualBaseOne
&gt;   +0 &lt;  8&gt;             __vtbl_ptr_type * _vptr;
&gt;   +0 {  1}         OtherOtherBase
&gt;   +0 {  1}             OtherBase
&gt;   +1 &lt;  7&gt;         &lt;PADDING&gt;
&gt;   +8 &lt;  1&gt;         bool x;
&gt;   +9 &lt;  7&gt;         &lt;PADDING&gt;
&gt;  +16 &lt;136&gt;         ThingWithData data;
&gt;  +16 &lt;128&gt;             void *[16] inputs;
&gt; +144 &lt;  4&gt;             unsigned int count;
&gt; +148 &lt;  4&gt;         &lt;PADDING&gt;
&gt; +152 {  8}         VirtualBaseTwo
&gt; +152 &lt;  8&gt;             __vtbl_ptr_type * _vptr;
&gt; +152 &lt;  4&gt;     int a;
&gt; +156 &lt;  4&gt;     int b;
&gt; +160 &lt;  4&gt;     int c;
&gt; +164 &lt;  4&gt;     int d;
&gt; +168 {  8}     VirtualBaseTwo
&gt; +168 &lt;  8&gt;         __vtbl_ptr_type * _vptr;
&gt; Total byte size: 176
&gt; Total pad bytes: 18
&gt; Padding percentage: 10.23 %</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403467</commentid>
    <comment_count>1</comment_count>
      <attachid>334953</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-03-03 02:40:54 -0800</bug_when>
    <thetext>Created attachment 334953
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403694</commentid>
    <comment_count>2</comment_count>
      <attachid>334953</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-05 11:40:31 -0800</bug_when>
    <thetext>Comment on attachment 334953
[PATCH] Proposed Fix

Rejecting attachment 334953 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 334953, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
rdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 332, in _call_chain
    result = func(*args)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1170, in https_open
    return self.do_open(conn_factory, req)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1118, in do_open
    raise URLError(err)
urllib2.URLError: &lt;urlopen error [Errno 60] Operation timed out&gt;

Full output: http://webkit-queues.webkit.org/results/6815059</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425451</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-05-19 11:42:34 -0700</bug_when>
    <thetext>This fix isn&apos;t right: bug 185801</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334953</attachid>
            <date>2018-03-03 02:40:54 -0800</date>
            <delta_ts>2018-03-05 11:40:31 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>improve-dump-1.patch</filename>
            <type>text/plain</type>
            <size>3490</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MmRj
NGNiMDJmNS4uNzk5MzI5MzhkMzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxOC0wMy0wMyAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIGR1bXAtY2xhc3MtbGF5b3V0IG1p
c2hhbmRsZXMgZHVwbGljYXRlcyBiYXNlIGNsYXNzZXMgYW5kIG1pc2NvbXB1dGVzIHBhZGRpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MzMxMQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0
cy9kdW1wLWNsYXNzLWxheW91dDoKKyAgICAgICAgKHZlcmlmeV90eXBlKToKKyAgICAgICAgKHZl
cmlmeV90eXBlX3JlY3Vyc2l2ZSk6CisgICAgICAgIEtlZXAgYSBsaXN0IG9mIHNlZW4gKG9mZnNl
dCwgdHlwZSkgdGhhdCB3ZSBoYXZlIG91dHB1dCBhbmQgZG9uJ3QgcmUtb3V0cHV0IHRoZW0uCisg
ICAgICAgIFRoZSBQeXRob24gdHlwZXMgbGlzdCB0aGUgYmFzZSBjbGFzc2VzIGFzIG1lbWJlcnMg
bXVsdGlwbGUgdGltZXMgYXMgeW91IGl0ZXJhdGUKKyAgICAgICAgdGhyb3VnaCB0aGUgbWVtYmVy
cywgc28ganVzdCBpZ25vcmUgdGhlbSBpZiB3ZSBoYXZlIHNlZW0gdGhlbSBhbHJlYWR5IGF0IGEK
KyAgICAgICAgc3BlY2lmaWMgb2Zmc2V0LgorCiAyMDE4LTAyLTEzICBEb24gT2xtc3RlYWQgIDxk
b24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW0NNYWtlXSBNYWtlIFdlYkNvcmUgaGVh
ZGVycyBjb3BpZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvZHVtcC1jbGFzcy1sYXlvdXQg
Yi9Ub29scy9TY3JpcHRzL2R1bXAtY2xhc3MtbGF5b3V0CmluZGV4IDRlMjNiYjczYTAxLi4wMzc0
NDdlNmM4YiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9kdW1wLWNsYXNzLWxheW91dAorKysg
Yi9Ub29scy9TY3JpcHRzL2R1bXAtY2xhc3MtbGF5b3V0CkBAIC0yOCw3ICsyOCw4IEBAIGltcG9y
dCBzeXMKIGltcG9ydCBnZXRvcHQKIGltcG9ydCBhcmdwYXJzZQogaW1wb3J0IG9zCi1pbXBvcnQg
c3VicHJvY2VzczsKK2ltcG9ydCBzdWJwcm9jZXNzCitmcm9tIHNldHMgaW1wb3J0IFNldAogCiAK
IGZyYW1ld29yayA9ICJXZWJDb3JlIgpAQCAtNTcsNyArNTgsOCBAQCBkZWYgaW1wb3J0X2xsZGIo
KToKIAogZGVmIHZlcmlmeV90eXBlKHRhcmdldCwgdHlwZSk6CiAgICAgdHlwZW5hbWUgPSB0eXBl
LkdldE5hbWUoKQotICAgIChlbmRfb2Zmc2V0LCBwYWRkaW5nKSA9IHZlcmlmeV90eXBlX3JlY3Vy
c2l2ZSh0YXJnZXQsIHR5cGUsIE5vbmUsIDAsIDAsIDApCisgICAgc2VlbkJlZm9yZSA9IFNldCgp
CisgICAgKGVuZF9vZmZzZXQsIHBhZGRpbmcpID0gdmVyaWZ5X3R5cGVfcmVjdXJzaXZlKHRhcmdl
dCwgdHlwZSwgTm9uZSwgMCwgMCwgMCwgc2VlbkJlZm9yZSkKICAgICBieXRlX3NpemUgPSB0eXBl
LkdldEJ5dGVTaXplKCkKICAgICBwcmludCAnVG90YWwgYnl0ZSBzaXplOiAldScgJSAoYnl0ZV9z
aXplKQogICAgIHByaW50ICdUb3RhbCBwYWQgYnl0ZXM6ICV1JyAlIChwYWRkaW5nKQpAQCAtNjUs
NyArNjcsNyBAQCBkZWYgdmVyaWZ5X3R5cGUodGFyZ2V0LCB0eXBlKToKICAgICAgICAgcHJpbnQg
J1BhZGRpbmcgcGVyY2VudGFnZTogJTIuMmYgJSUnICUgKChmbG9hdChwYWRkaW5nKSAvIGZsb2F0
KGJ5dGVfc2l6ZSkpICogMTAwLjApCiAgICAgcHJpbnQKIAotZGVmIHZlcmlmeV90eXBlX3JlY3Vy
c2l2ZSh0YXJnZXQsIHR5cGUsIG1lbWJlcl9uYW1lLCBkZXB0aCwgYmFzZV9vZmZzZXQsIHBhZGRp
bmcpOgorZGVmIHZlcmlmeV90eXBlX3JlY3Vyc2l2ZSh0YXJnZXQsIHR5cGUsIG1lbWJlcl9uYW1l
LCBkZXB0aCwgYmFzZV9vZmZzZXQsIHBhZGRpbmcsIHNlZW5CZWZvcmUpOgogICAgIHByZXZfZW5k
X29mZnNldCA9IGJhc2Vfb2Zmc2V0CiAgICAgdHlwZW5hbWUgPSB0eXBlLkdldE5hbWUoKQogICAg
IGJ5dGVfc2l6ZSA9IHR5cGUuR2V0Qnl0ZVNpemUoKQpAQCAtODUsNiArODcsMTEgQEAgZGVmIHZl
cmlmeV90eXBlX3JlY3Vyc2l2ZSh0YXJnZXQsIHR5cGUsIG1lbWJlcl9uYW1lLCBkZXB0aCwgYmFz
ZV9vZmZzZXQsIHBhZGRpbmcKICAgICAgICAgICAgIG1lbWJlcl90b3RhbF9vZmZzZXQgPSBtZW1i
ZXJfb2Zmc2V0ICsgYmFzZV9vZmZzZXQKICAgICAgICAgICAgIG1lbWJlcl9ieXRlX3NpemUgPSBt
ZW1iZXJfdHlwZS5HZXRCeXRlU2l6ZSgpCiAgICAgICAgICAgICBtZW1iZXJfaXNfY2xhc3Nfb3Jf
c3RydWN0ID0gRmFsc2UKKworICAgICAgICAgICAgaWYgKG1lbWJlcl9vZmZzZXQsIG1lbWJlcl9u
YW1lKSBpbiBzZWVuT2Zmc2V0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICBzZWVuT2Zmc2V0LmFkZCgobWVtYmVyX29mZnNldCwgbWVtYmVyX25hbWUpKQorCiAgICAgICAg
ICAgICBpZiBtZW1iZXJfdHlwZV9jbGFzcyA9PSBsbGRiLmVUeXBlQ2xhc3NTdHJ1Y3Qgb3IgbWVt
YmVyX3R5cGVfY2xhc3MgPT0gbGxkYi5lVHlwZUNsYXNzQ2xhc3M6CiAgICAgICAgICAgICAgICAg
bWVtYmVyX2lzX2NsYXNzX29yX3N0cnVjdCA9IFRydWUKICAgICAgICAgICAgIGlmIG1lbWJlcl9p
ZHggPT0gMCBhbmQgbWVtYmVyX29mZnNldCA9PSB0YXJnZXQuR2V0QWRkcmVzc0J5dGVTaXplKCkg
YW5kIHR5cGUuSXNQb2x5bW9ycGhpY0NsYXNzKCk6CkBAIC05OCw3ICsxMDUsNyBAQCBkZWYgdmVy
aWZ5X3R5cGVfcmVjdXJzaXZlKHRhcmdldCwgdHlwZSwgbWVtYmVyX25hbWUsIGRlcHRoLCBiYXNl
X29mZnNldCwgcGFkZGluZwogICAgICAgICAgICAgICAgICAgICBwcmludCAnJSs0dSA8JTN1PiAl
czxQQURESU5HPicgJSAocHJldl9lbmRfb2Zmc2V0LCBtZW1iZXJfcGFkZGluZywgJyAgICAnICog
KGRlcHRoICsgMSkpCiAKICAgICAgICAgICAgIGlmIG1lbWJlcl9pc19jbGFzc19vcl9zdHJ1Y3Q6
Ci0gICAgICAgICAgICAgICAgKHByZXZfZW5kX29mZnNldCwgcGFkZGluZykgPSB2ZXJpZnlfdHlw
ZV9yZWN1cnNpdmUodGFyZ2V0LCBtZW1iZXJfY2Fub25pY2FsX3R5cGUsIG1lbWJlcl9uYW1lLCBk
ZXB0aCArIDEsIG1lbWJlcl90b3RhbF9vZmZzZXQsIHBhZGRpbmcpCisgICAgICAgICAgICAgICAg
KHByZXZfZW5kX29mZnNldCwgcGFkZGluZykgPSB2ZXJpZnlfdHlwZV9yZWN1cnNpdmUodGFyZ2V0
LCBtZW1iZXJfY2Fub25pY2FsX3R5cGUsIG1lbWJlcl9uYW1lLCBkZXB0aCArIDEsIG1lbWJlcl90
b3RhbF9vZmZzZXQsIHBhZGRpbmcsIHNlZW5CZWZvcmUpCiAgICAgICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgICAgIHByZXZfZW5kX29mZnNldCA9IG1lbWJlcl90b3RhbF9vZmZzZXQgKyBtZW1i
ZXJfYnl0ZV9zaXplCiAgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGVuYW1lID0gbWVtYmVyX3R5
cGUuR2V0TmFtZSgpCg==
</data>
<flag name="review"
          id="353660"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="353661"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>