Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Write PDB/variables.test to be more robust.
CHECK-DAG can't really be mixed with CHECK-NEXT statements because each non DAG check sets a new search-origin for following CHECK-DAG statements. This was passing by coincidence before, but a benign change in the way we process symbols caused the order of the output to be different, which triggered this test to fail. This change makes the test resilient against ordering problems by running a separate invocation of FileCheck for each function that we want to test. Note that with the Native PDB reader, we have full control over the ordering that symbols are processed in, so we don't have to worry about different machines returning things in different orders due to different DIA SDK versions. llvm-svn: 350773
- Loading branch information
Zachary Turner
committed
Jan 9, 2019
1 parent
1026ce6
commit f3a4770
Showing
1 changed file
with
58 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,58 +1,66 @@ | ||
REQUIRES: system-windows, msvc | ||
RUN: %build --compiler=clang-cl --mode=compile --arch=64 --nodefaultlib --output=%T/VariablesTest.cpp.obj %S/Inputs/VariablesTest.cpp | ||
RUN: %build --compiler=msvc --mode=link --arch=64 --nodefaultlib --output=%T/VariablesTest.cpp.exe %T/VariablesTest.cpp.obj | ||
RUN: lldb-test symbols %T/VariablesTest.cpp.exe | FileCheck %s | ||
RUN: lldb-test symbols %T/VariablesTest.cpp.exe > %T/VariablesTest.out | ||
RUN: FileCheck --check-prefix=GLOBALS --input-file=%T/VariablesTest.out %s | ||
RUN: FileCheck --check-prefix=FUNC-F --input-file=%T/VariablesTest.out %s | ||
RUN: FileCheck --check-prefix=FUNC-MAIN --input-file=%T/VariablesTest.out %s | ||
RUN: FileCheck --check-prefix=FUNC-CONSTRUCTOR --input-file=%T/VariablesTest.out %s | ||
RUN: FileCheck --check-prefix=FUNC-MEMBER --input-file=%T/VariablesTest.out %s | ||
|
||
CHECK: Module [[MOD:.*]] | ||
CHECK: SymbolVendor ([[MOD]]) | ||
CHECK: CompileUnit{{.*}}, language = "c++", file = '{{.*}}\VariablesTest.cpp' | ||
CHECK-DAG: Variable{{.*}}, name = "g_IntVar" | ||
CHECK-SAME: scope = global, location = {{.*}}, external | ||
CHECK-DAG: Variable{{.*}}, name = "m_StaticClassMember" | ||
CHECK-SAME: scope = global, location = {{.*}}, external | ||
CHECK-DAG: Variable{{.*}}, name = "g_pConst" | ||
CHECK-SAME: scope = global, location = {{.*}}, external | ||
CHECK-DAG: Variable{{.*}}, name = "same_name_var" | ||
CHECK-SAME: scope = global, location = {{.*}}, external | ||
CHECK-DAG: Variable{{.*}}, name = "g_EnumVar" | ||
CHECK-SAME: scope = global, location = {{.*}}, external | ||
CHECK-DAG: Variable{{.*}}, name = "g_tls" | ||
CHECK-SAME: scope = thread local, location = {{.*}}, external | ||
CHECK-DAG: Variable{{.*}}, name = "ClassVar" | ||
CHECK-SAME: scope = global, location = {{.*}}, external | ||
CHECK-DAG: Variable{{.*}}, name = "g_Const" | ||
CHECK-SAME: scope = ??? (2) | ||
GLOBALS: Module [[MOD:.*]] | ||
GLOBALS: SymbolVendor ([[MOD]]) | ||
GLOBALS: CompileUnit{{.*}}, language = "c++", file = '{{.*}}\VariablesTest.cpp' | ||
GLOBALS-DAG: Variable{{.*}}, name = "g_IntVar" | ||
GLOBALS-SAME: scope = global, location = {{.*}}, external | ||
GLOBALS-DAG: Variable{{.*}}, name = "m_StaticClassMember" | ||
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 = "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 | ||
|
||
CHECK-DAG: Function{[[FID1:.*]]}, mangled = ?f@@YAHHH@Z | ||
CHECK-NEXT: Block{[[FID1]]} | ||
CHECK-DAG: Variable{{.*}}, name = "var_arg1" | ||
CHECK-SAME: scope = parameter | ||
CHECK-DAG: Variable{{.*}}, name = "var_arg2" | ||
CHECK-SAME: scope = parameter | ||
CHECK-DAG: Variable{{.*}}, name = "same_name_var" | ||
CHECK-SAME: scope = local | ||
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 | ||
|
||
CHECK-DAG: Function{[[FID2:.*]]}, mangled = main | ||
CHECK-NEXT: Block{[[FID2]]} | ||
CHECK-DAG: Variable{{.*}}, name = "same_name_var" | ||
CHECK-SAME: scope = local | ||
CHECK-DAG: Variable{{.*}}, name = "local_const" | ||
CHECK-SAME: scope = local | ||
CHECK-DAG: Variable{{.*}}, name = "local_pCString" | ||
CHECK-SAME: scope = local | ||
CHECK-DAG: Variable{{.*}}, name = "a" | ||
CHECK-SAME: scope = local | ||
FUNC-MAIN: Function{{.*}}, 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 | ||
|
||
CHECK-DAG: Function{[[FID3:.*]]}, mangled = ??0Class@@QEAA@H@Z | ||
CHECK-NEXT: Block{[[FID3]]} | ||
CHECK-DAG: Variable{{.*}}, name = "this" | ||
CHECK-SAME: scope = parameter | ||
CHECK-SAME: artificial | ||
CHECK-DAG: Variable{{.*}}, name = "a" | ||
CHECK-SAME: scope = parameter | ||
FUNC-CONSTRUCTOR: Function{{.*}}, mangled = ??0Class@@QEAA@H@Z | ||
FUNC-CONSTRUCTOR-NEXT: Block | ||
FUNC-CONSTRUCTOR-NEXT: Variable{{.*}}, name = "this" | ||
FUNC-CONSTRUCTOR-SAME: scope = parameter | ||
FUNC-CONSTRUCTOR-SAME: artificial | ||
FUNC-CONSTRUCTOR-NEXT: Variable{{.*}}, name = "a" | ||
FUNC-CONSTRUCTOR-SAME: scope = parameter | ||
|
||
CHECK-DAG: Function{[[FID4:.*]]}, mangled = ?Func@Class@@QEAAXXZ | ||
CHECK-NEXT: Block{[[FID4]]} | ||
CHECK-DAG: Variable{{.*}}, name = "this" | ||
CHECK-SAME: scope = parameter | ||
CHECK-SAME: artificial | ||
FUNC-MEMBER: Function{{.*}}, mangled = ?Func@Class@@QEAAXXZ | ||
FUNC-MEMBER-NEXT: Block | ||
FUNC-MEMBER-NEXT: Variable{{.*}}, name = "this" | ||
FUNC-MEMBER-SAME: scope = parameter | ||
FUNC-MEMBER-SAME: artificial |