<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Incomplete DW_OP_piece in DWARF"
   href="https://bugs.llvm.org/show_bug.cgi?id=39259">39259</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Incomplete DW_OP_piece in DWARF
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>new-bugs
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>new bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>mh+llvm@glandium.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>The following testcase was reduced from PresShell.cpp from the Firefox source:

$ cat > PresShell.ii <<EOF
typedef char a;
class b;
class c {
public:
  b *operator->();
};
enum class d : a { e };
struct ChangesToFlush {
  d mFlushType;
  bool mFlushAnimations;
};
class f {
public:
  c g;
};
class b {
public:
  int h();
};
class i : f {
  void j(ChangesToFlush);
  void k(bool);
};
void i::j(ChangesToFlush aFlush) {
  d l = aFlush.mFlushType;
  aFlush.mFlushAnimations && g->h();
  k(l < d::e);
}

$ clang++ -O2 -g -fno-exceptions -fno-rtti -fno-strict-aliasing -c PresShell.ii
-o PresShell.o

Relevant parts of dwarfdump of the resulting object:

< 1><0x000000f9>    DW_TAG_structure_type
                      DW_AT_name                  ChangesToFlush
                      DW_AT_byte_size             0x00000002

< 2><0x00000146>      DW_TAG_formal_parameter
                        DW_AT_location              <loclist at offset
0x00000059 with 1 entries follows>
                        [ 0]< offset pair low-off : 0x00000000 addr  0x00000000
high-off  0x0000002e addr 0x0000002e>DW_OP_reg3 DW_OP_piece 1
                        DW_AT_name                  aFlush

The number following DW_OP_piece is the object size in bytes, which here is 1,
while the object actually has a byte size of 2.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>