Skip to content

Commit

Permalink
[Dexter] Add support for Windows to regression test suite.
Browse files Browse the repository at this point in the history
This patch addresses the issue of the regression suite not running on windows
hardware. It changes the following things:

* add new dexter regression suite command to lit.cfg.py that makes use of the
  clang-cl_vs2015 and dbgend builder and debuggers.

* sprinkle the new regressionsuite command through the feature and tool tests
  that require them.

* mark certain problem tests on windows

* [revert fix] fixed darwin regression test failures by adding unsupported line
  for system-darwin to command tests.

There's a couple of tests that fail (or pass) in unexpected ways on Windows.

Problem tests are both the penalty and perfect expect_watch_type.cpp tests.
Type information reporting parity is not possible a this time in dexter due to
the nature of how different debuggers report type information back to their users.

reviewers: Orlando

Differential Revision: https://reviews.llvm.org/D76609
  • Loading branch information
Tom Weaver authored and Tom Weaver committed Mar 31, 2020
1 parent d30e9ad commit b6d2212
Show file tree
Hide file tree
Showing 18 changed files with 81 additions and 71 deletions.
Expand Up @@ -2,11 +2,9 @@
// Check that \DexExpectProgramState correctly applies a penalty when
// an expected program state is never found.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: not %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -glldb" -- %s \
// RUN: | FileCheck %s
// RUN: not %dexter_regression_test -- %s | FileCheck %s
// CHECK: expect_program_state.cpp:

int GCD(int lhs, int rhs)
Expand Down
Expand Up @@ -2,11 +2,9 @@
// Check that \DexExpectStepKind correctly applies a penalty when
// unexpected step kinds are encountered.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: not %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// RUN: not %dexter_regression_test -- %s | FileCheck %s
// CHECK: expect_step_kinds.cpp:

