CodeGenSchedule: smallvector.push_back(smallvector[0]) is dangerous

The element passed to push_back is not copied before the vector reallocates.
The client needs to copy the element first before passing it to push_back.

No test case, will be tested by follow-up swift scheduler model change (it
segfaults without this change).

llvm-svn: 183459
This commit is contained in:
Arnold Schwaighofer 2013-06-06 23:23:14 +00:00
parent 0030362ed9
commit 3bd2524b60
1 changed files with 3 additions and 1 deletions

View File

@ -1172,7 +1172,9 @@ pushVariant(const TransVariant &VInfo, bool IsRead) {
unsigned OperIdx = RWSequences.size()-1;
// Make N-1 copies of this transition's last sequence.
for (unsigned i = 1, e = SelectedRWs.size(); i != e; ++i) {
RWSequences.push_back(RWSequences[OperIdx]);
// Create a temporary copy the vector could reallocate.
SmallVector<unsigned, 4> Tmp = RWSequences[OperIdx];
RWSequences.push_back(Tmp);
}
// Push each of the N elements of the SelectedRWs onto a copy of the last
// sequence (split the current operand into N operands).