[debuginfo-tests] r318486 - Re-revert "Refactor debuginfo-tests"
Zachary Turner via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 16 16:41:18 PST 2017
Author: zturner
Date: Thu Nov 16 16:41:18 2017
New Revision: 318486
URL: http://llvm.org/viewvc/llvm-project?rev=318486&view=rev
Log:
Re-revert "Refactor debuginfo-tests"
This is still broken because it causes certain tests to be
run twice with slightly different configurations, which is
wrong in some cases.
You can observe this by running:
ninja -nv check-all | grep debuginfo-tests
And seeing that it passes clang/test and clang/test/debuginfo-tests
to lit, which causes it to run debuginfo-tests twice. The fix is
going to involve either:
a) figuring out that we're running in this "deprecated" configuration,
and then deleting the clang/test/debuginfo-tests path, which should
cause it to behave identically to before, or:
b) make lit smart enough that it doesn't descend into a sub-suite if
that sub-suite already has a lit.cfg file.
Added:
debuginfo-tests/trunk/aggregate-indirect-arg.cpp
debuginfo-tests/trunk/asan-blocks.c
debuginfo-tests/trunk/asan.c
debuginfo-tests/trunk/block_var.m
debuginfo-tests/trunk/blocks.m
debuginfo-tests/trunk/ctor.cpp
debuginfo-tests/trunk/dbg-arg.c
debuginfo-tests/trunk/foreach.m
debuginfo-tests/trunk/forward-declare-class.cpp
debuginfo-tests/trunk/lit.local.cfg
debuginfo-tests/trunk/llgdb.py
debuginfo-tests/trunk/nested-struct.cpp
debuginfo-tests/trunk/nrvo-string.cpp
debuginfo-tests/trunk/safestack.c
debuginfo-tests/trunk/sret.cpp
debuginfo-tests/trunk/stack-var.c
debuginfo-tests/trunk/static-member-2.cpp
debuginfo-tests/trunk/static-member.cpp
debuginfo-tests/trunk/vla.c
Removed:
debuginfo-tests/trunk/CMakeLists.txt
debuginfo-tests/trunk/lit.cfg.py
debuginfo-tests/trunk/lit.site.cfg.py.in
debuginfo-tests/trunk/tests/
Removed: debuginfo-tests/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/CMakeLists.txt?rev=318485&view=auto
==============================================================================
--- debuginfo-tests/trunk/CMakeLists.txt (original)
+++ debuginfo-tests/trunk/CMakeLists.txt (removed)
@@ -1,36 +0,0 @@
-# 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")
\ No newline at end of file
Added: debuginfo-tests/trunk/aggregate-indirect-arg.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/aggregate-indirect-arg.cpp?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/aggregate-indirect-arg.cpp (added)
+++ debuginfo-tests/trunk/aggregate-indirect-arg.cpp Thu Nov 16 16:41:18 2017
@@ -0,0 +1,32 @@
+// 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
+// Radar 8945514
+// DEBUGGER: break 22
+// DEBUGGER: r
+// DEBUGGER: p v
+// CHECK: ${{[0-9]+}} =
+// CHECK: Data ={{.*}} 0x0{{(0*)}}
+// CHECK: Kind = 2142
+
+class SVal {
+public:
+ ~SVal() {}
+ const void* Data;
+ unsigned Kind;
+};
+
+void bar(SVal &v) {}
+class A {
+public:
+ void foo(SVal v) { bar(v); }
+};
+
+int main() {
+ SVal v;
+ v.Data = 0;
+ v.Kind = 2142;
+ A a;
+ a.foo(v);
+ return 0;
+}
Added: debuginfo-tests/trunk/asan-blocks.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/asan-blocks.c?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/asan-blocks.c (added)
+++ debuginfo-tests/trunk/asan-blocks.c Thu Nov 16 16:41:18 2017
@@ -0,0 +1,41 @@
+// RUN: %clang -fblocks %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=address
+// RUN: %test_debuginfo %s %t.out
+// FIXME: Remove system-darwin when we build BlocksRuntime everywhere.
+// REQUIRES: not_asan, system-darwin
+// Zorg configures the ASAN stage2 bots to not build the asan
+// compiler-rt. Only run this test on non-asanified configurations.
+void b();
+struct S {
+ int a[8];
+};
+
+int f(struct S s, unsigned i) {
+ // DEBUGGER: break 17
+ // DEBUGGER: r
+ // DEBUGGER: p s
+ // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7)
+ return s.a[i];
+}
+
+int main(int argc, const char **argv) {
+ struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
+ if (f(s, 4) == 4) {
+ // DEBUGGER: break 27
+ // DEBUGGER: c
+ // DEBUGGER: p s
+ // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7)
+ b();
+ }
+ return 0;
+}
+
+void c() {}
+
+void b() {
+ // DEBUGGER: break 40
+ // DEBUGGER: c
+ // DEBUGGER: p x
+ // CHECK: 42
+ __block int x = 42;
+ c();
+}
Added: debuginfo-tests/trunk/asan.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/asan.c?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/asan.c (added)
+++ debuginfo-tests/trunk/asan.c Thu Nov 16 16:41:18 2017
@@ -0,0 +1,31 @@
+// RUN: %clang -fblocks %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=address
+// RUN: %test_debuginfo %s %t.out
+// REQUIRES: not_asan
+// Zorg configures the ASAN stage2 bots to not build the asan
+// compiler-rt. Only run this test on non-asanified configurations.
+//
+
+struct S {
+ int a[8];
+};
+
+int f(struct S s, unsigned i) {
+ // DEBUGGER: break 14
+ return s.a[i];
+}
+
+int main(int argc, const char **argv) {
+ struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
+ if (f(s, 4) == 4)
+ return f(s, 0);
+ return 0;
+}
+
+// DEBUGGER: r
+// DEBUGGER: p s
+// CHECK: a =
+// DEBUGGER: p s.a[0]
+// CHECK: = 0
+// DEBUGGER: p s.a[1]
+// CHECK: = 1
+// DEBUGGER: p s.a[7]
Added: debuginfo-tests/trunk/block_var.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/block_var.m?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/block_var.m (added)
+++ debuginfo-tests/trunk/block_var.m Thu Nov 16 16:41:18 2017
@@ -0,0 +1,32 @@
+// 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
+
+// REQUIRES: system-darwin
+
+// DEBUGGER: break 24
+// DEBUGGER: r
+// DEBUGGER: p result
+// CHECK: ${{[0-9]}} = 42
+
+void doBlock(void (^block)(void))
+{
+ block();
+}
+
+int I(int n)
+{
+ __block int result;
+ int i = 2;
+ doBlock(^{
+ result = n;
+ });
+ return result + i; /* Check value of 'result' */
+}
+
+
+int main (int argc, const char * argv[]) {
+ return I(42);
+}
+
+
Added: debuginfo-tests/trunk/blocks.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/blocks.m?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/blocks.m (added)
+++ debuginfo-tests/trunk/blocks.m Thu Nov 16 16:41:18 2017
@@ -0,0 +1,43 @@
+// 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
+
+// REQUIRES: system-darwin
+// Radar 9279956
+
+// DEBUGGER: break 31
+// DEBUGGER: r
+// DEBUGGER: p m2
+// CHECK: ${{[0-9]}} = 1
+// DEBUGGER: p dbTransaction
+// CHECK: ${{[0-9]}} = 0
+// DEBUGGER: p master
+// CHECK: ${{[0-9]}} = 0
+
+#include <Cocoa/Cocoa.h>
+
+extern void foo(void(^)(void));
+
+ at interface A:NSObject @end
+ at implementation A
+- (void) helper {
+ int master = 0;
+ __block int m2 = 0;
+ __block int dbTransaction = 0;
+ int (^x)(void) = ^(void) { (void) self;
+ (void) master;
+ (void) dbTransaction;
+ m2++;
+ return m2;
+ };
+ master = x();
+}
+ at end
+
+void foo(void(^x)(void)) {}
+
+int main() {
+ A *a = [A alloc];
+ [a helper];
+ return 0;
+}
Added: debuginfo-tests/trunk/ctor.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/ctor.cpp?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/ctor.cpp (added)
+++ debuginfo-tests/trunk/ctor.cpp Thu Nov 16 16:41:18 2017
@@ -0,0 +1,25 @@
+// 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
+
+
+// DEBUGGER: break 14
+// DEBUGGER: r
+// DEBUGGER: p *this
+// CHECK-NEXT-NOT: Cannot access memory at address
+
+class A {
+public:
+ A() : zero(0), data(42)
+ {
+ }
+private:
+ int zero;
+ int data;
+};
+
+int main() {
+ A a;
+ return 0;
+}
+
Added: debuginfo-tests/trunk/dbg-arg.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/dbg-arg.c?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/dbg-arg.c (added)
+++ debuginfo-tests/trunk/dbg-arg.c Thu Nov 16 16:41:18 2017
@@ -0,0 +1,46 @@
+// This test case checks debug info during register moves for an argument.
+// RUN: %clang %target_itanium_abi_host_triple -m64 -mllvm -fast-isel=false %s -c -o %t.o -g
+// RUN: %clang %target_itanium_abi_host_triple -m64 %t.o -o %t.out
+// RUN: %test_debuginfo %s %t.out
+//
+// DEBUGGER: break 26
+// DEBUGGER: r
+// DEBUGGER: print mutex
+// CHECK: ={{.* 0x[0-9A-Fa-f]+}}
+//
+// Radar 8412415
+
+struct _mtx
+{
+ long unsigned int ptr;
+ int waiters;
+ struct {
+ int tag;
+ int pad;
+ } mtxi;
+};
+
+
+int foobar(struct _mtx *mutex) {
+ int r = 1;
+ int l = 0;
+ int j = 0;
+ do {
+ if (mutex->waiters) {
+ r = 2;
+ }
+ j = bar(r, l);
+ ++l;
+ } while (l < j);
+ return r + j;
+}
+
+int bar(int i, int j) {
+ return i + j;
+}
+
+int main() {
+ struct _mtx m;
+ m.waiters = 0;
+ return foobar(&m);
+}
Added: debuginfo-tests/trunk/foreach.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/foreach.m?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/foreach.m (added)
+++ debuginfo-tests/trunk/foreach.m Thu Nov 16 16:41:18 2017
@@ -0,0 +1,31 @@
+// 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
+//
+// REQUIRES: system-darwin
+// Radar 8757124
+
+// DEBUGGER: break 25
+// DEBUGGER: r
+// DEBUGGER: po thing
+// CHECK: aaa
+
+#import <Foundation/Foundation.h>
+
+int main (int argc, const char * argv[]) {
+
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSArray *things = [NSArray arrayWithObjects:@"one", @"two", @"three" , nil];
+ for (NSString *thing in things) {
+ NSLog (@"%@", thing);
+ }
+
+ things = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc" , nil];
+ for (NSString *thing in things) {
+ NSLog (@"%@", thing);
+ }
+ [pool release];
+ return 0;
+}
+
+
Added: debuginfo-tests/trunk/forward-declare-class.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/forward-declare-class.cpp?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/forward-declare-class.cpp (added)
+++ debuginfo-tests/trunk/forward-declare-class.cpp Thu Nov 16 16:41:18 2017
@@ -0,0 +1,27 @@
+// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
+// RUN: %test_debuginfo %s %t.o
+// Radar 9168773
+
+// DEBUGGER: ptype A
+// Work around a gdb bug where it believes that a class is a
+// struct if there aren't any methods - even though it's tagged
+// as a class.
+// CHECK: type = {{struct|class}} A {
+// CHECK-NEXT: {{(public:){0,1}}}
+// CHECK-NEXT: int MyData;
+// CHECK-NEXT: }
+class A;
+class B {
+public:
+ void foo(const A *p);
+};
+
+B iEntry;
+
+class A {
+public:
+ int MyData;
+};
+
+A irp;
+
Removed: debuginfo-tests/trunk/lit.cfg.py
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.cfg.py?rev=318485&view=auto
==============================================================================
--- debuginfo-tests/trunk/lit.cfg.py (original)
+++ debuginfo-tests/trunk/lit.cfg.py (removed)
@@ -1,59 +0,0 @@
-# -*- 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)
-
-lit.util.usePlatformSdkOnDarwin(config, lit_config)
Added: debuginfo-tests/trunk/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.local.cfg?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/lit.local.cfg (added)
+++ debuginfo-tests/trunk/lit.local.cfg Thu Nov 16 16:41:18 2017
@@ -0,0 +1,3 @@
+# debuginfo-tests are not expected to pass in a cross-compilation setup.
+if 'native' not in config.available_features:
+ config.unsupported = True
Removed: debuginfo-tests/trunk/lit.site.cfg.py.in
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.site.cfg.py.in?rev=318485&view=auto
==============================================================================
--- debuginfo-tests/trunk/lit.site.cfg.py.in (original)
+++ debuginfo-tests/trunk/lit.site.cfg.py.in (removed)
@@ -1,25 +0,0 @@
- at 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@"
-
- at 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")
Added: debuginfo-tests/trunk/llgdb.py
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/llgdb.py?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/llgdb.py (added)
+++ debuginfo-tests/trunk/llgdb.py Thu Nov 16 16:41:18 2017
@@ -0,0 +1,157 @@
+#!/bin/env python
+"""
+A gdb-compatible frontend for lldb that implements just enough
+commands to run the tests in the debuginfo-tests repository with lldb.
+"""
+
+# ----------------------------------------------------------------------
+# Auto-detect lldb python module.
+import commands, platform, os, sys
+try:
+ # Just try for LLDB in case PYTHONPATH is already correctly setup.
+ import lldb
+except ImportError:
+ lldb_python_dirs = list()
+ # lldb is not in the PYTHONPATH, try some defaults for the current platform.
+ platform_system = platform.system()
+ if platform_system == 'Darwin':
+ # On Darwin, try the currently selected Xcode directory
+ xcode_dir = commands.getoutput("xcode-select --print-path")
+ if xcode_dir:
+ lldb_python_dirs.append(os.path.realpath(xcode_dir +
+'/../SharedFrameworks/LLDB.framework/Resources/Python'))
+ lldb_python_dirs.append(xcode_dir +
+'/Library/PrivateFrameworks/LLDB.framework/Resources/Python')
+ lldb_python_dirs.append(
+'/System/Library/PrivateFrameworks/LLDB.framework/Resources/Python')
+ success = False
+ for lldb_python_dir in lldb_python_dirs:
+ if os.path.exists(lldb_python_dir):
+ if not (sys.path.__contains__(lldb_python_dir)):
+ sys.path.append(lldb_python_dir)
+ try:
+ import lldb
+ except ImportError:
+ pass
+ else:
+ print 'imported lldb from: "%s"' % (lldb_python_dir)
+ success = True
+ break
+ if not success:
+ print "error: couldn't locate the 'lldb' module, please set PYTHONPATH correctly"
+ sys.exit(1)
+# ----------------------------------------------------------------------
+
+# Command line option handling.
+import argparse
+parser = argparse.ArgumentParser(description=__doc__)
+parser.add_argument('--quiet', '-q', action="store_true", help='ignored')
+parser.add_argument('-batch', action="store_true",
+ help='exit after processing comand line')
+parser.add_argument('-n', action="store_true", help='ignore .lldb file')
+parser.add_argument('-x', dest='script', type=file, help='execute commands from file')
+parser.add_argument("target", help="the program to debug")
+args = parser.parse_args()
+
+
+# Create a new debugger instance.
+debugger = lldb.SBDebugger.Create()
+debugger.SkipLLDBInitFiles(args.n)
+
+# Don't return from lldb function calls until the process stops.
+debugger.SetAsync(False)
+
+# Create a target from a file and arch.
+arch = os.popen("file "+args.target).read().split()[-1]
+target = debugger.CreateTargetWithFileAndArch(args.target, arch)
+
+if not target:
+ print "Could not create target", args.target
+ sys.exit(1)
+
+if not args.script:
+ print "Interactive mode is not implemented."
+ sys.exit(1)
+
+import re
+for command in args.script:
+ # Strip newline and whitespaces and split into words.
+ cmd = command[:-1].strip().split()
+ if not cmd:
+ continue
+
+ print '> %s'% command[:-1]
+
+ try:
+ if re.match('^r|(run)$', cmd[0]):
+ error = lldb.SBError()
+ launchinfo = lldb.SBLaunchInfo([])
+ launchinfo.SetWorkingDirectory(os.getcwd())
+ process = target.Launch(launchinfo, error)
+ print error
+ if not process or error.fail:
+ state = process.GetState()
+ print "State = %d" % state
+ print """
+ERROR: Could not launch process.
+NOTE: There are several reasons why this may happen:
+ * Root needs to run "DevToolsSecurity --enable".
+ * Older versions of lldb cannot launch more than one process simultaneously.
+"""
+ sys.exit(1)
+
+ elif re.match('^b|(break)$', cmd[0]) and len(cmd) == 2:
+ if re.match('[0-9]+', cmd[1]):
+ # b line
+ mainfile = target.FindFunctions('main')[0].compile_unit.file
+ print target.BreakpointCreateByLocation(mainfile, int(cmd[1]))
+ else:
+ # b file:line
+ file, line = cmd[1].split(':')
+ print target.BreakpointCreateByLocation(file, int(line))
+
+ elif re.match('^ptype$', cmd[0]) and len(cmd) == 2:
+ # GDB's ptype has multiple incarnations depending on its
+ # argument (global variable, function, type). The definition
+ # here is for looking up the signature of a function and only
+ # if that fails it looks for a type with that name.
+ # Type lookup in LLDB would be "image lookup --type".
+ for elem in target.FindFunctions(cmd[1]):
+ print elem.function.type
+ continue
+ print target.FindFirstType(cmd[1])
+
+ elif re.match('^po$', cmd[0]) and len(cmd) > 1:
+ try:
+ opts = lldb.SBExpressionOptions()
+ opts.SetFetchDynamicValue(True)
+ opts.SetCoerceResultToId(True)
+ print target.EvaluateExpression(' '.join(cmd[1:]), opts)
+ except:
+ # FIXME: This is a fallback path for the lab.llvm.org
+ # buildbot running OS X 10.7; it should be removed.
+ thread = process.GetThreadAtIndex(0)
+ frame = thread.GetFrameAtIndex(0)
+ print frame.EvaluateExpression(' '.join(cmd[1:]))
+
+ elif re.match('^p|(print)$', cmd[0]) and len(cmd) > 1:
+ thread = process.GetThreadAtIndex(0)
+ frame = thread.GetFrameAtIndex(0)
+ print frame.EvaluateExpression(' '.join(cmd[1:]))
+
+ elif re.match('^n|(next)$', cmd[0]):
+ thread = process.GetThreadAtIndex(0)
+ thread.StepOver()
+
+ elif re.match('^q|(quit)$', cmd[0]):
+ sys.exit(0)
+
+ else:
+ print debugger.HandleCommand(' '.join(cmd))
+
+ except SystemExit:
+ lldb.SBDebugger_Terminate()
+ raise
+ except:
+ print 'Could not handle the command "%s"' % ' '.join(cmd)
+
Added: debuginfo-tests/trunk/nested-struct.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/nested-struct.cpp?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/nested-struct.cpp (added)
+++ debuginfo-tests/trunk/nested-struct.cpp Thu Nov 16 16:41:18 2017
@@ -0,0 +1,21 @@
+// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
+// RUN: %test_debuginfo %s %t.o
+// Radar 9440721
+// If debug info for my_number() is emitted outside function foo's scope
+// then a debugger may not be able to handle it. At least one version of
+// gdb crashes in such cases.
+
+// DEBUGGER: ptype foo
+// CHECK: int (void)
+
+int foo() {
+ struct Local {
+ static int my_number() {
+ return 42;
+ }
+ };
+
+ int i = 0;
+ i = Local::my_number();
+ return i + 1;
+}
Added: debuginfo-tests/trunk/nrvo-string.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/nrvo-string.cpp?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/nrvo-string.cpp (added)
+++ debuginfo-tests/trunk/nrvo-string.cpp Thu Nov 16 16:41:18 2017
@@ -0,0 +1,27 @@
+// This ensures that DW_OP_deref is inserted when necessary, such as when NRVO
+// of a string object occurs in C++.
+//
+// RUN: %clangxx -O0 -fno-exceptions %target_itanium_abi_host_triple %s -o %t.out -g
+// RUN: %test_debuginfo %s %t.out
+// RUN: %clangxx -O1 -fno-exceptions %target_itanium_abi_host_triple %s -o %t.out -g
+// RUN: %test_debuginfo %s %t.out
+//
+// PR34513
+
+struct string {
+ string() {}
+ string(int i) : i(i) {}
+ ~string() {}
+ int i = 0;
+};
+string get_string() {
+ string unused;
+ string result = 3;
+// DEBUGGER: break 21
+ return result;
+}
+int main() { get_string(); }
+
+// DEBUGGER: r
+// DEBUGGER: print result.i
+// CHECK: = 3
Added: debuginfo-tests/trunk/safestack.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/safestack.c?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/safestack.c (added)
+++ debuginfo-tests/trunk/safestack.c Thu Nov 16 16:41:18 2017
@@ -0,0 +1,51 @@
+// RUN: %clang %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=safe-stack
+// RUN: %test_debuginfo %s %t.out
+// REQUIRES: not_asan
+// Zorg configures the ASAN stage2 bots to not build the
+// safestack compiler-rt. Only run this test on
+// non-asanified configurations.
+
+struct S {
+ int a[8];
+};
+
+int f(struct S s, unsigned i);
+
+int main(int argc, const char **argv) {
+ struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
+ // DEBUGGER: break 17
+ f(s, 4);
+ // DEBUGGER: break 19
+ return 0;
+}
+
+int f(struct S s, unsigned i) {
+ // DEBUGGER: break 24
+ return s.a[i];
+}
+
+// DEBUGGER: r
+// DEBUGGER: p s
+// CHECK: a =
+// DEBUGGER: p s.a[0]
+// CHECK: = 0
+// DEBUGGER: p s.a[1]
+// CHECK: = 1
+// DEBUGGER: p s.a[7]
+// CHECK: = 7
+// DEBUGGER: c
+// DEBUGGER: p s
+// CHECK: a =
+// DEBUGGER: p s.a[0]
+// CHECK: = 0
+// DEBUGGER: p s.a[1]
+// CHECK: = 1
+// DEBUGGER: p s.a[7]
+// DEBUGGER: c
+// DEBUGGER: p s
+// CHECK: a =
+// DEBUGGER: p s.a[0]
+// CHECK: = 0
+// DEBUGGER: p s.a[1]
+// CHECK: = 1
+// DEBUGGER: p s.a[7]
Added: debuginfo-tests/trunk/sret.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/sret.cpp?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/sret.cpp (added)
+++ debuginfo-tests/trunk/sret.cpp Thu Nov 16 16:41:18 2017
@@ -0,0 +1,71 @@
+// 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
+// Radar 8775834
+// DEBUGGER: break 62
+// DEBUGGER: r
+// DEBUGGER: p a
+// CHECK: ${{[0-9]+}} =
+// LLDB does not print artificial members.
+// CHECK: {{(_vptr\$A =)?.*}}m_int = 12
+
+class A
+{
+public:
+ A (int i=0);
+ A (const A& rhs);
+ const A&
+ operator= (const A& rhs);
+ virtual ~A() {}
+
+ int get_int();
+
+protected:
+ int m_int;
+};
+
+A::A (int i) :
+ m_int(i)
+{
+}
+
+A::A (const A& rhs) :
+ m_int (rhs.m_int)
+{
+}
+
+const A &
+A::operator =(const A& rhs)
+{
+ m_int = rhs.m_int;
+ return *this;
+}
+
+int A::get_int()
+{
+ return m_int;
+}
+
+class B
+{
+public:
+ B () {}
+
+ A AInstance();
+};
+
+A
+B::AInstance()
+{
+ A a(12);
+ return a;
+}
+
+int main (int argc, char const *argv[])
+{
+ B b;
+ int return_val = b.AInstance().get_int();
+
+ A a(b.AInstance());
+ return return_val;
+}
Added: debuginfo-tests/trunk/stack-var.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/stack-var.c?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/stack-var.c (added)
+++ debuginfo-tests/trunk/stack-var.c Thu Nov 16 16:41:18 2017
@@ -0,0 +1,18 @@
+// RUN: %clang %target_itanium_abi_host_triple %s -O -o %t.out -g
+// RUN: %test_debuginfo %s %t.out
+
+void __attribute__((noinline, optnone)) bar(int *test) {}
+int main() {
+ int test;
+ test = 23;
+ // DEBUGGER: break 12
+ // DEBUGGER: r
+ // DEBUGGER: p test
+ // CHECK: = 23
+ bar(&test);
+ // DEBUGGER: break 17
+ // DEBUGGER: c
+ // DEBUGGER: p test
+ // CHECK: = 23
+ return test;
+}
Added: debuginfo-tests/trunk/static-member-2.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/static-member-2.cpp?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/static-member-2.cpp (added)
+++ debuginfo-tests/trunk/static-member-2.cpp Thu Nov 16 16:41:18 2017
@@ -0,0 +1,39 @@
+// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -o %t -c
+// RUN: %clangxx %target_itanium_abi_host_triple %t -o %t.out
+// RUN: %test_debuginfo %s %t.out
+
+// FIXME: LLDB finds the wrong symbol for "C". rdar://problem/14933867
+// XFAIL: darwin
+
+// DEBUGGER: delete breakpoints
+// DEBUGGER: break static-member.cpp:33
+// DEBUGGER: r
+// DEBUGGER: ptype C
+// CHECK: {{struct|class}} C {
+// CHECK: static const int a;
+// CHECK-NEXT: static int b;
+// CHECK-NEXT: static int c;
+// CHECK-NEXT: int d;
+// CHECK-NEXT: }
+// DEBUGGER: p C::a
+// CHECK: ${{[0-9]}} = 4
+// DEBUGGER: p C::c
+// CHECK: ${{[0-9]}} = 15
+
+// PR14471, PR14734
+
+class C {
+public:
+ const static int a = 4;
+ static int b;
+ static int c;
+ int d;
+};
+
+int C::c = 15;
+const int C::a;
+
+int main() {
+ C instance_C;
+ return C::a;
+}
Added: debuginfo-tests/trunk/static-member.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/static-member.cpp?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/static-member.cpp (added)
+++ debuginfo-tests/trunk/static-member.cpp Thu Nov 16 16:41:18 2017
@@ -0,0 +1,36 @@
+// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -o %t -c
+// RUN: %clangxx %target_itanium_abi_host_triple %t -o %t.out
+// RUN: %test_debuginfo %s %t.out
+
+// DEBUGGER: delete breakpoints
+// DEBUGGER: break static-member.cpp:33
+// DEBUGGER: r
+// DEBUGGER: ptype MyClass
+// CHECK: {{struct|class}} MyClass {
+// CHECK: static const int a;
+// CHECK-NEXT: static int b;
+// CHECK-NEXT: static int c;
+// CHECK-NEXT: int d;
+// CHECK-NEXT: }
+// DEBUGGER: p MyClass::a
+// CHECK: ${{[0-9]}} = 4
+// DEBUGGER: p MyClass::c
+// CHECK: ${{[0-9]}} = 15
+
+// PR14471, PR14734
+
+class MyClass {
+public:
+ const static int a = 4;
+ static int b;
+ static int c;
+ int d;
+};
+
+int MyClass::c = 15;
+const int MyClass::a;
+
+int main() {
+ MyClass instance_MyClass;
+ return MyClass::a;
+}
Added: debuginfo-tests/trunk/vla.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/vla.c?rev=318486&view=auto
==============================================================================
--- debuginfo-tests/trunk/vla.c (added)
+++ debuginfo-tests/trunk/vla.c Thu Nov 16 16:41:18 2017
@@ -0,0 +1,24 @@
+// 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
+//
+// DEBUGGER: break 18
+// DEBUGGER: r
+// DEBUGGER: p vla[0]
+// CHECK: 23
+// DEBUGGER: p vla[1]
+// CHECK: 22
+
+void init_vla(int size) {
+ int i;
+ int vla[size];
+ for (i = 0; i < size; i++)
+ vla[i] = size-i;
+ vla[0] = size; // line 18
+}
+
+int main(int argc, const char **argv) {
+ init_vla(23);
+ return 0;
+}
More information about the llvm-commits
mailing list