[debuginfo-tests] r318435 - Resubmit "Refactor debuginfo-tests"

Adrian Prantl via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 16 15:01:04 PST 2017


Looks like this broke the Darwin bots again:

http://green.lab.llvm.org/green/job/clang-stage1-configure-RA/40578/ <http://green.lab.llvm.org/green/job/clang-stage1-configure-RA/40578/>

-- adrian

> On Nov 16, 2017, at 10:26 AM, Zachary Turner via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Author: zturner
> Date: Thu Nov 16 10:26:20 2017
> New Revision: 318435
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=318435&view=rev
> Log:
> Resubmit "Refactor debuginfo-tests"
> 
> This was reverted due to some failures on specific darwin buildbots,
> the issue being that the new lit configuration was not setting the
> SDKROOT environment variable.  We've tested a fix locally and confirmed
> that it works, so this patch resubmits everything with the fix
> applied.
> 
> 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/CMakeLists.txt (added)
> +++ debuginfo-tests/trunk/CMakeLists.txt Thu Nov 16 10:26:20 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=318434&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=318434&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=318434&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=318434&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=318434&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=318434&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=318434&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=318434&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=318434&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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/lit.cfg.py (added)
> +++ debuginfo-tests/trunk/lit.cfg.py Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,59 @@
> +# -*- 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)
> 
> Removed: debuginfo-tests/trunk/lit.local.cfg
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.local.cfg?rev=318434&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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/lit.site.cfg.py.in (added)
> +++ debuginfo-tests/trunk/lit.site.cfg.py.in Thu Nov 16 10:26:20 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=318434&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=318434&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=318434&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=318434&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=318434&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=318434&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=318434&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=318434&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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp (added)
> +++ debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/asan-blocks.c (added)
> +++ debuginfo-tests/trunk/tests/asan-blocks.c Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/asan.c (added)
> +++ debuginfo-tests/trunk/tests/asan.c Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/block_var.m (added)
> +++ debuginfo-tests/trunk/tests/block_var.m Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/blocks.m (added)
> +++ debuginfo-tests/trunk/tests/blocks.m Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/ctor.cpp (added)
> +++ debuginfo-tests/trunk/tests/ctor.cpp Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/dbg-arg.c (added)
> +++ debuginfo-tests/trunk/tests/dbg-arg.c Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/foreach.m (added)
> +++ debuginfo-tests/trunk/tests/foreach.m Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/forward-declare-class.cpp (added)
> +++ debuginfo-tests/trunk/tests/forward-declare-class.cpp Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/lit.local.cfg (added)
> +++ debuginfo-tests/trunk/tests/lit.local.cfg Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/llgdb.py (added)
> +++ debuginfo-tests/trunk/tests/llgdb.py Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/nested-struct.cpp (added)
> +++ debuginfo-tests/trunk/tests/nested-struct.cpp Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/nrvo-string.cpp (added)
> +++ debuginfo-tests/trunk/tests/nrvo-string.cpp Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/safestack.c (added)
> +++ debuginfo-tests/trunk/tests/safestack.c Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/sret.cpp (added)
> +++ debuginfo-tests/trunk/tests/sret.cpp Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/stack-var.c (added)
> +++ debuginfo-tests/trunk/tests/stack-var.c Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/static-member-2.cpp (added)
> +++ debuginfo-tests/trunk/tests/static-member-2.cpp Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/static-member.cpp (added)
> +++ debuginfo-tests/trunk/tests/static-member.cpp Thu Nov 16 10:26:20 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=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/vla.c (added)
> +++ debuginfo-tests/trunk/tests/vla.c Thu Nov 16 10:26:20 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=318434&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;
> -}
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171116/7d1cf972/attachment-0001.html>


More information about the llvm-commits mailing list