[debuginfo-tests] r317925 - [debuginfo-tests] Make debuginfo-tests work in a standard configuration.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 10 12:57:58 PST 2017


Author: zturner
Date: Fri Nov 10 12:57:57 2017
New Revision: 317925

URL: http://llvm.org/viewvc/llvm-project?rev=317925&view=rev
Log:
[debuginfo-tests] Make debuginfo-tests work in a standard configuration.

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

Added:
    debuginfo-tests/trunk/CMakeLists.txt
    debuginfo-tests/trunk/lit.cfg.py
    debuginfo-tests/trunk/lit.site.cfg.py.in
    debuginfo-tests/trunk/tests/
    debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp
    debuginfo-tests/trunk/tests/asan-blocks.c
    debuginfo-tests/trunk/tests/asan.c
    debuginfo-tests/trunk/tests/block_var.m
    debuginfo-tests/trunk/tests/blocks.m
    debuginfo-tests/trunk/tests/ctor.cpp
    debuginfo-tests/trunk/tests/dbg-arg.c
    debuginfo-tests/trunk/tests/foreach.m
    debuginfo-tests/trunk/tests/forward-declare-class.cpp
    debuginfo-tests/trunk/tests/lit.local.cfg
    debuginfo-tests/trunk/tests/llgdb.py
    debuginfo-tests/trunk/tests/nested-struct.cpp
    debuginfo-tests/trunk/tests/nrvo-string.cpp
    debuginfo-tests/trunk/tests/safestack.c
    debuginfo-tests/trunk/tests/sret.cpp
    debuginfo-tests/trunk/tests/stack-var.c
    debuginfo-tests/trunk/tests/static-member-2.cpp
    debuginfo-tests/trunk/tests/static-member.cpp
    debuginfo-tests/trunk/tests/vla.c
Removed:
    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

Added: debuginfo-tests/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/CMakeLists.txt?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/CMakeLists.txt (added)
+++ debuginfo-tests/trunk/CMakeLists.txt Fri Nov 10 12:57:57 2017
@@ -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")
\ No newline at end of file

Removed: debuginfo-tests/trunk/aggregate-indirect-arg.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/aggregate-indirect-arg.cpp?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/aggregate-indirect-arg.cpp (original)
+++ debuginfo-tests/trunk/aggregate-indirect-arg.cpp (removed)
@@ -1,32 +0,0 @@
-// 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;
-}

Removed: debuginfo-tests/trunk/asan-blocks.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/asan-blocks.c?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/asan-blocks.c (original)
+++ debuginfo-tests/trunk/asan-blocks.c (removed)
@@ -1,41 +0,0 @@
-// 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();
-}

Removed: debuginfo-tests/trunk/asan.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/asan.c?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/asan.c (original)
+++ debuginfo-tests/trunk/asan.c (removed)
@@ -1,31 +0,0 @@
-// 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]

Removed: debuginfo-tests/trunk/block_var.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/block_var.m?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/block_var.m (original)
+++ debuginfo-tests/trunk/block_var.m (removed)
@@ -1,32 +0,0 @@
-// 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);
-}
-
-

Removed: debuginfo-tests/trunk/blocks.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/blocks.m?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/blocks.m (original)
+++ debuginfo-tests/trunk/blocks.m (removed)
@@ -1,43 +0,0 @@
-// 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;
-}

Removed: debuginfo-tests/trunk/ctor.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/ctor.cpp?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/ctor.cpp (original)
+++ debuginfo-tests/trunk/ctor.cpp (removed)
@@ -1,25 +0,0 @@
-// 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;
-}
-

Removed: debuginfo-tests/trunk/dbg-arg.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/dbg-arg.c?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/dbg-arg.c (original)
+++ debuginfo-tests/trunk/dbg-arg.c (removed)
@@ -1,46 +0,0 @@
-// 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);
-}

Removed: debuginfo-tests/trunk/foreach.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/foreach.m?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/foreach.m (original)
+++ debuginfo-tests/trunk/foreach.m (removed)
@@ -1,31 +0,0 @@
-// 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;
-}
-
-

Removed: debuginfo-tests/trunk/forward-declare-class.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/forward-declare-class.cpp?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/forward-declare-class.cpp (original)
+++ debuginfo-tests/trunk/forward-declare-class.cpp (removed)
@@ -1,27 +0,0 @@
-// 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;
-

Added: debuginfo-tests/trunk/lit.cfg.py
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.cfg.py?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/lit.cfg.py (added)
+++ debuginfo-tests/trunk/lit.cfg.py Fri Nov 10 12:57:57 2017
@@ -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)

Removed: debuginfo-tests/trunk/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.local.cfg?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/lit.local.cfg (original)
+++ debuginfo-tests/trunk/lit.local.cfg (removed)
@@ -1,3 +0,0 @@
-# debuginfo-tests are not expected to pass in a cross-compilation setup.
-if 'native' not in config.available_features:
-    config.unsupported = True

Added: debuginfo-tests/trunk/lit.site.cfg.py.in
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.site.cfg.py.in?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/lit.site.cfg.py.in (added)
+++ debuginfo-tests/trunk/lit.site.cfg.py.in Fri Nov 10 12:57:57 2017
@@ -0,0 +1,25 @@
+ 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")

Removed: debuginfo-tests/trunk/llgdb.py
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/llgdb.py?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/llgdb.py (original)
+++ debuginfo-tests/trunk/llgdb.py (removed)
@@ -1,157 +0,0 @@
-#!/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)
-

