summaryrefslogtreecommitdiffstats
path: root/debuginfo-tests/llgdb-tests/nrvo-string.cpp
diff options
context:
space:
mode:
authorJeremy Morse <jeremy.morse@sony.com>2019-10-31 13:41:24 +0000
committerJeremy Morse <jeremy.morse@sony.com>2019-10-31 13:49:47 +0000
commitf78c236efda85af1e526ac35ed535ef4786450e3 (patch)
tree1ff1609178e085f58b46dfcbce21fd6b2ef40025 /debuginfo-tests/llgdb-tests/nrvo-string.cpp
parentefacf2ce55d698e5df8173f0d4dacbc7d3c7fd34 (diff)
downloadbcm5719-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.cpp52
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
OpenPOWER on IntegriCloud