summaryrefslogtreecommitdiff
path: root/debuginfo-tests/sret.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2017-11-21 01:20:28 +0000
committerZachary Turner <zturner@google.com>2017-11-21 01:20:28 +0000
commit178efe7379d37161b54dbe37628bd5ddd4f1758d (patch)
tree83934b838f930014c9b0404e6395437778d2e0b8 /debuginfo-tests/sret.cpp
parent995abdefff66191a270b8dda6251df2574256bbf (diff)
Re-revert "Refactor debuginfo-tests."
This is still breaking greendragon. At this point I give up until someone can fix the greendragon bots, and I will probably abandon this effort in favor of using a private github repository.
Diffstat (limited to 'debuginfo-tests/sret.cpp')
-rw-r--r--debuginfo-tests/sret.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/debuginfo-tests/sret.cpp b/debuginfo-tests/sret.cpp
new file mode 100644
index 00000000000..3c304e2f04a
--- /dev/null
+++ b/debuginfo-tests/sret.cpp
@@ -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;
+}