Issue 153331
Summary [Clang] `-fdump-record-layouts` prints in the wrong order
Labels clang
Assignees
Reporter kon72
    The offsets of class C2 are out of order.

(This code is taken from https://itanium-cxx-abi.github.io/cxx-abi/abi.html#vtable-ctor-vtt)

```test.cpp
class A1 { int i; };
class A2 { int i; virtual void f(); };
class V1 : public A1, public A2 { int i; };
// A2 is primary base of V1, A1 is non-polymorphic

class B1 { int i; };
class B2 { int i; };
class V2 : public B1, public B2, public virtual V1 { int i; };
// V2 has no primary base, V1 is secondary base

class V3 { virtual void g(); };
class C2 : public virtual V3, public virtual V2 { int i; };

C2 c2;
```

Actual output:

```
*** Dumping AST Record Layout
         0 | class V3
 0 |   (V3 vtable pointer)
           | [sizeof=8, dsize=8, align=8,
 |  nvsize=8, nvalign=8]

*** Dumping AST Record Layout
         0 | class B1
         0 |   int i
           | [sizeof=4, dsize=4, align=4,
 |  nvsize=4, nvalign=4]

*** Dumping AST Record Layout
         0 | class B2
         0 |   int i
           | [sizeof=4, dsize=4, align=4,
 |  nvsize=4, nvalign=4]

*** Dumping AST Record Layout
 0 | class A1
         0 |   int i
           | [sizeof=4, dsize=4, align=4,
           |  nvsize=4, nvalign=4]

*** Dumping AST Record Layout
         0 | class A2
         0 |   (A2 vtable pointer)
         8 |   int i
           | [sizeof=16, dsize=12, align=8,
           | nvsize=12, nvalign=8]

*** Dumping AST Record Layout
         0 | class V1
         0 |   class A2 (primary base)
         0 |     (A2 vtable pointer)
         8 |     int i
        12 |   class A1 (base)
        12 |     int i
        16 |   int i
           | [sizeof=24, dsize=20, align=8,
           |  nvsize=20, nvalign=8]

*** Dumping AST Record Layout
         0 | class V2
         0 |   (V2 vtable pointer)
         8 |   class B1 (base)
         8 |     int i
        12 |   class B2 (base)
 12 |     int i
        16 |   int i
        24 |   class V1 (virtual base)
        24 |     class A2 (primary base)
        24 |       (A2 vtable pointer)
        32 |       int i
        36 |     class A1 (base)
 36 |       int i
        40 |     int i
           | [sizeof=48, dsize=44, align=8,
           |  nvsize=20, nvalign=8]

*** Dumping AST Record Layout
         0 | class C2
         8 |   int i
         0 | class V3 (primary virtual base)
         0 |     (V3 vtable pointer)
 40 |   class V1 (virtual base)
        40 |     class A2 (primary base)
 40 |       (A2 vtable pointer)
        48 |       int i
        52 | class A1 (base)
        52 |       int i
        56 |     int i
 16 |   class V2 (virtual base)
        16 |     (V2 vtable pointer)
 24 |     class B1 (base)
        24 |       int i
        28 |     class B2 (base)
        28 |       int i
        32 |     int i
           | [sizeof=64, dsize=60, align=8,
           |  nvsize=12, nvalign=8]
```

---

```
$ /opt/homebrew/opt/llvm/bin/clang -v
Homebrew clang version 20.1.8
Target: arm64-apple-darwin24.5.0
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/llvm/20.1.8/bin
Configuration file: /opt/homebrew/etc/clang/arm64-apple-darwin24.cfg
System configuration file directory: /opt/homebrew/etc/clang
User configuration file directory: /Users/kon/.config/clang
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to