[debuginfo-tests] r318112 - Revert "Update test_debuginfo.pl script to point to new tree location."

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 13 15:33:29 PST 2017


Author: zturner
Date: Mon Nov 13 15:33:29 2017
New Revision: 318112

URL: http://llvm.org/viewvc/llvm-project?rev=318112&view=rev
Log:
Revert "Update test_debuginfo.pl script to point to new tree location."

This reverts the aforementioned patch and 2 subsequent follow-ups,
as some buildbots are still failing 2 tests because of it.
Investigation is ongoing into the cause of the failures.

Added:
    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
Removed:
    debuginfo-tests/trunk/CMakeLists.txt
    debuginfo-tests/trunk/lit.cfg.py
    debuginfo-tests/trunk/lit.site.cfg.py.in
    debuginfo-tests/trunk/tests/

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

Added: debuginfo-tests/trunk/aggregate-indirect-arg.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/aggregate-indirect-arg.cpp?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/aggregate-indirect-arg.cpp (added)
+++ debuginfo-tests/trunk/aggregate-indirect-arg.cpp Mon Nov 13 15:33:29 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/asan-blocks.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/asan-blocks.c?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/asan-blocks.c (added)
+++ debuginfo-tests/trunk/asan-blocks.c Mon Nov 13 15:33:29 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/asan.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/asan.c?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/asan.c (added)
+++ debuginfo-tests/trunk/asan.c Mon Nov 13 15:33:29 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/block_var.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/block_var.m?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/block_var.m (added)
+++ debuginfo-tests/trunk/block_var.m Mon Nov 13 15:33:29 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/blocks.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/blocks.m?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/blocks.m (added)
+++ debuginfo-tests/trunk/blocks.m Mon Nov 13 15:33:29 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/ctor.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/ctor.cpp?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/ctor.cpp (added)
+++ debuginfo-tests/trunk/ctor.cpp Mon Nov 13 15:33:29 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/dbg-arg.c
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/dbg-arg.c?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/dbg-arg.c (added)
+++ debuginfo-tests/trunk/dbg-arg.c Mon Nov 13 15:33:29 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/foreach.m
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/foreach.m?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/foreach.m (added)
+++ debuginfo-tests/trunk/foreach.m Mon Nov 13 15:33:29 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/forward-declare-class.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/forward-declare-class.cpp?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/forward-declare-class.cpp (added)
+++ debuginfo-tests/trunk/forward-declare-class.cpp Mon Nov 13 15:33:29 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;
+

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

Added: debuginfo-tests/trunk/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.local.cfg?rev=318112&view=auto
==============================================================================
--- debuginfo-tests/trunk/lit.local.cfg (added)
+++ debuginfo-tests/trunk/lit.local.cfg Mon Nov 13 15:33:29 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

Removed: debuginfo-tests/trunk/lit.site.cfg.py.in
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/lit.site.cfg.py.in?rev=318111&view=auto
==============================================================================
--- debuginfo-tests/trunk/lit.site.cfg.py.in (original)
+++ debuginfo-tests/trunk/lit.site.cfg.py.in (removed)
@@ -1,25 +0,0 @@
- 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")

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




More information about the llvm-commits mailing list