diff options
author | Jeremy Morse <jeremy.morse@sony.com> | 2019-10-31 16:51:53 +0000 |
---|---|---|
committer | Jeremy Morse <jeremy.morse@sony.com> | 2019-10-31 16:51:53 +0000 |
commit | 984fad243d179564df31c5f9531a52442e24581a (patch) | |
tree | aba85a27f1596d456079f6f5eb69e09408730b49 /debuginfo-tests/llgdb-tests/nrvo-string.cpp | |
parent | 34f3c0fc44a5fd8a0f9186002749336e398837cf (diff) | |
download | llvm-984fad243d179564df31c5f9531a52442e24581a.tar.gz |
Reapply "Import Dexter to debuginfo-tests""
This reverts commit cb935f345683194e42e6e883d79c5a16479acd74.
Discussion in D68708 advises that green dragon is being briskly
refurbished, and it's good to have this patch up testing it.
Diffstat (limited to 'debuginfo-tests/llgdb-tests/nrvo-string.cpp')
-rw-r--r-- | debuginfo-tests/llgdb-tests/nrvo-string.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/debuginfo-tests/llgdb-tests/nrvo-string.cpp b/debuginfo-tests/llgdb-tests/nrvo-string.cpp new file mode 100644 index 000000000000..ba8d9d42f6f4 --- /dev/null +++ b/debuginfo-tests/llgdb-tests/nrvo-string.cpp @@ -0,0 +1,52 @@ +// 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 +volatile int sideeffect = 0; +void __attribute__((noinline)) stop() { sideeffect++; } + +struct string { + string() {} + string(int i) : i(i) {} + ~string() {} + int i = 0; +}; +string 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 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 |