| /* { dg-do compile } */ | |
| /* { dg-options "-Wall -O3" } */ | |
| typedef long unsigned int size_t; | |
| inline void | |
| fill (int *p, size_t n, int) | |
| { | |
| while (n--) | |
| *p++ = 0; | |
| } | |
| struct B | |
| { | |
| int* p0, *p1, *p2; | |
| size_t size () const { | |
| return size_t (p1 - p0); | |
| } | |
| void resize (size_t n) { | |
| if (n > size()) | |
| append (n - size()); | |
| } | |
| void append (size_t n) | |
| { | |
| if (size_t (p2 - p1) >= n) { | |
| fill (p1, n, 0); | |
| } | |
| } | |
| }; | |
| void foo (B &b) | |
| { | |
| if (b.size () != 0) | |
| b.resize (b.size () - 1); | |
| } | |