aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/Shell/SymbolFile/PDB/variables.test
blob: 970d714c29c3b6e050ea16fec8e6be92d3cc6d45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
REQUIRES: system-windows, msvc
RUN: mkdir -p %t.dir
RUN: %build --compiler=clang-cl --mode=compile --arch=64 --nodefaultlib --output=%t.dir/VariablesTest.cpp.obj %S/Inputs/VariablesTest.cpp
RUN: %build --compiler=msvc --mode=link --arch=64 --nodefaultlib --output=%t.dir/VariablesTest.cpp.exe %t.dir/VariablesTest.cpp.obj
# Note: The native plugin creates a location list for variables that's only valid for the function.
#       The DIA plugin creates a location expression that's always valid. This causes DIA to output
#       one line per variable where the native plugin would output two (the second would contain the
#       location information). This removes the second line from the output of the native plugin.
#       It's done in both cases, because LLDB might not be compiled with the DIA SDK in which case
#       the native plugin is always used.
RUN: env LLDB_USE_NATIVE_PDB_READER=0 lldb-test symbols %t.dir/VariablesTest.cpp.exe | sed '/^ \+\[0x/d' > %t.dir/VariablesTest.DIA.out
RUN: env LLDB_USE_NATIVE_PDB_READER=1 lldb-test symbols %t.dir/VariablesTest.cpp.exe | sed '/^ \+\[0x/d' > %t.dir/VariablesTest.Native.out
RUN: FileCheck --check-prefix=GLOBALS --input-file=%t.dir/VariablesTest.DIA.out %s
RUN: FileCheck --check-prefix=GLOBALS --input-file=%t.dir/VariablesTest.Native.out %s
RUN: FileCheck --check-prefix=FUNC-F --input-file=%t.dir/VariablesTest.DIA.out %s
RUN: FileCheck --check-prefix=FUNC-F --input-file=%t.dir/VariablesTest.Native.out %s
RUN: FileCheck --check-prefix=FUNC-MAIN --input-file=%t.dir/VariablesTest.DIA.out %s
RUN: FileCheck --check-prefix=FUNC-MAIN --input-file=%t.dir/VariablesTest.Native.out %s
RUN: FileCheck --check-prefix=FUNC-CONSTRUCTOR --input-file=%t.dir/VariablesTest.DIA.out %s
RUN: FileCheck --check-prefix=FUNC-CONSTRUCTOR --input-file=%t.dir/VariablesTest.Native.out %s
RUN: FileCheck --check-prefix=FUNC-MEMBER --input-file=%t.dir/VariablesTest.DIA.out %s
RUN: FileCheck --check-prefix=FUNC-MEMBER --input-file=%t.dir/VariablesTest.Native.out %s

GLOBALS: Module [[MOD:.*]]
GLOBALS: SymbolFile {{(native-)?}}pdb ([[MOD]])
GLOBALS:     CompileUnit{{.*}}, language = "c++", file = '{{.*}}\VariablesTest.cpp'
GLOBALS-DAG:   Variable{{.*}}, name = "g_IntVar"
GLOBALS-SAME:  scope = global, location = {{.*}}, external
GLOBALS-DAG:   Variable{{.*}}, name = "g_pConst"
GLOBALS-SAME:  scope = global, location = {{.*}}, external
GLOBALS-DAG:   Variable{{.*}}, name = "same_name_var"
GLOBALS-SAME:  scope = global, location = {{.*}}, external
GLOBALS-DAG:   Variable{{.*}}, name = "Class::m_StaticClassMember"
GLOBALS-SAME:  scope = global, location = {{.*}}, external
GLOBALS-DAG:   Variable{{.*}}, name = "g_EnumVar"
GLOBALS-SAME:  scope = global, location = {{.*}}, external
GLOBALS-DAG:   Variable{{.*}}, name = "g_tls"
GLOBALS-SAME:  scope = thread local, location = {{.*}}, external
GLOBALS-DAG:   Variable{{.*}}, name = "ClassVar"
GLOBALS-SAME:  scope = global, location = {{.*}}, external
GLOBALS-DAG:   Variable{{.*}}, name = "g_Const"
GLOBALS-SAME:  scope = ??? (2)
GLOBALS:     Function

FUNC-F:      Function{{.*}}, {{mangled = \?f@@YAHHH@Z|demangled = f}}
FUNC-F-NEXT:   Block
FUNC-F-NEXT:     Variable{{.*}}, name = "var_arg1"
FUNC-F-SAME:                     scope = parameter
FUNC-F-NEXT:     Variable{{.*}}, name = "var_arg2"
FUNC-F-SAME:                     scope = parameter
FUNC-F-NEXT:     Variable{{.*}}, name = "same_name_var"
FUNC-F-SAME:                     scope = local

FUNC-MAIN:      Function{{.*}}, {{(de)?}}mangled = main
FUNC-MAIN-NEXT:   Block
FUNC-MAIN-NEXT:     Variable{{.*}}, name = "same_name_var"
FUNC-MAIN-SAME:                     scope = local
FUNC-MAIN-NEXT:     Variable{{.*}}, name = "local_const"
FUNC-MAIN-SAME:                     scope = local
FUNC-MAIN-NEXT:     Variable{{.*}}, name = "local_CString"
FUNC-MAIN-SAME:                     scope = local
FUNC-MAIN-NEXT:     Variable{{.*}}, name = "local_pCString"
FUNC-MAIN-SAME:                     scope = local
FUNC-MAIN-NEXT:     Variable{{.*}}, name = "a"
FUNC-MAIN-SAME:                     scope = local

FUNC-CONSTRUCTOR:      Function{{.*}}, {{(de)?}}mangled = {{.*}}Class::Class{{.*}}
FUNC-CONSTRUCTOR-NEXT:   Block
FUNC-CONSTRUCTOR-NEXT:     Variable{{.*}}, name = "this"
FUNC-CONSTRUCTOR-SAME:                     scope = parameter
FUNC-CONSTRUCTOR-NEXT:     Variable{{.*}}, name = "a"
FUNC-CONSTRUCTOR-SAME:                     scope = parameter

FUNC-MEMBER:      Function{{.*}}, {{(de)?}}mangled = {{.*}}{{(Class::)?}}Func{{.*}}
FUNC-MEMBER-NEXT:   Block
FUNC-MEMBER-NEXT:     Variable{{.*}}, name = "this"
FUNC-MEMBER-SAME:                     scope = parameter