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

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 16 15:54:49 PST 2017


Can you confirm these tests only run once when you do this locally?

On Thu, Nov 16, 2017 at 3:53 PM Zachary Turner <zturner at google.com> wrote:

> It's too bad it doesn't show the command output from the passed runs :-/
>
> Failure:
> http://green.lab.llvm.org/green/job/clang-stage1-configure-RA/40578/testReport/debuginfo-tests/debuginfo-tests/vla_c/
> Pass:
> http://green.lab.llvm.org/green/job/clang-stage1-configure-RA/40578/testReport/debuginfo-tests/debuginfo-tests/vla_c_2/
>
> On Thu, Nov 16, 2017 at 3:52 PM Adrian Prantl <aprantl at apple.com> wrote:
>
>> Alternatively, perhaps the other tests all use a single clang driver
>> invocation with the clang driver choosing a temporary object file and these
>> two manually specify a name for the .o file.
>>
>> -- adrian
>>
>>
>> On Nov 16, 2017, at 3:50 PM, Adrian Prantl via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>> I think this makes sense: Last time they failed because they were the
>> only ones that needed an SDKROOT, and this time they failed because they
>> are the only ones that take longer to compile (because the #import some
>> huge system headers). All other tests are so short that they compile
>> instantaneously. These two include system frameworks so they take longer to
>> compile and thus are scheduled to run twice at the same time.
>>
>> -- adrian
>>
>> On Nov 16, 2017, at 3:47 PM, Zachary Turner <zturner at google.com> wrote:
>>
>> Are you sure that's actually the problem?  Because it's mighty suspicious
>> that it's the exact same two tests that failed with the previous version of
>> the patch.
>>
>> On Thu, Nov 16, 2017 at 3:42 PM Adrian Prantl <aprantl at apple.com> wrote:
>>
>>> No, because it won't fix the issue. All debuginfo-tests tests are
>>> running twice, and whichever test happens to be scheduled to execute
>>> simultaneously will fail, but it's nothing special about these two tests,
>>> they just compile slow enough for the problem to manifest.
>>>
>>> -- adrian
>>>
>>>
>>> On Nov 16, 2017, at 3:37 PM, Zachary Turner <zturner at google.com> wrote:
>>>
>>> Can we disable these two tests for now until we can look into this?  I'd
>>> like to fix it, but this isn't something that I have the ability to
>>> diagnose on my end and I'm going to be blocked again if we end up having to
>>> revert.  :-/
>>>
>>> On Thu, Nov 16, 2017 at 3:34 PM Zachary Turner <zturner at google.com>
>>> wrote:
>>>
>>>> We can try a clobber.  Another possibility is that in an effort to make
>>>> it so you can run it using both workflows, it now ends up running it
>>>> twice.  Once the old way (by descending into it from the clang tree) and
>>>> once the new way (.
>>>>
>>>> Does this not reproduce for you locally when running ninja check-clang?
>>>>
>>>> I don't think the directory mismatch is a problem.  In debuginfo-tests/
>>>> lit.cfg.py I explicitly set the output directory to that location.  I
>>>> don't think it should matter that it's Output instead of Output/tests
>>>>
>>>> On Thu, Nov 16, 2017 at 3:29 PM Adrian Prantl <aprantl at apple.com>
>>>> wrote:
>>>>
>>>>> It looks like it is actually running the test twice:
>>>>> FAIL: debuginfo-tests :: foreach.m (34967 of 40843)
>>>>> ...
>>>>> PASS: debuginfo-tests :: foreach.m (34972 of 40843)
>>>>>
>>>>> does that help to narrow it down?
>>>>>
>>>>> On Nov 16, 2017, at 3:21 PM, Adrian Prantl via llvm-commits <
>>>>> llvm-commits at lists.llvm.org> wrote:
>>>>>
>>>>> Debugger output was: imported lldb from:
>>>>> "/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/Python"
>>>>> error: vla.c.tmp.out debug map object file
>>>>> '/Users/buildslave/jenkins/workspace/clang-stage1-configure-RA/clang-build/tools/clang/test/debuginfo-tests/Output/vla.c.tmp.o'
>>>>> has changed (actual time is 0x5a0de4bc, debug map time is 0x5a0de4bb) since
>>>>> this executable was linked, file will be ignored
>>>>>
>>>>>
>>>>> These are different errors than last time. Could it be that there is a
>>>>> directory mismatch? You moved the tests to tests/ but this path is in
>>>>> Output/ instead of Output/tests?
>>>>>
>>>>> It looks like it is finding a file from the build before the big
>>>>> rename. But this is just speculation.
>>>>>
>>>>> -- adrian
>>>>>
>>>>> On Nov 16, 2017, at 3:13 PM, Zachary Turner <zturner at google.com>
>>>>> wrote:
>>>>>
>>>>> Uhh, well that's weird.  a because I didn't get an email (or maybe it
>>>>> got filtered somehow), and b) because I made the fix that we thought was
>>>>> going to work.
>>>>>
>>>>> Can you think of a way to diagnose this?
>>>>>
>>>>> (One option is disabling these two tests until we figure it out.  It's
>>>>> not ideal but the code churn from repeated reverts and resubmits is pretty
>>>>> unfortunate)
>>>>>
>>>>> On Thu, Nov 16, 2017 at 3:01 PM Adrian Prantl <aprantl at apple.com>
>>>>> wrote:
>>>>> Looks like this broke the Darwin bots again:
>>>>>
>>>>> 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 {
>>>>> +  st
>>>>>
>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171116/48ac7b20/attachment.html>


More information about the llvm-commits mailing list