int abs(int i){
Expand Down
Expand Up @@ -2,11 +2,9 @@
// Check that \DexExpectStepOrder correctly applies a penalty for steps
// found out of expected order.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: not %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// RUN: not %dexter_regression_test -- %s | FileCheck %s
// CHECK: expect_step_order.cpp:

int main()
Expand Down
Expand Up @@ -2,11 +2,14 @@
// Check that \DexExpectWatchType applies penalties when expected
// types are not found and unexpected types are.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: not %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
//
// NOTE: This test passes but not in the expected way on Windows.
// TODO: Reduce this test's coverage and be more specific about
// expected behaviour.
//
// RUN: not %dexter_regression_test -- %s | FileCheck %s
// CHECK: expect_watch_type.cpp:

template<class T>
Expand Down
Expand Up @@ -2,11 +2,10 @@
// Check that \DexExpectWatchValue correctly applies a penalty when
// expected values are not found.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: not %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
//
// RUN: not %dexter_regression_test -- %s | FileCheck %s
// CHECK: expect_watch_value.cpp:

int main()
Expand Down
Expand Up @@ -2,11 +2,10 @@
// Check that \DexUnreachable correctly applies a penalty if the command
// line is stepped on.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: not %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
//
// RUN: not %dexter_regression_test -- %s | FileCheck %s
// CHECK: unreachable.cpp:

int
Expand Down
Expand Up @@ -2,11 +2,10 @@
// Check that \DexExpectWatchValue applies no penalties when expected
// program states are found.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -glldb" -- %s \
// RUN: | FileCheck %s
//
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: expect_program_state.cpp:

int GCD(int lhs, int rhs)
Expand Down
Expand Up @@ -5,11 +5,12 @@
// 'VERTICAL_FORWARD' for every step onto a greater source line number in
// the same function.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// TODO: The dbgeng debugger does not support column step reporting at present.
// XFAIL: system-windows
//
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: direction.cpp:

int func(int i) {
Expand Down
Expand Up @@ -3,11 +3,9 @@
// trivial test. Expect one 'FUNC' per call to a function which is defined
// in one of the source files in the test directory.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: func.cpp:

int func(int i) {
Expand Down
Expand Up @@ -2,13 +2,13 @@
// Check that \DexExpectStepKind correctly counts 'FUNC_EXTERNAL' steps
// for a trivial test. Expect one 'FUNC_EXTERNAL' per external call.
//
// REQUIRES: system-linux, lldb
// XFAIL: system-linux
// This fails right now on my linux machine, needs examining as to why.
// UNSUPPORTED: system-darwin
//
// RUN: %dexter --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// XFAIL:*
// This fails right now on my linux and windows machine, needs examining as to
// why.
//
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: func_external.cpp:

#include <cstdlib>
Expand Down
Expand Up @@ -3,11 +3,9 @@
// Specifically, ensure recursive calls count towards 'FUNC' and not
// 'VERTICAL_BACKWARD'.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: recursive.cpp:

int func(int i) {
Expand Down
Expand Up @@ -3,11 +3,9 @@
// where the last source line in the loop is a call. Expect steps out
// of a function to a line before the call to count as 'VERTICAL_BACKWARD'.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: small_loop.cpp:

int func(int i){
Expand Down
Expand Up @@ -2,11 +2,9 @@
// Check that \DexExpectStepOrder applies no penalty when the expected
// order is found.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: expect_step_order.cpp:

int main()
Expand Down
Expand Up @@ -2,11 +2,13 @@
// Check that \DexExpectWatchType applies no penalties when expected
// types are found.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// TODO: On Windows WITH dbgeng, This test takes a long time to run and doesn't evaluate type values
// in the same manner as LLDB.
// XFAIL: system-windows
//
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: expect_watch_type.cpp:

template<class T>
Expand Down
Expand Up @@ -2,11 +2,9 @@
// Check that \DexExpectWatchValue applies no penalties when expected
// values are found.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: expect_watch_value.cpp:

unsigned long Factorial(int n) {
Expand Down
Expand Up @@ -2,11 +2,9 @@
// Check that \DexUnreachable has no effect if the command line is never
// stepped on.
//
// REQUIRES: system-linux, lldb
// UNSUPPORTED: system-darwin
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" -- %s \
// RUN: | FileCheck %s
// RUN: %dexter_regression_test -- %s | FileCheck %s
// CHECK: unreachable.cpp:

int main()
Expand Down
6 changes: 1 addition & 5 deletions debuginfo-tests/dexter/feature_tests/subtools/view.cpp
@@ -1,11 +1,7 @@
// Purpose:
// Check the `view` subtool works with typical inputs.
//
// REQUIRES: system-linux, lldb
//
// RUN: %dexter_base test --fail-lt 1.0 -w \
// RUN: --builder 'clang' --debugger 'lldb' --cflags "-O0 -g" \
// RUN: --results %t -- %s
// RUN: %dexter_regression_test --results %t -- %s
//
// RUN: %dexter_base view %t/view.cpp.dextIR | FileCheck %s
// CHECK: ## BEGIN
Expand Down
29 changes: 29 additions & 0 deletions debuginfo-tests/lit.cfg.py
Expand Up @@ -112,6 +112,35 @@ def get_required_attr(config, attr_name):
dexter_base_cmd = '"{}" "{}"'.format(config.python3_executable, dexter_path)
tools.append(ToolSubst('%dexter_base', dexter_base_cmd))

# Set up commands for DexTer regression tests.
# Builder, debugger, optimisation level and several other flags differ
# depending on whether we're running a unix like or windows os.
if platform.system() == 'Windows':
dexter_regression_test_builder = '--builder clang-cl_vs2015'
dexter_regression_test_debugger = '--debugger dbgeng'
dexter_regression_test_cflags = '--cflags "/Zi /Od"'
dexter_regression_test_ldflags = '--ldflags "/Zi"'
else:
dexter_regression_test_builder = '--builder clang'
dexter_regression_test_debugger = "--debugger lldb"
dexter_regression_test_cflags = '--cflags "-O0 -glldb"'
dexter_regression_test_ldflags = ''

# Typical command would take the form:
# ./path_to_py/python.exe ./path_to_dex/dexter.py test --fail-lt 1.0 -w --builder clang --debugger lldb --cflags '-O0 -g'
dexter_regression_test_command = ' '.join(
# "python3", "dexter.py", test, fail_mode, builder, debugger, cflags, ldflags
["{}".format(config.python3_executable),
"{}".format(dexter_path),
'test',
'--fail-lt 1.0 -w',
dexter_regression_test_builder,
dexter_regression_test_debugger,
dexter_regression_test_cflags,
dexter_regression_test_ldflags])

tools.append(ToolSubst('%dexter_regression_test', dexter_regression_test_command))

tool_dirs = [config.llvm_tools_dir]

llvm_config.add_tool_substitutions(tools, tool_dirs)
Expand Down

0 comments on commit b6d2212

Please sign in to comment.