Tests in the `cross-project-tests/debuginfo-tests/llgdb-tests` directory run gdb on non-darwin platforms. gdb versions less than 10.1 cannot parse the DWARF v5 emitted by clang, and DWARF v5 is now the default, so these tests fail on Linux with gdb versions less than 10.1. This patch lets us XFAIL the tests under these conditions. Add `gdb-clang-incompatibility` to the `available_features` in `cross-project-tests/lit.cfg.py` when clang's default DWARF version is 5 or greater and the gdb (if found) version is less than 10.1. Discourse discussion: https://llvm.discourse.group/t/gdb-10-1-cant-read-clangs-dwarf-v5/6035 Reviewed By: jmorse Differential Revision: https://reviews.llvm.org/D118468
53 lines
1.3 KiB
C++
53 lines
1.3 KiB
C++
// 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
|
|
// XFAIL: !system-darwin && gdb-clang-incompatibility
|
|
// PR34513
|
|
volatile int sideeffect = 0;
|
|
void __attribute__((noinline)) stop() { sideeffect++; }
|
|
|
|
struct string {
|
|
string() {}
|
|
string(int i) : i(i) {}
|
|
~string() {}
|
|
int i = 0;
|
|
};
|
|
string __attribute__((noinline)) get_string() {
|
|
string unused;
|
|
string result = 3;
|
|
// DEBUGGER: break 23
|
|
stop();
|
|
return result;
|
|
}
|
|
void some_function(int) {}
|
|
struct string2 {
|
|
string2() = default;
|
|
string2(string2 &&other) { i = other.i; }
|
|
int i;
|
|
};
|
|
string2 __attribute__((noinline)) get_string2() {
|
|
string2 result;
|
|
result.i = 5;
|
|
some_function(result.i);
|
|
// Test that the debugger can get the value of result after another
|
|
// function is called.
|
|
// DEBUGGER: break 39
|
|
stop();
|
|
return result;
|
|
}
|
|
int main() {
|
|
get_string();
|
|
get_string2();
|
|
}
|
|
|
|
// DEBUGGER: r
|
|
// DEBUGGER: print result.i
|
|
// CHECK: = 3
|
|
// DEBUGGER: c
|
|
// DEBUGGER: print result.i
|
|
// CHECK: = 5
|