diff options
author | Jeremy Morse <jeremy.morse@sony.com> | 2019-10-31 13:41:24 +0000 |
---|---|---|
committer | Jeremy Morse <jeremy.morse@sony.com> | 2019-10-31 13:49:47 +0000 |
commit | f78c236efda85af1e526ac35ed535ef4786450e3 (patch) | |
tree | 1ff1609178e085f58b46dfcbce21fd6b2ef40025 /debuginfo-tests/llgdb-tests/nrvo-string.cpp | |
parent | efacf2ce55d698e5df8173f0d4dacbc7d3c7fd34 (diff) | |
download | bcm5719-llvm-f78c236efda85af1e526ac35ed535ef4786450e3.tar.gz bcm5719-llvm-f78c236efda85af1e526ac35ed535ef4786450e3.zip |
Import Dexter to debuginfo-tests
Dexter (Debug Experience Tester) is a test-driver for our debug info
integration tests, reading a set of debug experience expectations and
comparing them with the actual behaviour of a program under a debugger.
More about Dexter can be found in the RFC:
http://lists.llvm.org/pipermail/llvm-dev/2019-October/135773.html
and the phab review in D68708. Not all the debuginfo tests have been
transformed into Dexter tests, and we look forwards to doing that
incrementally.
This commit mostly aims to flush out buildbots that are running
debuginfo-tests but don't have python 3 installed, possibly
green-dragon and some windows bots.
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 00000000000..ba8d9d42f6f --- /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 |