https://bugs.llvm.org/show_bug.cgi?id=39259

            Bug ID: 39259
           Summary: Incomplete DW_OP_piece in DWARF
           Product: new-bugs
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: new bugs
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected]

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.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to