view gcc/testsuite/g++.dg/template/ptrmem30.C @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line source

// PR c++/70096
// { dg-do run }

int data_read;

struct Holder
{
  void foo () { data_read = data; }
  int data;
};

void
poison_stack ()
{
  volatile char a[256];
  __builtin_memset ((void *)a, 0xa, sizeof a);
}

template <typename F>
void test1 ()
{
  Holder h;
  h.data = 42;
  F Holder::*fptr = &Holder::foo;
  (h.*fptr)();
}

template <typename F>
void test2 ()
{
  Holder h;
  h.data = 42;
  F Holder::*fptr1 = &Holder::foo;
  F Holder::*fptr2 = fptr1;
  (h.*fptr2)();
}


int main ()
{
  poison_stack ();
  test1<void()>();
  poison_stack ();
  test2<void()>();
}