Skip to content

Commit

Permalink
[debuginfo-tests] Make debuginfo-tests work in a standard configuration.
Browse files Browse the repository at this point in the history
Previously, debuginfo-tests was expected to be checked out into
clang/test and then the tests would automatically run as part of
check-clang.  This is not a standard workflow for handling
external projects, and it brings with it some serious drawbacks
such as the inability to depend on things other than clang, which
we will need going forward.

The goal of this patch is to migrate towards a more standard
workflow.  To ease the transition for build bot maintainers,
this patch tries not to break the existing workflow, but instead
simply deprecate it to give maintainers a chance to update
the build infrastructure.

Differential Revision: https://reviews.llvm.org/D39605

llvm-svn: 317925
  • Loading branch information
Zachary Turner committed Nov 10, 2017
1 parent f59d071 commit 0f2ce11
Show file tree
Hide file tree
Showing 26 changed files with 153 additions and 28 deletions.
2 changes: 0 additions & 2 deletions clang/test/lit.cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@

tools = [
'c-index-test', 'clang-check', 'clang-diff', 'clang-format', 'opt',
ToolSubst('%test_debuginfo', command=os.path.join(
config.llvm_src_root, 'utils', 'test_debuginfo.pl')),
ToolSubst('%clang_func_map', command=FindTool(
'clang-func-mapping'), unresolved='ignore'),
]
Expand Down
36 changes: 36 additions & 0 deletions debuginfo-tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Debug Info tests. These tests invoke clang to generate programs with
# various types of debug info, and then run those programs under a debugger
# such as GDB or LLDB to verify the results.

set(DEBUGINFO_TESTS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(DEBUGINFO_TESTS_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})

set(DEBUGINFO_TEST_DEPS
clang
llvm-config
FileCheck
count
not
)

get_target_property(CLANG_SOURCE_DIR clang SOURCE_DIR)

if (TARGET lld)
set(DEBUGINFO_TESTS_HAS_LLD 1)
list(APPEND DEBUGINFO_TEST_DEPS lld)
get_target_property(LLD_SOURCE_DIR lld SOURCE_DIR)
endif()

configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
MAIN_CONFIG
${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
)

