xref: /llvm-project/lldb/test/Shell/SymbolFile/PDB/class-layout.test (revision 20c4e95b9c03a77c2e5ce5f354114752d380c591)
1REQUIRES: target-windows, msvc
2RUN: %build --compiler=clang-cl --mode=compile --arch=32 --nodefaultlib --output=%T/ClassLayoutTest.cpp.obj %S/Inputs/ClassLayoutTest.cpp
3RUN: %build --compiler=msvc --mode=link --arch=32 --nodefaultlib --output=%T/ClassLayoutTest.cpp.exe %T/ClassLayoutTest.cpp.obj
4RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck %s
5RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck --check-prefix=ENUM %s
6RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck --check-prefix=UNION %s
7RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck --check-prefix=STRUCT %s
8RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck --check-prefix=COMPLEX %s
9RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck --check-prefix=LIST %s
10RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck --check-prefix=UNNAMED-STRUCT %s
11RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck --check-prefix=BASE %s
12RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck --check-prefix=FRIEND %s
13RUN: lldb-test symbols %T/ClassLayoutTest.cpp.exe | FileCheck --check-prefix=CLASS %s
14
15CHECK: Module [[MOD:.*]]
16CHECK: SymbolFile pdb ([[MOD]])
17CHECK: {{^[0-9A-F]+}}:   CompileUnit{{[{]0x[0-9a-f]+[}]}}, language = "c++", file = '{{.*}}\ClassLayoutTest.cpp'
18
19ENUM:  name = "Enum", size = 4,  decl = ClassLayoutTest.cpp:5
20ENUM-SAME: enum Enum {
21ENUM:    RED,
22ENUM:    GREEN,
23ENUM:    BLUE
24ENUM:}
25
26UNION:  name = "Union", size = 4, decl = ClassLayoutTest.cpp:9
27UNION-SAME: union Union {
28UNION:    short Row;
29UNION:    unsigned short Col;
30UNION:    int Line : 16;
31UNION:    long Table;
32UNION:}
33
34STRUCT:  name = "Struct", size = 64, decl = ClassLayoutTest.cpp:22
35STRUCT-SAME: struct Struct {
36STRUCT:    bool A;
37STRUCT:    unsigned char UCharVar;
38STRUCT:    unsigned int UIntVar;
39STRUCT:    long long LongLongVar;
40STRUCT:    Enum EnumVar;
41STRUCT:    int array[10];
42STRUCT:}
43
44COMPLEX:  name = "Complex", size = 368, decl = ClassLayoutTest.cpp:33
45COMPLEX-SAME: struct Complex {
46COMPLEX:    _List *array[90];
47COMPLEX:    int x;
48COMPLEX:    int a;
49COMPLEX:    float b;
50COMPLEX:}
51
52LIST:  name = "_List", size = 12, decl = ClassLayoutTest.cpp:45
53LIST-SAME: struct _List {
54LIST:    _List *current;
55LIST:    _List *previous;
56LIST:    _List *next;
57LIST:}
58
59UNNAMED-STRUCT:  name = "UnnamedStruct", size = 4, decl = ClassLayoutTest.cpp:52
60UNNAMED-STRUCT-SAME: struct UnnamedStruct {
61UNNAMED-STRUCT:   int a;
62UNNAMED-STRUCT:}
63
64BASE:  name = "Base", size = 4,  decl = ClassLayoutTest.cpp:59
65BASE-SAME: class Base {
66BASE:    int a;
67BASE:    Base();
68BASE:    ~Base();
69BASE:    int Get();
70BASE:}
71
72FRIEND:  name = "Friend", size = 1, decl = ClassLayoutTest.cpp:70
73FRIEND-SAME: class Friend {
74FRIEND:    int f();
75FRIEND: }
76
77CLASS:  name = "Class", size = 88, decl = ClassLayoutTest.cpp:74
78CLASS-SAME: class Class : public MemberTest::Base {
79CLASS:    static int m_static;
80CLASS:    int m_public;
81CLASS:    Struct m_struct;
82CLASS:    Union m_union;
83CLASS:    int m_private;
84CLASS:    int m_protected;
85CLASS:    Class();
86CLASS:    Class(int);
87CLASS:    ~Class();
88CLASS:    {{(static )?}}int {{.*}}StaticMemberFunc(int, ...);
89CLASS:    int Get();
90CLASS:    int f(MemberTest::Friend);
91CLASS:    bool operator==(const MemberTest::Class &)
92CLASS:}
93