11364750dSJames Henderson // RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
21364750dSJames Henderson // RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
31364750dSJames Henderson // RUN: %test_debuginfo %s %t.out
4*5257efdcSOCHyams // XFAIL: !system-darwin && gdb-clang-incompatibility
51364750dSJames Henderson // Radar 8775834
6*5257efdcSOCHyams // DEBUGGER: break 63
71364750dSJames Henderson // DEBUGGER: r
81364750dSJames Henderson // DEBUGGER: p a
91364750dSJames Henderson // CHECK: ${{[0-9]+}} =
101364750dSJames Henderson // LLDB does not print artificial members.
111364750dSJames Henderson // CHECK:  {{(_vptr\$A =)?.*}}m_int = 12
121364750dSJames Henderson 
131364750dSJames Henderson class A
141364750dSJames Henderson {
151364750dSJames Henderson public:
161364750dSJames Henderson     A (int i=0);
171364750dSJames Henderson     A (const A& rhs);
181364750dSJames Henderson     const A&
191364750dSJames Henderson     operator= (const A& rhs);
~A()201364750dSJames Henderson     virtual ~A() {}
211364750dSJames Henderson 
221364750dSJames Henderson     int get_int();
231364750dSJames Henderson 
241364750dSJames Henderson protected:
251364750dSJames Henderson     int m_int;
261364750dSJames Henderson };
271364750dSJames Henderson 
A(int i)281364750dSJames Henderson A::A (int i) :
291364750dSJames Henderson     m_int(i)
301364750dSJames Henderson {
311364750dSJames Henderson }
321364750dSJames Henderson 
A(const A & rhs)331364750dSJames Henderson A::A (const A& rhs) :
341364750dSJames Henderson     m_int (rhs.m_int)
351364750dSJames Henderson {
361364750dSJames Henderson }
371364750dSJames Henderson 
381364750dSJames Henderson const A &
operator =(const A & rhs)391364750dSJames Henderson A::operator =(const A& rhs)
401364750dSJames Henderson {
411364750dSJames Henderson     m_int = rhs.m_int;
421364750dSJames Henderson     return *this;
431364750dSJames Henderson }
441364750dSJames Henderson 
get_int()451364750dSJames Henderson int A::get_int()
461364750dSJames Henderson {
471364750dSJames Henderson     return m_int;
481364750dSJames Henderson }
491364750dSJames Henderson 
501364750dSJames Henderson class B
511364750dSJames Henderson {
521364750dSJames Henderson public:
B()531364750dSJames Henderson     B () {}
541364750dSJames Henderson 
551364750dSJames Henderson     A AInstance();
561364750dSJames Henderson };
571364750dSJames Henderson 
581364750dSJames Henderson A
AInstance()591364750dSJames Henderson B::AInstance()
601364750dSJames Henderson {
611364750dSJames Henderson     A a(12);
621364750dSJames Henderson     return a;
631364750dSJames Henderson }
641364750dSJames Henderson 
main(int argc,char const * argv[])651364750dSJames Henderson int main (int argc, char const *argv[])
661364750dSJames Henderson {
671364750dSJames Henderson     B b;
681364750dSJames Henderson     int return_val = b.AInstance().get_int();
691364750dSJames Henderson 
701364750dSJames Henderson     A a(b.AInstance());
711364750dSJames Henderson     return return_val;
721364750dSJames Henderson }
73