view gcc/testsuite/g++.dg/template/ptrmem30.C @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 04ced10e8804
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()>();
}