| /* { dg-do compile } */ | |
| /* { dg-options "-O3" } */ | |
| template <typename> struct A { | |
| unsigned _width, _height, _depth, _spectrum; | |
| template <typename t> A(t p1) { | |
| int a = p1.size(); | |
| if (a) { | |
| _width = p1._width; | |
| _depth = _height = _spectrum = p1._spectrum; | |
| } | |
| } | |
| long size() { return (long)_width * _height * _depth * _spectrum; } | |
| }; | |
| int d; | |
| void fn1(void *); | |
| A<int> *fn2(); | |
| void fn3() { | |
| int b; | |
| for (;;) { | |
| A<char> c(*fn2()); | |
| fn1(&c); | |
| if (d || !b) | |
| throw; | |
| } | |
| } | |