[debuginfo-tests] r318435 - Resubmit "Refactor debuginfo-tests"
Adrian Prantl via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 16 15:01:04 PST 2017
Looks like this broke the Darwin bots again:
http://green.lab.llvm.org/green/job/clang-stage1-configure-RA/40578/ <http://green.lab.llvm.org/green/job/clang-stage1-configure-RA/40578/>
-- adrian
> On Nov 16, 2017, at 10:26 AM, Zachary Turner via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Author: zturner
> Date: Thu Nov 16 10:26:20 2017
> New Revision: 318435
>
> URL: http://llvm.org/viewvc/llvm-project?rev=318435&view=rev
> Log:
> Resubmit "Refactor debuginfo-tests"
>
> This was reverted due to some failures on specific darwin buildbots,
> the issue being that the new lit configuration was not setting the
> SDKROOT environment variable. We've tested a fix locally and confirmed
> that it works, so this patch resubmits everything with the fix
> applied.
>
> Added:
> debuginfo-tests/trunk/CMakeLists.txt
> debuginfo-tests/trunk/lit.cfg.py
> debuginfo-tests/trunk/lit.site.cfg.py.in
> debuginfo-tests/trunk/tests/
> debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp
> debuginfo-tests/trunk/tests/asan-blocks.c
> debuginfo-tests/trunk/tests/asan.c
> debuginfo-tests/trunk/tests/block_var.m
> debuginfo-tests/trunk/tests/blocks.m
> debuginfo-tests/trunk/tests/ctor.cpp
> debuginfo-tests/trunk/tests/dbg-arg.c
> debuginfo-tests/trunk/tests/foreach.m
> debuginfo-tests/trunk/tests/forward-declare-class.cpp
> debuginfo-tests/trunk/tests/lit.local.cfg
> debuginfo-tests/trunk/tests/llgdb.py
> debuginfo-tests/trunk/tests/nested-struct.cpp
> debuginfo-tests/trunk/tests/nrvo-string.cpp
> debuginfo-tests/trunk/tests/safestack.c
> debuginfo-tests/trunk/tests/sret.cpp
> debuginfo-tests/trunk/tests/stack-var.c
> debuginfo-tests/trunk/tests/static-member-2.cpp
> debuginfo-tests/trunk/tests/static-member.cpp
> debuginfo-tests/trunk/tests/vla.c
> Removed:
> debuginfo-tests/trunk/aggregate-indirect-arg.cpp
> debuginfo-tests/trunk/asan-blocks.c
> debuginfo-tests/trunk/asan.c
> debuginfo-tests/trunk/block_var.m
> debuginfo-tests/trunk/blocks.m
> debuginfo-tests/trunk/ctor.cpp
> debuginfo-tests/trunk/dbg-arg.c
> debuginfo-tests/trunk/foreach.m
> debuginfo-tests/trunk/forward-declare-class.cpp
> debuginfo-tests/trunk/lit.local.cfg
> debuginfo-tests/trunk/llgdb.py
> debuginfo-tests/trunk/nested-struct.cpp
> debuginfo-tests/trunk/nrvo-string.cpp
> debuginfo-tests/trunk/safestack.c
> debuginfo-tests/trunk/sret.cpp
> debuginfo-tests/trunk/stack-var.c
> debuginfo-tests/trunk/static-member-2.cpp
> debuginfo-tests/trunk/static-member.cpp
> debuginfo-tests/trunk/vla.c
>
> Added: debuginfo-tests/trunk/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/CMakeLists.txt?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/CMakeLists.txt (added)
> +++ debuginfo-tests/trunk/CMakeLists.txt Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,36 @@
> +# Debug Info tests. These tests invoke clang to generate programs with
> +# various types of debug info, and then run those programs under a debugger
> +# such as GDB or LLDB to verify the results.
> +
> +set(DEBUGINFO_TESTS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
> +set(DEBUGINFO_TESTS_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
> +
> +set(DEBUGINFO_TEST_DEPS
> + clang
> + llvm-config
> + FileCheck
> + count
> + not
> + )
> +
> +get_target_property(CLANG_SOURCE_DIR clang SOURCE_DIR)
> +
> +if (TARGET lld)
> + set(DEBUGINFO_TESTS_HAS_LLD 1)
> + list(APPEND DEBUGINFO_TEST_DEPS lld)
> + get_target_property(LLD_SOURCE_DIR lld SOURCE_DIR)
> +endif()
> +
> +configure_lit_site_cfg(
> + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
> + ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
> + MAIN_CONFIG
> + ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
> + )
> +
> +add_lit_testsuite(check-debuginfo "Running debug info integration tests"
> + ${CMAKE_CURRENT_BINARY_DIR}
> + DEPENDS ${DEBUGINFO_TEST_DEPS}
> + )
> +
> +set_target_properties(check-debuginfo PROPERTIES FOLDER "Debug info tests")
> \ No newline at end of file
>
> Removed: debuginfo-tests/trunk/aggregate-indirect-arg.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/aggregate-indirect-arg.cpp?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/aggregate-indirect-arg.cpp (original)
> +++ debuginfo-tests/trunk/aggregate-indirect-arg.cpp (removed)
> @@ -1,32 +0,0 @@
> -// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> -// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
> -// RUN: %test_debuginfo %s %t.out
> -// Radar 8945514
> -// DEBUGGER: break 22
> -// DEBUGGER: r
> -// DEBUGGER: p v
> -// CHECK: ${{[0-9]+}} =
> -// CHECK: Data ={{.*}} 0x0{{(0*)}}
> -// CHECK: Kind = 2142
> -
> -class SVal {
> -public:
> - ~SVal() {}
> - const void* Data;
> - unsigned Kind;
> -};
> -
> -void bar(SVal &v) {}
> -class A {
> -public:
> - void foo(SVal v) { bar(v); }
> -};
> -
> -int main() {
> - SVal v;
> - v.Data = 0;
> - v.Kind = 2142;
> - A a;
> - a.foo(v);
> - return 0;
> -}
>
> Removed: debuginfo-tests/trunk/asan-blocks.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/asan-blocks.c?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/asan-blocks.c (original)
> +++ debuginfo-tests/trunk/asan-blocks.c (removed)
> @@ -1,41 +0,0 @@
> -// RUN: %clang -fblocks %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=address
> -// RUN: %test_debuginfo %s %t.out
> -// FIXME: Remove system-darwin when we build BlocksRuntime everywhere.
> -// REQUIRES: not_asan, system-darwin
> -// Zorg configures the ASAN stage2 bots to not build the asan
> -// compiler-rt. Only run this test on non-asanified configurations.
> -void b();
> -struct S {
> - int a[8];
> -};
> -
> -int f(struct S s, unsigned i) {
> - // DEBUGGER: break 17
> - // DEBUGGER: r
> - // DEBUGGER: p s
> - // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7)
> - return s.a[i];
> -}
> -
> -int main(int argc, const char **argv) {
> - struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
> - if (f(s, 4) == 4) {
> - // DEBUGGER: break 27
> - // DEBUGGER: c
> - // DEBUGGER: p s
> - // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7)
> - b();
> - }
> - return 0;
> -}
> -
> -void c() {}
> -
> -void b() {
> - // DEBUGGER: break 40
> - // DEBUGGER: c
> - // DEBUGGER: p x
> - // CHECK: 42
> - __block int x = 42;
> - c();
> -}
>
> Removed: debuginfo-tests/trunk/asan.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/asan.c?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/asan.c (original)
> +++ debuginfo-tests/trunk/asan.c (removed)
> @@ -1,31 +0,0 @@
> -// RUN: %clang -fblocks %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=address
> -// RUN: %test_debuginfo %s %t.out
> -// REQUIRES: not_asan
> -// Zorg configures the ASAN stage2 bots to not build the asan
> -// compiler-rt. Only run this test on non-asanified configurations.
> -//
> -
> -struct S {
> - int a[8];
> -};
> -
> -int f(struct S s, unsigned i) {
> - // DEBUGGER: break 14
> - return s.a[i];
> -}
> -
> -int main(int argc, const char **argv) {
> - struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
> - if (f(s, 4) == 4)
> - return f(s, 0);
> - return 0;
> -}
> -
> -// DEBUGGER: r
> -// DEBUGGER: p s
> -// CHECK: a =
> -// DEBUGGER: p s.a[0]
> -// CHECK: = 0
> -// DEBUGGER: p s.a[1]
> -// CHECK: = 1
> -// DEBUGGER: p s.a[7]
>
> Removed: debuginfo-tests/trunk/block_var.m
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/block_var.m?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/block_var.m (original)
> +++ debuginfo-tests/trunk/block_var.m (removed)
> @@ -1,32 +0,0 @@
> -// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> -// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation
> -// RUN: %test_debuginfo %s %t.out
> -
> -// REQUIRES: system-darwin
> -
> -// DEBUGGER: break 24
> -// DEBUGGER: r
> -// DEBUGGER: p result
> -// CHECK: ${{[0-9]}} = 42
> -
> -void doBlock(void (^block)(void))
> -{
> - block();
> -}
> -
> -int I(int n)
> -{
> - __block int result;
> - int i = 2;
> - doBlock(^{
> - result = n;
> - });
> - return result + i; /* Check value of 'result' */
> -}
> -
> -
> -int main (int argc, const char * argv[]) {
> - return I(42);
> -}
> -
> -
>
> Removed: debuginfo-tests/trunk/blocks.m
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/blocks.m?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/blocks.m (original)
> +++ debuginfo-tests/trunk/blocks.m (removed)
> @@ -1,43 +0,0 @@
> -// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> -// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation
> -// RUN: %test_debuginfo %s %t.out
> -
> -// REQUIRES: system-darwin
> -// Radar 9279956
> -
> -// DEBUGGER: break 31
> -// DEBUGGER: r
> -// DEBUGGER: p m2
> -// CHECK: ${{[0-9]}} = 1
> -// DEBUGGER: p dbTransaction
> -// CHECK: ${{[0-9]}} = 0
> -// DEBUGGER: p master
> -// CHECK: ${{[0-9]}} = 0
> -
> -#include <Cocoa/Cocoa.h>
> -
> -extern void foo(void(^)(void));
> -
> - at interface A:NSObject @end
> - at implementation A
> -- (void) helper {
> - int master = 0;
> - __block int m2 = 0;
> - __block int dbTransaction = 0;
> - int (^x)(void) = ^(void) { (void) self;
> - (void) master;
> - (void) dbTransaction;
> - m2++;
> - return m2;
> - };
> - master = x();
> -}
> - at end
> -
> -void foo(void(^x)(void)) {}
> -
> -int main() {
> - A *a = [A alloc];
> - [a helper];
> - return 0;
> -}
>
> Removed: debuginfo-tests/trunk/ctor.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/ctor.cpp?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/ctor.cpp (original)
> +++ debuginfo-tests/trunk/ctor.cpp (removed)
> @@ -1,25 +0,0 @@
> -// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> -// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
> -// RUN: %test_debuginfo %s %t.out
> -
> -
> -// DEBUGGER: break 14
> -// DEBUGGER: r
> -// DEBUGGER: p *this
> -// CHECK-NEXT-NOT: Cannot access memory at address
> -
> -class A {
> -public:
> - A() : zero(0), data(42)
> - {
> - }
> -private:
> - int zero;
> - int data;
> -};
> -
> -int main() {
> - A a;
> - return 0;
> -}
> -
>
> Removed: debuginfo-tests/trunk/dbg-arg.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/dbg-arg.c?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/dbg-arg.c (original)
> +++ debuginfo-tests/trunk/dbg-arg.c (removed)
> @@ -1,46 +0,0 @@
> -// This test case checks debug info during register moves for an argument.
> -// RUN: %clang %target_itanium_abi_host_triple -m64 -mllvm -fast-isel=false %s -c -o %t.o -g
> -// RUN: %clang %target_itanium_abi_host_triple -m64 %t.o -o %t.out
> -// RUN: %test_debuginfo %s %t.out
> -//
> -// DEBUGGER: break 26
> -// DEBUGGER: r
> -// DEBUGGER: print mutex
> -// CHECK: ={{.* 0x[0-9A-Fa-f]+}}
> -//
> -// Radar 8412415
> -
> -struct _mtx
> -{
> - long unsigned int ptr;
> - int waiters;
> - struct {
> - int tag;
> - int pad;
> - } mtxi;
> -};
> -
> -
> -int foobar(struct _mtx *mutex) {
> - int r = 1;
> - int l = 0;
> - int j = 0;
> - do {
> - if (mutex->waiters) {
> - r = 2;
> - }
> - j = bar(r, l);
> - ++l;
> - } while (l < j);
> - return r + j;
> -}
> -
> -int bar(int i, int j) {
> - return i + j;
> -}
> -
> -int main() {
> - struct _mtx m;
> - m.waiters = 0;
> - return foobar(&m);
> -}
>
> Removed: debuginfo-tests/trunk/foreach.m
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/foreach.m?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/foreach.m (original)
> +++ debuginfo-tests/trunk/foreach.m (removed)
> @@ -1,31 +0,0 @@
> -// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> -// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation
> -// RUN: %test_debuginfo %s %t.out
> -//
> -// REQUIRES: system-darwin
> -// Radar 8757124
> -
> -// DEBUGGER: break 25
> -// DEBUGGER: r
> -// DEBUGGER: po thing
> -// CHECK: aaa
> -
> -#import <Foundation/Foundation.h>
> -
> -int main (int argc, const char * argv[]) {
> -
> - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
> - NSArray *things = [NSArray arrayWithObjects:@"one", @"two", @"three" , nil];
> - for (NSString *thing in things) {
> - NSLog (@"%@", thing);
> - }
> -
> - things = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc" , nil];
> - for (NSString *thing in things) {
> - NSLog (@"%@", thing);
> - }
> - [pool release];
> - return 0;
> -}
> -
> -
>
> Removed: debuginfo-tests/trunk/forward-declare-class.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/forward-declare-class.cpp?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/forward-declare-class.cpp (original)
> +++ debuginfo-tests/trunk/forward-declare-class.cpp (removed)
> @@ -1,27 +0,0 @@
> -// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> -// RUN: %test_debuginfo %s %t.o
> -// Radar 9168773
> -
> -// DEBUGGER: ptype A
> -// Work around a gdb bug where it believes that a class is a
> -// struct if there aren't any methods - even though it's tagged
> -// as a class.
> -// CHECK: type = {{struct|class}} A {
> -// CHECK-NEXT: {{(public:){0,1}}}
> -// CHECK-NEXT: int MyData;
> -// CHECK-NEXT: }
> -class A;
> -class B {
> -public:
> - void foo(const A *p);
> -};
> -
> -B iEntry;
> -
> -class A {
> -public:
> - int MyData;
> -};
> -
> -A irp;
> -
>
> Added: debuginfo-tests/trunk/lit.cfg.py
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.cfg.py?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/lit.cfg.py (added)
> +++ debuginfo-tests/trunk/lit.cfg.py Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,59 @@
> +# -*- Python -*-
> +
> +import os
> +import platform
> +import re
> +import subprocess
> +import tempfile
> +
> +import lit.formats
> +import lit.util
> +
> +from lit.llvm import llvm_config
> +from lit.llvm.subst import ToolSubst
> +from lit.llvm.subst import FindTool
> +
> +# Configuration file for the 'lit' test runner.
> +
> +# name: The name of this test suite.
> +config.name = 'debuginfo-tests'
> +
> +# testFormat: The test format to use to interpret tests.
> +#
> +# For now we require '&&' between commands, until they get globally killed and
> +# the test runner updated.
> +config.test_format = lit.formats.ShTest(not llvm_config.use_lit_shell)
> +
> +# suffixes: A list of file extensions to treat as test files.
> +config.suffixes = ['.c', '.cpp', '.m']
> +
> +# excludes: A list of directories to exclude from the testsuite. The 'Inputs'
> +# subdirectories contain auxiliary inputs for various tests in their parent
> +# directories.
> +config.excludes = ['Inputs']
> +
> +# test_source_root: The root path where tests are located.
> +config.test_source_root = os.path.join(config.debuginfo_tests_src_root, 'tests')
> +
> +# test_exec_root: The root path where tests should be run.
> +config.test_exec_root = config.debuginfo_tests_obj_root
> +
> +llvm_config.use_default_substitutions()
> +
> +llvm_config.use_clang()
> +
> +if config.llvm_use_sanitizer:
> + # Propagate path to symbolizer for ASan/MSan.
> + llvm_config.with_system_environment(
> + ['ASAN_SYMBOLIZER_PATH', 'MSAN_SYMBOLIZER_PATH'])
> +
> +tool_dirs = [config.llvm_tools_dir]
> +
> +tools = [
> + ToolSubst('%test_debuginfo', command=os.path.join(
> + config.llvm_src_root, 'utils', 'test_debuginfo.pl')),
> +]
> +
> +llvm_config.add_tool_substitutions(tools, tool_dirs)
> +
> +lit.util.usePlatformSdkOnDarwin(config, lit_config)
>
> Removed: debuginfo-tests/trunk/lit.local.cfg
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.local.cfg?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/lit.local.cfg (original)
> +++ debuginfo-tests/trunk/lit.local.cfg (removed)
> @@ -1,3 +0,0 @@
> -# debuginfo-tests are not expected to pass in a cross-compilation setup.
> -if 'native' not in config.available_features:
> - config.unsupported = True
>
> Added: debuginfo-tests/trunk/lit.site.cfg.py.in
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.site.cfg.py.in?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/lit.site.cfg.py.in (added)
> +++ debuginfo-tests/trunk/lit.site.cfg.py.in Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,25 @@
> + at LIT_SITE_CFG_IN_HEADER@
> +
> +import lit.util
> +
> +config.test_exec_root = "@CMAKE_BINARY_DIR@"
> +
> +config.llvm_src_root = "@LLVM_SOURCE_DIR@"
> +config.llvm_obj_root = "@LLVM_BINARY_DIR@"
> +config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
> +config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
> +config.llvm_shlib_dir = "@SHLIBDIR@"
> +config.llvm_plugin_ext = "@LLVM_PLUGIN_EXT@"
> +config.debuginfo_tests_obj_root = "@DEBUGINFO_TESTS_BINARY_DIR@"
> +config.debuginfo_tests_src_root = "@DEBUGINFO_TESTS_SOURCE_DIR@"
> +config.has_lld = lit.util.pythonize_bool("@DEBUGINFO_TESTS_HAS_LLD@")
> +config.host_triple = "@LLVM_HOST_TRIPLE@"
> +config.target_triple = "@TARGET_TRIPLE@"
> +config.host_arch = "@HOST_ARCH@"
> +
> +config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
> +
> + at LIT_SITE_CFG_IN_FOOTER@
> +
> +# Let the main config do the real work.
> +lit_config.load_config(config, "@DEBUGINFO_TESTS_SOURCE_DIR@/lit.cfg.py")
>
> Removed: debuginfo-tests/trunk/llgdb.py
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/llgdb.py?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/llgdb.py (original)
> +++ debuginfo-tests/trunk/llgdb.py (removed)
> @@ -1,157 +0,0 @@
> -#!/bin/env python
> -"""
> -A gdb-compatible frontend for lldb that implements just enough
> -commands to run the tests in the debuginfo-tests repository with lldb.
> -"""
> -
> -# ----------------------------------------------------------------------
> -# Auto-detect lldb python module.
> -import commands, platform, os, sys
> -try:
> - # Just try for LLDB in case PYTHONPATH is already correctly setup.
> - import lldb
> -except ImportError:
> - lldb_python_dirs = list()
> - # lldb is not in the PYTHONPATH, try some defaults for the current platform.
> - platform_system = platform.system()
> - if platform_system == 'Darwin':
> - # On Darwin, try the currently selected Xcode directory
> - xcode_dir = commands.getoutput("xcode-select --print-path")
> - if xcode_dir:
> - lldb_python_dirs.append(os.path.realpath(xcode_dir +
> -'/../SharedFrameworks/LLDB.framework/Resources/Python'))
> - lldb_python_dirs.append(xcode_dir +
> -'/Library/PrivateFrameworks/LLDB.framework/Resources/Python')
> - lldb_python_dirs.append(
> -'/System/Library/PrivateFrameworks/LLDB.framework/Resources/Python')
> - success = False
> - for lldb_python_dir in lldb_python_dirs:
> - if os.path.exists(lldb_python_dir):
> - if not (sys.path.__contains__(lldb_python_dir)):
> - sys.path.append(lldb_python_dir)
> - try:
> - import lldb
> - except ImportError:
> - pass
> - else:
> - print 'imported lldb from: "%s"' % (lldb_python_dir)
> - success = True
> - break
> - if not success:
> - print "error: couldn't locate the 'lldb' module, please set PYTHONPATH correctly"
> - sys.exit(1)
> -# ----------------------------------------------------------------------
> -
> -# Command line option handling.
> -import argparse
> -parser = argparse.ArgumentParser(description=__doc__)
> -parser.add_argument('--quiet', '-q', action="store_true", help='ignored')
> -parser.add_argument('-batch', action="store_true",
> - help='exit after processing comand line')
> -parser.add_argument('-n', action="store_true", help='ignore .lldb file')
> -parser.add_argument('-x', dest='script', type=file, help='execute commands from file')
> -parser.add_argument("target", help="the program to debug")
> -args = parser.parse_args()
> -
> -
> -# Create a new debugger instance.
> -debugger = lldb.SBDebugger.Create()
> -debugger.SkipLLDBInitFiles(args.n)
> -
> -# Don't return from lldb function calls until the process stops.
> -debugger.SetAsync(False)
> -
> -# Create a target from a file and arch.
> -arch = os.popen("file "+args.target).read().split()[-1]
> -target = debugger.CreateTargetWithFileAndArch(args.target, arch)
> -
> -if not target:
> - print "Could not create target", args.target
> - sys.exit(1)
> -
> -if not args.script:
> - print "Interactive mode is not implemented."
> - sys.exit(1)
> -
> -import re
> -for command in args.script:
> - # Strip newline and whitespaces and split into words.
> - cmd = command[:-1].strip().split()
> - if not cmd:
> - continue
> -
> - print '> %s'% command[:-1]
> -
> - try:
> - if re.match('^r|(run)$', cmd[0]):
> - error = lldb.SBError()
> - launchinfo = lldb.SBLaunchInfo([])
> - launchinfo.SetWorkingDirectory(os.getcwd())
> - process = target.Launch(launchinfo, error)
> - print error
> - if not process or error.fail:
> - state = process.GetState()
> - print "State = %d" % state
> - print """
> -ERROR: Could not launch process.
> -NOTE: There are several reasons why this may happen:
> - * Root needs to run "DevToolsSecurity --enable".
> - * Older versions of lldb cannot launch more than one process simultaneously.
> -"""
> - sys.exit(1)
> -
> - elif re.match('^b|(break)$', cmd[0]) and len(cmd) == 2:
> - if re.match('[0-9]+', cmd[1]):
> - # b line
> - mainfile = target.FindFunctions('main')[0].compile_unit.file
> - print target.BreakpointCreateByLocation(mainfile, int(cmd[1]))
> - else:
> - # b file:line
> - file, line = cmd[1].split(':')
> - print target.BreakpointCreateByLocation(file, int(line))
> -
> - elif re.match('^ptype$', cmd[0]) and len(cmd) == 2:
> - # GDB's ptype has multiple incarnations depending on its
> - # argument (global variable, function, type). The definition
> - # here is for looking up the signature of a function and only
> - # if that fails it looks for a type with that name.
> - # Type lookup in LLDB would be "image lookup --type".
> - for elem in target.FindFunctions(cmd[1]):
> - print elem.function.type
> - continue
> - print target.FindFirstType(cmd[1])
> -
> - elif re.match('^po$', cmd[0]) and len(cmd) > 1:
> - try:
> - opts = lldb.SBExpressionOptions()
> - opts.SetFetchDynamicValue(True)
> - opts.SetCoerceResultToId(True)
> - print target.EvaluateExpression(' '.join(cmd[1:]), opts)
> - except:
> - # FIXME: This is a fallback path for the lab.llvm.org
> - # buildbot running OS X 10.7; it should be removed.
> - thread = process.GetThreadAtIndex(0)
> - frame = thread.GetFrameAtIndex(0)
> - print frame.EvaluateExpression(' '.join(cmd[1:]))
> -
> - elif re.match('^p|(print)$', cmd[0]) and len(cmd) > 1:
> - thread = process.GetThreadAtIndex(0)
> - frame = thread.GetFrameAtIndex(0)
> - print frame.EvaluateExpression(' '.join(cmd[1:]))
> -
> - elif re.match('^n|(next)$', cmd[0]):
> - thread = process.GetThreadAtIndex(0)
> - thread.StepOver()
> -
> - elif re.match('^q|(quit)$', cmd[0]):
> - sys.exit(0)
> -
> - else:
> - print debugger.HandleCommand(' '.join(cmd))
> -
> - except SystemExit:
> - lldb.SBDebugger_Terminate()
> - raise
> - except:
> - print 'Could not handle the command "%s"' % ' '.join(cmd)
> -
>
> Removed: debuginfo-tests/trunk/nested-struct.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/nested-struct.cpp?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/nested-struct.cpp (original)
> +++ debuginfo-tests/trunk/nested-struct.cpp (removed)
> @@ -1,21 +0,0 @@
> -// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> -// RUN: %test_debuginfo %s %t.o
> -// Radar 9440721
> -// If debug info for my_number() is emitted outside function foo's scope
> -// then a debugger may not be able to handle it. At least one version of
> -// gdb crashes in such cases.
> -
> -// DEBUGGER: ptype foo
> -// CHECK: int (void)
> -
> -int foo() {
> - struct Local {
> - static int my_number() {
> - return 42;
> - }
> - };
> -
> - int i = 0;
> - i = Local::my_number();
> - return i + 1;
> -}
>
> Removed: debuginfo-tests/trunk/nrvo-string.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/nrvo-string.cpp?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/nrvo-string.cpp (original)
> +++ debuginfo-tests/trunk/nrvo-string.cpp (removed)
> @@ -1,27 +0,0 @@
> -// This ensures that DW_OP_deref is inserted when necessary, such as when NRVO
> -// of a string object occurs in C++.
> -//
> -// RUN: %clangxx -O0 -fno-exceptions %target_itanium_abi_host_triple %s -o %t.out -g
> -// RUN: %test_debuginfo %s %t.out
> -// RUN: %clangxx -O1 -fno-exceptions %target_itanium_abi_host_triple %s -o %t.out -g
> -// RUN: %test_debuginfo %s %t.out
> -//
> -// PR34513
> -
> -struct string {
> - string() {}
> - string(int i) : i(i) {}
> - ~string() {}
> - int i = 0;
> -};
> -string get_string() {
> - string unused;
> - string result = 3;
> -// DEBUGGER: break 21
> - return result;
> -}
> -int main() { get_string(); }
> -
> -// DEBUGGER: r
> -// DEBUGGER: print result.i
> -// CHECK: = 3
>
> Removed: debuginfo-tests/trunk/safestack.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/safestack.c?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/safestack.c (original)
> +++ debuginfo-tests/trunk/safestack.c (removed)
> @@ -1,51 +0,0 @@
> -// RUN: %clang %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=safe-stack
> -// RUN: %test_debuginfo %s %t.out
> -// REQUIRES: not_asan
> -// Zorg configures the ASAN stage2 bots to not build the
> -// safestack compiler-rt. Only run this test on
> -// non-asanified configurations.
> -
> -struct S {
> - int a[8];
> -};
> -
> -int f(struct S s, unsigned i);
> -
> -int main(int argc, const char **argv) {
> - struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
> - // DEBUGGER: break 17
> - f(s, 4);
> - // DEBUGGER: break 19
> - return 0;
> -}
> -
> -int f(struct S s, unsigned i) {
> - // DEBUGGER: break 24
> - return s.a[i];
> -}
> -
> -// DEBUGGER: r
> -// DEBUGGER: p s
> -// CHECK: a =
> -// DEBUGGER: p s.a[0]
> -// CHECK: = 0
> -// DEBUGGER: p s.a[1]
> -// CHECK: = 1
> -// DEBUGGER: p s.a[7]
> -// CHECK: = 7
> -// DEBUGGER: c
> -// DEBUGGER: p s
> -// CHECK: a =
> -// DEBUGGER: p s.a[0]
> -// CHECK: = 0
> -// DEBUGGER: p s.a[1]
> -// CHECK: = 1
> -// DEBUGGER: p s.a[7]
> -// DEBUGGER: c
> -// DEBUGGER: p s
> -// CHECK: a =
> -// DEBUGGER: p s.a[0]
> -// CHECK: = 0
> -// DEBUGGER: p s.a[1]
> -// CHECK: = 1
> -// DEBUGGER: p s.a[7]
>
> Removed: debuginfo-tests/trunk/sret.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/sret.cpp?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/sret.cpp (original)
> +++ debuginfo-tests/trunk/sret.cpp (removed)
> @@ -1,71 +0,0 @@
> -// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> -// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
> -// RUN: %test_debuginfo %s %t.out
> -// Radar 8775834
> -// DEBUGGER: break 62
> -// DEBUGGER: r
> -// DEBUGGER: p a
> -// CHECK: ${{[0-9]+}} =
> -// LLDB does not print artificial members.
> -// CHECK: {{(_vptr\$A =)?.*}}m_int = 12
> -
> -class A
> -{
> -public:
> - A (int i=0);
> - A (const A& rhs);
> - const A&
> - operator= (const A& rhs);
> - virtual ~A() {}
> -
> - int get_int();
> -
> -protected:
> - int m_int;
> -};
> -
> -A::A (int i) :
> - m_int(i)
> -{
> -}
> -
> -A::A (const A& rhs) :
> - m_int (rhs.m_int)
> -{
> -}
> -
> -const A &
> -A::operator =(const A& rhs)
> -{
> - m_int = rhs.m_int;
> - return *this;
> -}
> -
> -int A::get_int()
> -{
> - return m_int;
> -}
> -
> -class B
> -{
> -public:
> - B () {}
> -
> - A AInstance();
> -};
> -
> -A
> -B::AInstance()
> -{
> - A a(12);
> - return a;
> -}
> -
> -int main (int argc, char const *argv[])
> -{
> - B b;
> - int return_val = b.AInstance().get_int();
> -
> - A a(b.AInstance());
> - return return_val;
> -}
>
> Removed: debuginfo-tests/trunk/stack-var.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/stack-var.c?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/stack-var.c (original)
> +++ debuginfo-tests/trunk/stack-var.c (removed)
> @@ -1,18 +0,0 @@
> -// RUN: %clang %target_itanium_abi_host_triple %s -O -o %t.out -g
> -// RUN: %test_debuginfo %s %t.out
> -
> -void __attribute__((noinline, optnone)) bar(int *test) {}
> -int main() {
> - int test;
> - test = 23;
> - // DEBUGGER: break 12
> - // DEBUGGER: r
> - // DEBUGGER: p test
> - // CHECK: = 23
> - bar(&test);
> - // DEBUGGER: break 17
> - // DEBUGGER: c
> - // DEBUGGER: p test
> - // CHECK: = 23
> - return test;
> -}
>
> Removed: debuginfo-tests/trunk/static-member-2.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/static-member-2.cpp?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/static-member-2.cpp (original)
> +++ debuginfo-tests/trunk/static-member-2.cpp (removed)
> @@ -1,39 +0,0 @@
> -// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -o %t -c
> -// RUN: %clangxx %target_itanium_abi_host_triple %t -o %t.out
> -// RUN: %test_debuginfo %s %t.out
> -
> -// FIXME: LLDB finds the wrong symbol for "C". rdar://problem/14933867
> -// XFAIL: darwin
> -
> -// DEBUGGER: delete breakpoints
> -// DEBUGGER: break static-member.cpp:33
> -// DEBUGGER: r
> -// DEBUGGER: ptype C
> -// CHECK: {{struct|class}} C {
> -// CHECK: static const int a;
> -// CHECK-NEXT: static int b;
> -// CHECK-NEXT: static int c;
> -// CHECK-NEXT: int d;
> -// CHECK-NEXT: }
> -// DEBUGGER: p C::a
> -// CHECK: ${{[0-9]}} = 4
> -// DEBUGGER: p C::c
> -// CHECK: ${{[0-9]}} = 15
> -
> -// PR14471, PR14734
> -
> -class C {
> -public:
> - const static int a = 4;
> - static int b;
> - static int c;
> - int d;
> -};
> -
> -int C::c = 15;
> -const int C::a;
> -
> -int main() {
> - C instance_C;
> - return C::a;
> -}
>
> Removed: debuginfo-tests/trunk/static-member.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/static-member.cpp?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/static-member.cpp (original)
> +++ debuginfo-tests/trunk/static-member.cpp (removed)
> @@ -1,36 +0,0 @@
> -// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -o %t -c
> -// RUN: %clangxx %target_itanium_abi_host_triple %t -o %t.out
> -// RUN: %test_debuginfo %s %t.out
> -
> -// DEBUGGER: delete breakpoints
> -// DEBUGGER: break static-member.cpp:33
> -// DEBUGGER: r
> -// DEBUGGER: ptype MyClass
> -// CHECK: {{struct|class}} MyClass {
> -// CHECK: static const int a;
> -// CHECK-NEXT: static int b;
> -// CHECK-NEXT: static int c;
> -// CHECK-NEXT: int d;
> -// CHECK-NEXT: }
> -// DEBUGGER: p MyClass::a
> -// CHECK: ${{[0-9]}} = 4
> -// DEBUGGER: p MyClass::c
> -// CHECK: ${{[0-9]}} = 15
> -
> -// PR14471, PR14734
> -
> -class MyClass {
> -public:
> - const static int a = 4;
> - static int b;
> - static int c;
> - int d;
> -};
> -
> -int MyClass::c = 15;
> -const int MyClass::a;
> -
> -int main() {
> - MyClass instance_MyClass;
> - return MyClass::a;
> -}
>
> Added: debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp (added)
> +++ debuginfo-tests/trunk/tests/aggregate-indirect-arg.cpp Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,32 @@
> +// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> +// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
> +// RUN: %test_debuginfo %s %t.out
> +// Radar 8945514
> +// DEBUGGER: break 22
> +// DEBUGGER: r
> +// DEBUGGER: p v
> +// CHECK: ${{[0-9]+}} =
> +// CHECK: Data ={{.*}} 0x0{{(0*)}}
> +// CHECK: Kind = 2142
> +
> +class SVal {
> +public:
> + ~SVal() {}
> + const void* Data;
> + unsigned Kind;
> +};
> +
> +void bar(SVal &v) {}
> +class A {
> +public:
> + void foo(SVal v) { bar(v); }
> +};
> +
> +int main() {
> + SVal v;
> + v.Data = 0;
> + v.Kind = 2142;
> + A a;
> + a.foo(v);
> + return 0;
> +}
>
> Added: debuginfo-tests/trunk/tests/asan-blocks.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/asan-blocks.c?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/asan-blocks.c (added)
> +++ debuginfo-tests/trunk/tests/asan-blocks.c Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,41 @@
> +// RUN: %clang -fblocks %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=address
> +// RUN: %test_debuginfo %s %t.out
> +// FIXME: Remove system-darwin when we build BlocksRuntime everywhere.
> +// REQUIRES: not_asan, system-darwin
> +// Zorg configures the ASAN stage2 bots to not build the asan
> +// compiler-rt. Only run this test on non-asanified configurations.
> +void b();
> +struct S {
> + int a[8];
> +};
> +
> +int f(struct S s, unsigned i) {
> + // DEBUGGER: break 17
> + // DEBUGGER: r
> + // DEBUGGER: p s
> + // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7)
> + return s.a[i];
> +}
> +
> +int main(int argc, const char **argv) {
> + struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
> + if (f(s, 4) == 4) {
> + // DEBUGGER: break 27
> + // DEBUGGER: c
> + // DEBUGGER: p s
> + // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7)
> + b();
> + }
> + return 0;
> +}
> +
> +void c() {}
> +
> +void b() {
> + // DEBUGGER: break 40
> + // DEBUGGER: c
> + // DEBUGGER: p x
> + // CHECK: 42
> + __block int x = 42;
> + c();
> +}
>
> Added: debuginfo-tests/trunk/tests/asan.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/asan.c?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/asan.c (added)
> +++ debuginfo-tests/trunk/tests/asan.c Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,31 @@
> +// RUN: %clang -fblocks %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=address
> +// RUN: %test_debuginfo %s %t.out
> +// REQUIRES: not_asan
> +// Zorg configures the ASAN stage2 bots to not build the asan
> +// compiler-rt. Only run this test on non-asanified configurations.
> +//
> +
> +struct S {
> + int a[8];
> +};
> +
> +int f(struct S s, unsigned i) {
> + // DEBUGGER: break 14
> + return s.a[i];
> +}
> +
> +int main(int argc, const char **argv) {
> + struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
> + if (f(s, 4) == 4)
> + return f(s, 0);
> + return 0;
> +}
> +
> +// DEBUGGER: r
> +// DEBUGGER: p s
> +// CHECK: a =
> +// DEBUGGER: p s.a[0]
> +// CHECK: = 0
> +// DEBUGGER: p s.a[1]
> +// CHECK: = 1
> +// DEBUGGER: p s.a[7]
>
> Added: debuginfo-tests/trunk/tests/block_var.m
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/block_var.m?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/block_var.m (added)
> +++ debuginfo-tests/trunk/tests/block_var.m Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,32 @@
> +// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> +// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation
> +// RUN: %test_debuginfo %s %t.out
> +
> +// REQUIRES: system-darwin
> +
> +// DEBUGGER: break 24
> +// DEBUGGER: r
> +// DEBUGGER: p result
> +// CHECK: ${{[0-9]}} = 42
> +
> +void doBlock(void (^block)(void))
> +{
> + block();
> +}
> +
> +int I(int n)
> +{
> + __block int result;
> + int i = 2;
> + doBlock(^{
> + result = n;
> + });
> + return result + i; /* Check value of 'result' */
> +}
> +
> +
> +int main (int argc, const char * argv[]) {
> + return I(42);
> +}
> +
> +
>
> Added: debuginfo-tests/trunk/tests/blocks.m
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/blocks.m?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/blocks.m (added)
> +++ debuginfo-tests/trunk/tests/blocks.m Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,43 @@
> +// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> +// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation
> +// RUN: %test_debuginfo %s %t.out
> +
> +// REQUIRES: system-darwin
> +// Radar 9279956
> +
> +// DEBUGGER: break 31
> +// DEBUGGER: r
> +// DEBUGGER: p m2
> +// CHECK: ${{[0-9]}} = 1
> +// DEBUGGER: p dbTransaction
> +// CHECK: ${{[0-9]}} = 0
> +// DEBUGGER: p master
> +// CHECK: ${{[0-9]}} = 0
> +
> +#include <Cocoa/Cocoa.h>
> +
> +extern void foo(void(^)(void));
> +
> + at interface A:NSObject @end
> + at implementation A
> +- (void) helper {
> + int master = 0;
> + __block int m2 = 0;
> + __block int dbTransaction = 0;
> + int (^x)(void) = ^(void) { (void) self;
> + (void) master;
> + (void) dbTransaction;
> + m2++;
> + return m2;
> + };
> + master = x();
> +}
> + at end
> +
> +void foo(void(^x)(void)) {}
> +
> +int main() {
> + A *a = [A alloc];
> + [a helper];
> + return 0;
> +}
>
> Added: debuginfo-tests/trunk/tests/ctor.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/ctor.cpp?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/ctor.cpp (added)
> +++ debuginfo-tests/trunk/tests/ctor.cpp Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,25 @@
> +// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> +// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
> +// RUN: %test_debuginfo %s %t.out
> +
> +
> +// DEBUGGER: break 14
> +// DEBUGGER: r
> +// DEBUGGER: p *this
> +// CHECK-NEXT-NOT: Cannot access memory at address
> +
> +class A {
> +public:
> + A() : zero(0), data(42)
> + {
> + }
> +private:
> + int zero;
> + int data;
> +};
> +
> +int main() {
> + A a;
> + return 0;
> +}
> +
>
> Added: debuginfo-tests/trunk/tests/dbg-arg.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/dbg-arg.c?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/dbg-arg.c (added)
> +++ debuginfo-tests/trunk/tests/dbg-arg.c Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,46 @@
> +// This test case checks debug info during register moves for an argument.
> +// RUN: %clang %target_itanium_abi_host_triple -m64 -mllvm -fast-isel=false %s -c -o %t.o -g
> +// RUN: %clang %target_itanium_abi_host_triple -m64 %t.o -o %t.out
> +// RUN: %test_debuginfo %s %t.out
> +//
> +// DEBUGGER: break 26
> +// DEBUGGER: r
> +// DEBUGGER: print mutex
> +// CHECK: ={{.* 0x[0-9A-Fa-f]+}}
> +//
> +// Radar 8412415
> +
> +struct _mtx
> +{
> + long unsigned int ptr;
> + int waiters;
> + struct {
> + int tag;
> + int pad;
> + } mtxi;
> +};
> +
> +
> +int foobar(struct _mtx *mutex) {
> + int r = 1;
> + int l = 0;
> + int j = 0;
> + do {
> + if (mutex->waiters) {
> + r = 2;
> + }
> + j = bar(r, l);
> + ++l;
> + } while (l < j);
> + return r + j;
> +}
> +
> +int bar(int i, int j) {
> + return i + j;
> +}
> +
> +int main() {
> + struct _mtx m;
> + m.waiters = 0;
> + return foobar(&m);
> +}
>
> Added: debuginfo-tests/trunk/tests/foreach.m
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/foreach.m?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/foreach.m (added)
> +++ debuginfo-tests/trunk/tests/foreach.m Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,31 @@
> +// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> +// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out -framework Foundation
> +// RUN: %test_debuginfo %s %t.out
> +//
> +// REQUIRES: system-darwin
> +// Radar 8757124
> +
> +// DEBUGGER: break 25
> +// DEBUGGER: r
> +// DEBUGGER: po thing
> +// CHECK: aaa
> +
> +#import <Foundation/Foundation.h>
> +
> +int main (int argc, const char * argv[]) {
> +
> + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
> + NSArray *things = [NSArray arrayWithObjects:@"one", @"two", @"three" , nil];
> + for (NSString *thing in things) {
> + NSLog (@"%@", thing);
> + }
> +
> + things = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc" , nil];
> + for (NSString *thing in things) {
> + NSLog (@"%@", thing);
> + }
> + [pool release];
> + return 0;
> +}
> +
> +
>
> Added: debuginfo-tests/trunk/tests/forward-declare-class.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/forward-declare-class.cpp?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/forward-declare-class.cpp (added)
> +++ debuginfo-tests/trunk/tests/forward-declare-class.cpp Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,27 @@
> +// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> +// RUN: %test_debuginfo %s %t.o
> +// Radar 9168773
> +
> +// DEBUGGER: ptype A
> +// Work around a gdb bug where it believes that a class is a
> +// struct if there aren't any methods - even though it's tagged
> +// as a class.
> +// CHECK: type = {{struct|class}} A {
> +// CHECK-NEXT: {{(public:){0,1}}}
> +// CHECK-NEXT: int MyData;
> +// CHECK-NEXT: }
> +class A;
> +class B {
> +public:
> + void foo(const A *p);
> +};
> +
> +B iEntry;
> +
> +class A {
> +public:
> + int MyData;
> +};
> +
> +A irp;
> +
>
> Added: debuginfo-tests/trunk/tests/lit.local.cfg
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/lit.local.cfg?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/lit.local.cfg (added)
> +++ debuginfo-tests/trunk/tests/lit.local.cfg Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,3 @@
> +# debuginfo-tests are not expected to pass in a cross-compilation setup.
> +if 'native' not in config.available_features:
> + config.unsupported = True
>
> Added: debuginfo-tests/trunk/tests/llgdb.py
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/llgdb.py?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/llgdb.py (added)
> +++ debuginfo-tests/trunk/tests/llgdb.py Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,157 @@
> +#!/bin/env python
> +"""
> +A gdb-compatible frontend for lldb that implements just enough
> +commands to run the tests in the debuginfo-tests repository with lldb.
> +"""
> +
> +# ----------------------------------------------------------------------
> +# Auto-detect lldb python module.
> +import commands, platform, os, sys
> +try:
> + # Just try for LLDB in case PYTHONPATH is already correctly setup.
> + import lldb
> +except ImportError:
> + lldb_python_dirs = list()
> + # lldb is not in the PYTHONPATH, try some defaults for the current platform.
> + platform_system = platform.system()
> + if platform_system == 'Darwin':
> + # On Darwin, try the currently selected Xcode directory
> + xcode_dir = commands.getoutput("xcode-select --print-path")
> + if xcode_dir:
> + lldb_python_dirs.append(os.path.realpath(xcode_dir +
> +'/../SharedFrameworks/LLDB.framework/Resources/Python'))
> + lldb_python_dirs.append(xcode_dir +
> +'/Library/PrivateFrameworks/LLDB.framework/Resources/Python')
> + lldb_python_dirs.append(
> +'/System/Library/PrivateFrameworks/LLDB.framework/Resources/Python')
> + success = False
> + for lldb_python_dir in lldb_python_dirs:
> + if os.path.exists(lldb_python_dir):
> + if not (sys.path.__contains__(lldb_python_dir)):
> + sys.path.append(lldb_python_dir)
> + try:
> + import lldb
> + except ImportError:
> + pass
> + else:
> + print 'imported lldb from: "%s"' % (lldb_python_dir)
> + success = True
> + break
> + if not success:
> + print "error: couldn't locate the 'lldb' module, please set PYTHONPATH correctly"
> + sys.exit(1)
> +# ----------------------------------------------------------------------
> +
> +# Command line option handling.
> +import argparse
> +parser = argparse.ArgumentParser(description=__doc__)
> +parser.add_argument('--quiet', '-q', action="store_true", help='ignored')
> +parser.add_argument('-batch', action="store_true",
> + help='exit after processing comand line')
> +parser.add_argument('-n', action="store_true", help='ignore .lldb file')
> +parser.add_argument('-x', dest='script', type=file, help='execute commands from file')
> +parser.add_argument("target", help="the program to debug")
> +args = parser.parse_args()
> +
> +
> +# Create a new debugger instance.
> +debugger = lldb.SBDebugger.Create()
> +debugger.SkipLLDBInitFiles(args.n)
> +
> +# Don't return from lldb function calls until the process stops.
> +debugger.SetAsync(False)
> +
> +# Create a target from a file and arch.
> +arch = os.popen("file "+args.target).read().split()[-1]
> +target = debugger.CreateTargetWithFileAndArch(args.target, arch)
> +
> +if not target:
> + print "Could not create target", args.target
> + sys.exit(1)
> +
> +if not args.script:
> + print "Interactive mode is not implemented."
> + sys.exit(1)
> +
> +import re
> +for command in args.script:
> + # Strip newline and whitespaces and split into words.
> + cmd = command[:-1].strip().split()
> + if not cmd:
> + continue
> +
> + print '> %s'% command[:-1]
> +
> + try:
> + if re.match('^r|(run)$', cmd[0]):
> + error = lldb.SBError()
> + launchinfo = lldb.SBLaunchInfo([])
> + launchinfo.SetWorkingDirectory(os.getcwd())
> + process = target.Launch(launchinfo, error)
> + print error
> + if not process or error.fail:
> + state = process.GetState()
> + print "State = %d" % state
> + print """
> +ERROR: Could not launch process.
> +NOTE: There are several reasons why this may happen:
> + * Root needs to run "DevToolsSecurity --enable".
> + * Older versions of lldb cannot launch more than one process simultaneously.
> +"""
> + sys.exit(1)
> +
> + elif re.match('^b|(break)$', cmd[0]) and len(cmd) == 2:
> + if re.match('[0-9]+', cmd[1]):
> + # b line
> + mainfile = target.FindFunctions('main')[0].compile_unit.file
> + print target.BreakpointCreateByLocation(mainfile, int(cmd[1]))
> + else:
> + # b file:line
> + file, line = cmd[1].split(':')
> + print target.BreakpointCreateByLocation(file, int(line))
> +
> + elif re.match('^ptype$', cmd[0]) and len(cmd) == 2:
> + # GDB's ptype has multiple incarnations depending on its
> + # argument (global variable, function, type). The definition
> + # here is for looking up the signature of a function and only
> + # if that fails it looks for a type with that name.
> + # Type lookup in LLDB would be "image lookup --type".
> + for elem in target.FindFunctions(cmd[1]):
> + print elem.function.type
> + continue
> + print target.FindFirstType(cmd[1])
> +
> + elif re.match('^po$', cmd[0]) and len(cmd) > 1:
> + try:
> + opts = lldb.SBExpressionOptions()
> + opts.SetFetchDynamicValue(True)
> + opts.SetCoerceResultToId(True)
> + print target.EvaluateExpression(' '.join(cmd[1:]), opts)
> + except:
> + # FIXME: This is a fallback path for the lab.llvm.org
> + # buildbot running OS X 10.7; it should be removed.
> + thread = process.GetThreadAtIndex(0)
> + frame = thread.GetFrameAtIndex(0)
> + print frame.EvaluateExpression(' '.join(cmd[1:]))
> +
> + elif re.match('^p|(print)$', cmd[0]) and len(cmd) > 1:
> + thread = process.GetThreadAtIndex(0)
> + frame = thread.GetFrameAtIndex(0)
> + print frame.EvaluateExpression(' '.join(cmd[1:]))
> +
> + elif re.match('^n|(next)$', cmd[0]):
> + thread = process.GetThreadAtIndex(0)
> + thread.StepOver()
> +
> + elif re.match('^q|(quit)$', cmd[0]):
> + sys.exit(0)
> +
> + else:
> + print debugger.HandleCommand(' '.join(cmd))
> +
> + except SystemExit:
> + lldb.SBDebugger_Terminate()
> + raise
> + except:
> + print 'Could not handle the command "%s"' % ' '.join(cmd)
> +
>
> Added: debuginfo-tests/trunk/tests/nested-struct.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/nested-struct.cpp?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/nested-struct.cpp (added)
> +++ debuginfo-tests/trunk/tests/nested-struct.cpp Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,21 @@
> +// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> +// RUN: %test_debuginfo %s %t.o
> +// Radar 9440721
> +// If debug info for my_number() is emitted outside function foo's scope
> +// then a debugger may not be able to handle it. At least one version of
> +// gdb crashes in such cases.
> +
> +// DEBUGGER: ptype foo
> +// CHECK: int (void)
> +
> +int foo() {
> + struct Local {
> + static int my_number() {
> + return 42;
> + }
> + };
> +
> + int i = 0;
> + i = Local::my_number();
> + return i + 1;
> +}
>
> Added: debuginfo-tests/trunk/tests/nrvo-string.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/nrvo-string.cpp?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/nrvo-string.cpp (added)
> +++ debuginfo-tests/trunk/tests/nrvo-string.cpp Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,27 @@
> +// This ensures that DW_OP_deref is inserted when necessary, such as when NRVO
> +// of a string object occurs in C++.
> +//
> +// RUN: %clangxx -O0 -fno-exceptions %target_itanium_abi_host_triple %s -o %t.out -g
> +// RUN: %test_debuginfo %s %t.out
> +// RUN: %clangxx -O1 -fno-exceptions %target_itanium_abi_host_triple %s -o %t.out -g
> +// RUN: %test_debuginfo %s %t.out
> +//
> +// PR34513
> +
> +struct string {
> + string() {}
> + string(int i) : i(i) {}
> + ~string() {}
> + int i = 0;
> +};
> +string get_string() {
> + string unused;
> + string result = 3;
> +// DEBUGGER: break 21
> + return result;
> +}
> +int main() { get_string(); }
> +
> +// DEBUGGER: r
> +// DEBUGGER: print result.i
> +// CHECK: = 3
>
> Added: debuginfo-tests/trunk/tests/safestack.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/safestack.c?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/safestack.c (added)
> +++ debuginfo-tests/trunk/tests/safestack.c Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,51 @@
> +// RUN: %clang %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=safe-stack
> +// RUN: %test_debuginfo %s %t.out
> +// REQUIRES: not_asan
> +// Zorg configures the ASAN stage2 bots to not build the
> +// safestack compiler-rt. Only run this test on
> +// non-asanified configurations.
> +
> +struct S {
> + int a[8];
> +};
> +
> +int f(struct S s, unsigned i);
> +
> +int main(int argc, const char **argv) {
> + struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
> + // DEBUGGER: break 17
> + f(s, 4);
> + // DEBUGGER: break 19
> + return 0;
> +}
> +
> +int f(struct S s, unsigned i) {
> + // DEBUGGER: break 24
> + return s.a[i];
> +}
> +
> +// DEBUGGER: r
> +// DEBUGGER: p s
> +// CHECK: a =
> +// DEBUGGER: p s.a[0]
> +// CHECK: = 0
> +// DEBUGGER: p s.a[1]
> +// CHECK: = 1
> +// DEBUGGER: p s.a[7]
> +// CHECK: = 7
> +// DEBUGGER: c
> +// DEBUGGER: p s
> +// CHECK: a =
> +// DEBUGGER: p s.a[0]
> +// CHECK: = 0
> +// DEBUGGER: p s.a[1]
> +// CHECK: = 1
> +// DEBUGGER: p s.a[7]
> +// DEBUGGER: c
> +// DEBUGGER: p s
> +// CHECK: a =
> +// DEBUGGER: p s.a[0]
> +// CHECK: = 0
> +// DEBUGGER: p s.a[1]
> +// CHECK: = 1
> +// DEBUGGER: p s.a[7]
>
> Added: debuginfo-tests/trunk/tests/sret.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/sret.cpp?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/sret.cpp (added)
> +++ debuginfo-tests/trunk/tests/sret.cpp Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,71 @@
> +// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> +// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
> +// RUN: %test_debuginfo %s %t.out
> +// Radar 8775834
> +// DEBUGGER: break 62
> +// DEBUGGER: r
> +// DEBUGGER: p a
> +// CHECK: ${{[0-9]+}} =
> +// LLDB does not print artificial members.
> +// CHECK: {{(_vptr\$A =)?.*}}m_int = 12
> +
> +class A
> +{
> +public:
> + A (int i=0);
> + A (const A& rhs);
> + const A&
> + operator= (const A& rhs);
> + virtual ~A() {}
> +
> + int get_int();
> +
> +protected:
> + int m_int;
> +};
> +
> +A::A (int i) :
> + m_int(i)
> +{
> +}
> +
> +A::A (const A& rhs) :
> + m_int (rhs.m_int)
> +{
> +}
> +
> +const A &
> +A::operator =(const A& rhs)
> +{
> + m_int = rhs.m_int;
> + return *this;
> +}
> +
> +int A::get_int()
> +{
> + return m_int;
> +}
> +
> +class B
> +{
> +public:
> + B () {}
> +
> + A AInstance();
> +};
> +
> +A
> +B::AInstance()
> +{
> + A a(12);
> + return a;
> +}
> +
> +int main (int argc, char const *argv[])
> +{
> + B b;
> + int return_val = b.AInstance().get_int();
> +
> + A a(b.AInstance());
> + return return_val;
> +}
>
> Added: debuginfo-tests/trunk/tests/stack-var.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/stack-var.c?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/stack-var.c (added)
> +++ debuginfo-tests/trunk/tests/stack-var.c Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,18 @@
> +// RUN: %clang %target_itanium_abi_host_triple %s -O -o %t.out -g
> +// RUN: %test_debuginfo %s %t.out
> +
> +void __attribute__((noinline, optnone)) bar(int *test) {}
> +int main() {
> + int test;
> + test = 23;
> + // DEBUGGER: break 12
> + // DEBUGGER: r
> + // DEBUGGER: p test
> + // CHECK: = 23
> + bar(&test);
> + // DEBUGGER: break 17
> + // DEBUGGER: c
> + // DEBUGGER: p test
> + // CHECK: = 23
> + return test;
> +}
>
> Added: debuginfo-tests/trunk/tests/static-member-2.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/static-member-2.cpp?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/static-member-2.cpp (added)
> +++ debuginfo-tests/trunk/tests/static-member-2.cpp Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,39 @@
> +// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -o %t -c
> +// RUN: %clangxx %target_itanium_abi_host_triple %t -o %t.out
> +// RUN: %test_debuginfo %s %t.out
> +
> +// FIXME: LLDB finds the wrong symbol for "C". rdar://problem/14933867
> +// XFAIL: darwin
> +
> +// DEBUGGER: delete breakpoints
> +// DEBUGGER: break static-member.cpp:33
> +// DEBUGGER: r
> +// DEBUGGER: ptype C
> +// CHECK: {{struct|class}} C {
> +// CHECK: static const int a;
> +// CHECK-NEXT: static int b;
> +// CHECK-NEXT: static int c;
> +// CHECK-NEXT: int d;
> +// CHECK-NEXT: }
> +// DEBUGGER: p C::a
> +// CHECK: ${{[0-9]}} = 4
> +// DEBUGGER: p C::c
> +// CHECK: ${{[0-9]}} = 15
> +
> +// PR14471, PR14734
> +
> +class C {
> +public:
> + const static int a = 4;
> + static int b;
> + static int c;
> + int d;
> +};
> +
> +int C::c = 15;
> +const int C::a;
> +
> +int main() {
> + C instance_C;
> + return C::a;
> +}
>
> Added: debuginfo-tests/trunk/tests/static-member.cpp
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/static-member.cpp?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/static-member.cpp (added)
> +++ debuginfo-tests/trunk/tests/static-member.cpp Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,36 @@
> +// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -o %t -c
> +// RUN: %clangxx %target_itanium_abi_host_triple %t -o %t.out
> +// RUN: %test_debuginfo %s %t.out
> +
> +// DEBUGGER: delete breakpoints
> +// DEBUGGER: break static-member.cpp:33
> +// DEBUGGER: r
> +// DEBUGGER: ptype MyClass
> +// CHECK: {{struct|class}} MyClass {
> +// CHECK: static const int a;
> +// CHECK-NEXT: static int b;
> +// CHECK-NEXT: static int c;
> +// CHECK-NEXT: int d;
> +// CHECK-NEXT: }
> +// DEBUGGER: p MyClass::a
> +// CHECK: ${{[0-9]}} = 4
> +// DEBUGGER: p MyClass::c
> +// CHECK: ${{[0-9]}} = 15
> +
> +// PR14471, PR14734
> +
> +class MyClass {
> +public:
> + const static int a = 4;
> + static int b;
> + static int c;
> + int d;
> +};
> +
> +int MyClass::c = 15;
> +const int MyClass::a;
> +
> +int main() {
> + MyClass instance_MyClass;
> + return MyClass::a;
> +}
>
> Added: debuginfo-tests/trunk/tests/vla.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/tests/vla.c?rev=318435&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/tests/vla.c (added)
> +++ debuginfo-tests/trunk/tests/vla.c Thu Nov 16 10:26:20 2017
> @@ -0,0 +1,24 @@
> +// This test case verifies the debug location for variable-length arrays.
> +// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> +// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out
> +// RUN: %test_debuginfo %s %t.out
> +//
> +// DEBUGGER: break 18
> +// DEBUGGER: r
> +// DEBUGGER: p vla[0]
> +// CHECK: 23
> +// DEBUGGER: p vla[1]
> +// CHECK: 22
> +
> +void init_vla(int size) {
> + int i;
> + int vla[size];
> + for (i = 0; i < size; i++)
> + vla[i] = size-i;
> + vla[0] = size; // line 18
> +}
> +
> +int main(int argc, const char **argv) {
> + init_vla(23);
> + return 0;
> +}
>
> Removed: debuginfo-tests/trunk/vla.c
> URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/vla.c?rev=318434&view=auto
> ==============================================================================
> --- debuginfo-tests/trunk/vla.c (original)
> +++ debuginfo-tests/trunk/vla.c (removed)
> @@ -1,24 +0,0 @@
> -// This test case verifies the debug location for variable-length arrays.
> -// RUN: %clang %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
> -// RUN: %clang %target_itanium_abi_host_triple %t.o -o %t.out
> -// RUN: %test_debuginfo %s %t.out
> -//
> -// DEBUGGER: break 18
> -// DEBUGGER: r
> -// DEBUGGER: p vla[0]
> -// CHECK: 23
> -// DEBUGGER: p vla[1]
> -// CHECK: 22
> -
> -void init_vla(int size) {
> - int i;
> - int vla[size];
> - for (i = 0; i < size; i++)
> - vla[i] = size-i;
> - vla[0] = size; // line 18
> -}
> -
> -int main(int argc, const char **argv) {
> - init_vla(23);
> - return 0;
> -}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171116/7d1cf972/attachment-0001.html>
More information about the llvm-commits
mailing list