[Lldb-commits] [lldb] r350773 - Write PDB/variables.test to be more robust.

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Wed Jan 9 15:26:50 PST 2019


Author: zturner
Date: Wed Jan  9 15:26:50 2019
New Revision: 350773

URL: http://llvm.org/viewvc/llvm-project?rev=350773&view=rev
Log:
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.

Modified:
    lldb/trunk/lit/SymbolFile/PDB/variables.test

Modified: lldb/trunk/lit/SymbolFile/PDB/variables.test
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/SymbolFile/PDB/variables.test?rev=350773&r1=350772&r2=350773&view=diff
==============================================================================
--- lldb/trunk/lit/SymbolFile/PDB/variables.test (original)
+++ lldb/trunk/lit/SymbolFile/PDB/variables.test Wed Jan  9 15:26:50 2019
@@ -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 at 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 at 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 at 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 at 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 at Class@@QEAAXXZ
-CHECK-NEXT:  Block{[[FID4]]}
-CHECK-DAG:     Variable{{.*}}, name = "this"
-CHECK-SAME:    scope = parameter
-CHECK-SAME:    artificial
+FUNC-MEMBER:      Function{{.*}}, mangled = ?Func at Class@@QEAAXXZ
+FUNC-MEMBER-NEXT:   Block
+FUNC-MEMBER-NEXT:     Variable{{.*}}, name = "this"
+FUNC-MEMBER-SAME:                     scope = parameter
+FUNC-MEMBER-SAME:                     artificial




More information about the lldb-commits mailing list