Relands #149701 which was reverted in
185ae5cdc6
because it broke demangling of Itanium symbols on i386.
The last commit in this PR adds the fix for this (discussed in #160930).
On x86 environments, the prefix of `__cdecl` functions will now be
removed to match DWARF. I opened #161676 to discuss this for the other
calling conventions.
78 lines
4.5 KiB
Plaintext
78 lines
4.5 KiB
Plaintext
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
|
|
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{{.*}}, {{mangled = \?\?0Class@@QEAA@H@Z|demangled = .*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{{.*}}, {{mangled = \?Func@Class@@QEAAXXZ|demangled = .*Class::Func}}
|
|
FUNC-MEMBER-NEXT: Block
|
|
FUNC-MEMBER-NEXT: Variable{{.*}}, name = "this"
|
|
FUNC-MEMBER-SAME: scope = parameter
|