/* { 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); | |
} | |