diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/other/pr29610.C')
-rw-r--r-- | gcc/testsuite/g++.dg/other/pr29610.C | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/other/pr29610.C b/gcc/testsuite/g++.dg/other/pr29610.C new file mode 100644 index 000000000..6566fb9a2 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr29610.C @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -funswitch-loops" } */ + +struct __normal_iterator +{ + typedef int*const *_Iterator; + int*const * _M_current; + __normal_iterator(const _Iterator& __i) : _M_current(__i){} + const _Iterator& base() const {} +}; +struct string { ~string(){} }; +struct vector +{ + int** _M_finish; + __normal_iterator end() const { return __normal_iterator (_M_finish); } + int size() const { return end().base() - end().base(); } +}; +class Painter +{ + int redraw_window(void); + typedef int (Painter::* SliceWindowFunc)(void); + int for_each(vector&, SliceWindowFunc); + void tcl_command(void); +}; +inline int Painter::for_each(vector &layout, SliceWindowFunc func) +{ + for (unsigned int window = 0; window < layout.size();++window) + (this->*func)(); +} +int t; +int Painter::redraw_window(void) {t = 1;} +string t2(int); +vector *g(const string&); +void Painter::tcl_command(void) +{ + for_each(*g(t2(2)), &Painter::redraw_window); +} + |