Removed: debuginfo-tests/trunk/nested-struct.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/nested-struct.cpp?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/nested-struct.cpp (original)
+++ debuginfo-tests/trunk/nested-struct.cpp (removed)
@@ -1,21 +0,0 @@
-// 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;
-}

Removed: debuginfo-tests/trunk/nrvo-string.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/nrvo-string.cpp?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/nrvo-string.cpp (original)
+++ debuginfo-tests/trunk/nrvo-string.cpp (removed)
@@ -1,27 +0,0 @@
-// 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

Removed: debuginfo-tests/trunk/safestack.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/safestack.c?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/safestack.c (original)
+++ debuginfo-tests/trunk/safestack.c (removed)
@@ -1,51 +0,0 @@
-// 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]

Removed: debuginfo-tests/trunk/sret.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/sret.cpp?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/sret.cpp (original)
+++ debuginfo-tests/trunk/sret.cpp (removed)
@@ -1,71 +0,0 @@
-// 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;
-}

Removed: debuginfo-tests/trunk/stack-var.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/stack-var.c?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/stack-var.c (original)
+++ debuginfo-tests/trunk/stack-var.c (removed)
@@ -1,18 +0,0 @@
-// 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;
-}

Removed: debuginfo-tests/trunk/static-member-2.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/static-member-2.cpp?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/static-member-2.cpp (original)
+++ debuginfo-tests/trunk/static-member-2.cpp (removed)
@@ -1,39 +0,0 @@
-// 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;
-}

Removed: debuginfo-tests/trunk/static-member.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/static-member.cpp?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/static-member.cpp (original)
+++ debuginfo-tests/trunk/static-member.cpp (removed)
@@ -1,36 +0,0 @@
-// 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/tests/aggregate-indirect-arg.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp (added)
+++ debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp Fri Nov 10 12:57:57 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/tests/asan-blocks.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/asan-blocks.c?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/asan-blocks.c (added)
+++ debuginfo-tests/trunk/tests/asan-blocks.c Fri Nov 10 12:57:57 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/tests/asan.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/asan.c?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/asan.c (added)
+++ debuginfo-tests/trunk/tests/asan.c Fri Nov 10 12:57:57 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/tests/block_var.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/block_var.m?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/block_var.m (added)
+++ debuginfo-tests/trunk/tests/block_var.m Fri Nov 10 12:57:57 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/tests/blocks.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/blocks.m?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/blocks.m (added)
+++ debuginfo-tests/trunk/tests/blocks.m Fri Nov 10 12:57:57 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/tests/ctor.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/ctor.cpp?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/ctor.cpp (added)
+++ debuginfo-tests/trunk/tests/ctor.cpp Fri Nov 10 12:57:57 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/tests/dbg-arg.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/dbg-arg.c?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/dbg-arg.c (added)
+++ debuginfo-tests/trunk/tests/dbg-arg.c Fri Nov 10 12:57:57 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/tests/foreach.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/foreach.m?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/foreach.m (added)
+++ debuginfo-tests/trunk/tests/foreach.m Fri Nov 10 12:57:57 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/tests/forward-declare-class.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/forward-declare-class.cpp?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/forward-declare-class.cpp (added)
+++ debuginfo-tests/trunk/tests/forward-declare-class.cpp Fri Nov 10 12:57:57 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;
+

Added: debuginfo-tests/trunk/tests/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/lit.local.cfg?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/lit.local.cfg (added)
+++ debuginfo-tests/trunk/tests/lit.local.cfg Fri Nov 10 12:57:57 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

Added: debuginfo-tests/trunk/tests/llgdb.py
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/llgdb.py?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/llgdb.py (added)
+++ debuginfo-tests/trunk/tests/llgdb.py Fri Nov 10 12:57:57 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/tests/nested-struct.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/nested-struct.cpp?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/nested-struct.cpp (added)
+++ debuginfo-tests/trunk/tests/nested-struct.cpp Fri Nov 10 12:57:57 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/tests/nrvo-string.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/nrvo-string.cpp?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/nrvo-string.cpp (added)
+++ debuginfo-tests/trunk/tests/nrvo-string.cpp Fri Nov 10 12:57:57 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/tests/safestack.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/safestack.c?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/safestack.c (added)
+++ debuginfo-tests/trunk/tests/safestack.c Fri Nov 10 12:57:57 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/tests/sret.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/sret.cpp?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/sret.cpp (added)
+++ debuginfo-tests/trunk/tests/sret.cpp Fri Nov 10 12:57:57 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/tests/stack-var.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/stack-var.c?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/stack-var.c (added)
+++ debuginfo-tests/trunk/tests/stack-var.c Fri Nov 10 12:57:57 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/tests/static-member-2.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/static-member-2.cpp?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/static-member-2.cpp (added)
+++ debuginfo-tests/trunk/tests/static-member-2.cpp Fri Nov 10 12:57:57 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/tests/static-member.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/static-member.cpp?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/static-member.cpp (added)
+++ debuginfo-tests/trunk/tests/static-member.cpp Fri Nov 10 12:57:57 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/tests/vla.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/vla.c?rev=317925&view=auto
==============================================================================
--- debuginfo-tests/trunk/tests/vla.c (added)
+++ debuginfo-tests/trunk/tests/vla.c Fri Nov 10 12:57:57 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;
+}

Removed: debuginfo-tests/trunk/vla.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/vla.c?rev=317924&view=auto
==============================================================================
--- debuginfo-tests/trunk/vla.c (original)
+++ debuginfo-tests/trunk/vla.c (removed)
@@ -1,24 +0,0 @@
-// 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