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