blob: 6294d023d519aee351872b0a212e4b089fbf3cc3 [file] [log] [blame]
// { dg-do compile { target c++11 } }
// { dg-options "-g -gno-strict-dwarf -dA" }
// { dg-final { scan-assembler-times " DW_AT_reference" 5 } }
// { dg-final { scan-assembler-times " DW_AT_rvalue_reference" 5 } }
// { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_subroutine_type" 6 } }
// { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_ptr_to_member_type" 7 } }
// { dg-final { scan-assembler-times " DW_AT_use_location" 1 } }
struct S
{
void foo1 ();
void bar1 () &;
void baz1 () &&;
void foo2 () const;
void bar2 () const &;
void baz2 () const &&;
void foo3 () const;
void bar3 () const &;
void baz3 () const &&;
int d;
};
void
test ()
{
S s;
auto o1 = &S::foo1;
auto r1 = &S::bar1;
auto z1 = &S::baz1;
auto o2 = &S::foo2;
auto r2 = &S::bar2;
auto z2 = &S::baz2;
auto o3 = &S::foo3;
auto r3 = &S::bar3;
auto z3 = &S::baz3;
auto d1 = &S::d;
void (S::*o4) () const;
o4 = &S::foo3;
void (S::*r4) () const &;
r4 = &S::bar3;
void (S::*z4) () const &&;
z4 = &S::baz3;
(s.*o1) ();
(s.*r1) ();
(S ().*z1) ();
(s.*o2) ();
(s.*r2) ();
(S ().*z2) ();
(s.*o3) ();
(s.*r3) ();
(S ().*z3) ();
(s.*o4) ();
(s.*r4) ();
(S ().*z4) ();
s.*d1 = 2;
}