add_lit_testsuite(check-debuginfo "Running debug info integration tests"
${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${DEBUGINFO_TEST_DEPS}
)

set_target_properties(check-debuginfo PROPERTIES FOLDER "Debug info tests")
57 changes: 57 additions & 0 deletions debuginfo-tests/lit.cfg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# -*- Python -*-

import os
import platform
import re
import subprocess
import tempfile

import lit.formats
import lit.util

from lit.llvm import llvm_config
from lit.llvm.subst import ToolSubst
from lit.llvm.subst import FindTool

# Configuration file for the 'lit' test runner.

# name: The name of this test suite.
config.name = 'debuginfo-tests'

# testFormat: The test format to use to interpret tests.
#
# For now we require '&&' between commands, until they get globally killed and
# the test runner updated.
config.test_format = lit.formats.ShTest(not llvm_config.use_lit_shell)

# suffixes: A list of file extensions to treat as test files.
config.suffixes = ['.c', '.cpp', '.m']

# excludes: A list of directories to exclude from the testsuite. The 'Inputs'
# subdirectories contain auxiliary inputs for various tests in their parent
# directories.
config.excludes = ['Inputs']

# test_source_root: The root path where tests are located.
config.test_source_root = os.path.join(config.debuginfo_tests_src_root, 'tests')

# test_exec_root: The root path where tests should be run.
config.test_exec_root = config.debuginfo_tests_obj_root

llvm_config.use_default_substitutions()

llvm_config.use_clang()

if config.llvm_use_sanitizer:
# Propagate path to symbolizer for ASan/MSan.
llvm_config.with_system_environment(
['ASAN_SYMBOLIZER_PATH', 'MSAN_SYMBOLIZER_PATH'])

tool_dirs = [config.llvm_tools_dir]

tools = [
ToolSubst('%test_debuginfo', command=os.path.join(
config.llvm_src_root, 'utils', 'test_debuginfo.pl')),
]

llvm_config.add_tool_substitutions(tools, tool_dirs)
25 changes: 25 additions & 0 deletions debuginfo-tests/lit.site.cfg.py.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
@LIT_SITE_CFG_IN_HEADER@

import lit.util

config.test_exec_root = "@CMAKE_BINARY_DIR@"

config.llvm_src_root = "@LLVM_SOURCE_DIR@"
config.llvm_obj_root = "@LLVM_BINARY_DIR@"
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
config.llvm_shlib_dir = "@SHLIBDIR@"
config.llvm_plugin_ext = "@LLVM_PLUGIN_EXT@"
config.debuginfo_tests_obj_root = "@DEBUGINFO_TESTS_BINARY_DIR@"
config.debuginfo_tests_src_root = "@DEBUGINFO_TESTS_SOURCE_DIR@"
config.has_lld = lit.util.pythonize_bool("@DEBUGINFO_TESTS_HAS_LLD@")
config.host_triple = "@LLVM_HOST_TRIPLE@"
config.target_triple = "@TARGET_TRIPLE@"
config.host_arch = "@HOST_ARCH@"

config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"

@LIT_SITE_CFG_IN_FOOTER@

# Let the main config do the real work.
lit_config.load_config(config, "@DEBUGINFO_TESTS_SOURCE_DIR@/lit.cfg.py")
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
// RUN: %test_debuginfo %s %t.out
// RUN: %test_debuginfo %s %t.out
// Radar 8945514
// DEBUGGER: break 22
// DEBUGGER: r
Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation
// RUN: %test_debuginfo %s %t.out
// RUN: %test_debuginfo %s %t.out

// REQUIRES: system-darwin

Expand Down
8 changes: 4 additions & 4 deletions debuginfo-tests/blocks.m → debuginfo-tests/tests/blocks.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation
// RUN: %test_debuginfo %s %t.out
// RUN: %test_debuginfo %s %t.out

// REQUIRES: system-darwin
// Radar 9279956
Expand All @@ -24,9 +24,9 @@ - (void) helper {
int master = 0;
__block int m2 = 0;
__block int dbTransaction = 0;
int (^x)(void) = ^(void) { (void) self;
(void) master;
(void) dbTransaction;
int (^x)(void) = ^(void) { (void) self;
(void) master;
(void) dbTransaction;
m2++;
return m2;
};
Expand Down
4 changes: 2 additions & 2 deletions debuginfo-tests/ctor.cpp → debuginfo-tests/tests/ctor.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
// RUN: %test_debuginfo %s %t.out
// RUN: %test_debuginfo %s %t.out


// DEBUGGER: break 14
// DEBUGGER: r
// DEBUGGER: p *this
// CHECK-NEXT-NOT: Cannot access memory at address
// CHECK-NEXT-NOT: Cannot access memory at address

class A {
public:
Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions debuginfo-tests/foreach.m → debuginfo-tests/tests/foreach.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation
// RUN: %test_debuginfo %s %t.out
// RUN: %test_debuginfo %s %t.out
//
// REQUIRES: system-darwin
// Radar 8757124
Expand All @@ -19,7 +19,7 @@ int main (int argc, const char * argv[]) {
for (NSString *thing in things) {
NSLog (@"%@", thing);
}

things = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc" , nil];
for (NSString *thing in things) {
NSLog (@"%@", thing);
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
10 changes: 5 additions & 5 deletions debuginfo-tests/sret.cpp → debuginfo-tests/tests/sret.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
// RUN: %test_debuginfo %s %t.out
// RUN: %test_debuginfo %s %t.out
// Radar 8775834
// DEBUGGER: break 62
// DEBUGGER: r
Expand All @@ -24,7 +24,7 @@ class A
int m_int;
};

A::A (int i) :
A::A (int i) :
m_int(i)
{
}
Expand All @@ -50,11 +50,11 @@ class B
{
public:
B () {}

A AInstance();
};

A
A
B::AInstance()
{
A a(12);
Expand All @@ -65,7 +65,7 @@ int main (int argc, char const *argv[])
{
B b;
int return_val = b.AInstance().get_int();

A a(b.AInstance());
return return_val;
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion debuginfo-tests/vla.c → debuginfo-tests/tests/vla.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// This test case verifies the debug location for variable-length arrays.
// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out
// RUN: %test_debuginfo %s %t.out
// RUN: %test_debuginfo %s %t.out
//
// DEBUGGER: break 18
// DEBUGGER: r
Expand Down
19 changes: 12 additions & 7 deletions llvm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ endif()
# LLVM_EXTERNAL_${project}_SOURCE_DIR using LLVM_ALL_PROJECTS
# This allows an easy way of setting up a build directory for llvm and another
# one for llvm+clang+... using the same sources.
set(LLVM_ALL_PROJECTS "clang;libcxx;libcxxabi;lldb;compiler-rt;lld;polly")
set(LLVM_ALL_PROJECTS "clang;libcxx;libcxxabi;lldb;compiler-rt;debuginfo-tests;lld;polly")
set(LLVM_ENABLE_PROJECTS "" CACHE STRING
"Semicolon-separated list of projects to build (${LLVM_ALL_PROJECTS}), or \"all\".")
if( LLVM_ENABLE_PROJECTS STREQUAL "all" )
Expand Down Expand Up @@ -881,13 +881,18 @@ if( LLVM_INCLUDE_EXAMPLES )
endif()

if( LLVM_INCLUDE_TESTS )
if(EXISTS ${LLVM_MAIN_SRC_DIR}/projects/test-suite AND TARGET clang)
if(TARGET clang)
include(LLVMExternalProjectUtils)
llvm_ExternalProject_Add(test-suite ${LLVM_MAIN_SRC_DIR}/projects/test-suite
USE_TOOLCHAIN
EXCLUDE_FROM_ALL
NO_INSTALL
ALWAYS_CLEAN)
if (EXISTS ${LLVM_MAIN_SRC_DIR}/projects/test-suite)
llvm_ExternalProject_Add(test-suite ${LLVM_MAIN_SRC_DIR}/projects/test-suite
USE_TOOLCHAIN
TOOLCHAIN_TOOLS clang lld clang-cl
EXCLUDE_FROM_ALL
NO_INSTALL
ALWAYS_CLEAN)
endif()

add_llvm_external_project(debuginfo-tests projects/debuginfo-tests)
endif()
add_subdirectory(utils/lit)
add_subdirectory(test)
Expand Down
1 change: 1 addition & 0 deletions llvm/projects/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ foreach(entry ${entries})
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/libcxxabi) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/libunwind) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/test-suite) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/debuginfo-tests) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/parallel-libs) AND
(NOT ${entry} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}/openmp))
add_subdirectory(${entry})
Expand Down
9 changes: 6 additions & 3 deletions llvm/utils/lit/lit/llvm/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ def __init__(self, lit_config, config):
# For tests that require Windows to run.
features.add('system-windows')

lit_tools_dir = getattr(config, 'lit_tools_dir', None)
# Seek sane tools in directories and set to $PATH.
path = self.lit_config.getToolsPath(config.lit_tools_dir,
path = self.lit_config.getToolsPath(lit_tools_dir,
config.environment['PATH'],
['cmp.exe', 'grep.exe', 'sed.exe'])
if path is not None:
Expand Down Expand Up @@ -413,8 +414,10 @@ def use_clang(self, required=True):
self.config.substitutions.append(
('%target_itanium_abi_host_triple', ''))

self.config.substitutions.append(
('%src_include_dir', self.config.clang_src_dir + '/include'))
clang_src_dir = getattr(self.config, 'clang_src_dir', None)
if clang_src_dir:
self.config.substitutions.append(
('%src_include_dir', os.path.join(clang_src_dir, 'include')))

# FIXME: Find nicer way to prohibit this.
self.config.substitutions.append(
Expand Down

0 comments on commit 0f2ce11

Please sign in to comment.