// PR c++/29911 (9381)
// { dg-do run { target i?86-*-* x86_64-*-* } }
// { dg-require-effective-target c++11 }

extern "C" int printf(const char *, ...);

void *save_this;
int *save_addr1, *save_addr2;

int fail;

struct Base
{
  __attribute((regparm(3))) void
  set(int *addr1, int *addr2)
  {
    if (this != save_this)
      {
	++fail;
	printf("error! this == %p, should be %p\n", this, save_this);
      }
    if (addr1 != save_addr1)
      {
	++fail;
	printf("error! addr1 == %p, should be %p\n", addr1, save_addr1);
      }
    if (addr2 != save_addr2)
      {
	++fail;
	printf("error! addr2 == %p, should be %p\n", addr2, save_addr1);
      }
  }
};

int main()
{
  void (__attribute((regparm(3))) Base::* pfm)(int *, int *) = &Base::set;
  __typeof (&Base::set) pfm2 = &Base::set;
  decltype (&Base::set) pfm3 = &Base::set;
  auto pfm4 = &Base::set;

  Base obj; save_this = &obj;
  int x, y; save_addr1 = &x; save_addr2 = &y;

  (obj.* pfm) (&x, &y);
  (obj.* pfm2) (&x, &y);
  (obj.* pfm3) (&x, &y);
  (obj.* pfm4) (&x, &y);

  return fail;
}
