[debuginfo-tests] r318435 - Resubmit "Refactor debuginfo-tests"
Zachary Turner via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 16 15:53:29 PST 2017
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/70f6ac9e/attachment.html>
More information about the llvm-commits
mailing list