Fix some sporadic segfaults that are triggered when SmallVector's heap

storage lands near the end of the available address space. In the expression
Begin+N > Capacity, the Begin+N was overflowing. Fix this by replacing it
by with an expression that doesn't involve computation of an address
beyond the end of allocated memory.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37171 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2007-05-17 18:29:01 +00:00
parent e1e9bc7e09
commit df799afbec

View File

@ -147,7 +147,7 @@ public:
destroy_range(Begin+N, End);
End = Begin+N;
} else if (N > size()) {
if (Begin+N > Capacity)
if (Capacity-Begin < N)
grow(N);
construct_range(End, Begin+N, T());
End = Begin+N;
@ -159,7 +159,7 @@ public:
destroy_range(Begin+N, End);
End = Begin+N;
} else if (N > size()) {
if (Begin+N > Capacity)
if (Capacity-Begin < N)
grow(N);
construct_range(End, Begin+N, NV);
End = Begin+N;
@ -189,7 +189,7 @@ public:
void assign(unsigned NumElts, const T &Elt) {
clear();
if (Begin+NumElts > Capacity)
if (Capacity-Begin < NumElts)
grow(NumElts);
End = Begin+NumElts;
construct_range(Begin, End, Elt);