Modify begin()/end() for AsmStmt iterators to handle the case when Exprs.empty()

is true. Because of recent changes to llvm::SmallVector, using these iterators
when Exprs was empty would cause an assertion failure.

This fixes: PR 4245.

llvm-svn: 72286
This commit is contained in:
Ted Kremenek 2009-05-22 22:03:22 +00:00
parent 9069d890e8
commit ed28b6d028
1 changed files with 17 additions and 8 deletions

View File

@ -1161,30 +1161,39 @@ public:
typedef ConstExprIterator const_inputs_iterator;
inputs_iterator begin_inputs() {
return &Exprs[0] + NumOutputs;
return Exprs.empty() ? NULL : &Exprs[0] + NumOutputs;
}
inputs_iterator end_inputs() {
return &Exprs[0] + NumOutputs + NumInputs;
return Exprs.empty() ? NULL : &Exprs[0] + NumOutputs + NumInputs;
}
const_inputs_iterator begin_inputs() const {
return &Exprs[0] + NumOutputs;
return Exprs.empty() ? NULL : &Exprs[0] + NumOutputs;
}
const_inputs_iterator end_inputs() const {
return &Exprs[0] + NumOutputs + NumInputs;}
return Exprs.empty() ? NULL : &Exprs[0] + NumOutputs + NumInputs;
}
// Output expr iterators.
typedef ExprIterator outputs_iterator;
typedef ConstExprIterator const_outputs_iterator;
outputs_iterator begin_outputs() { return &Exprs[0]; }
outputs_iterator end_outputs() { return &Exprs[0] + NumOutputs; }
outputs_iterator begin_outputs() {
return Exprs.empty() ? NULL : &Exprs[0];
}
outputs_iterator end_outputs() {
return Exprs.empty() ? NULL : &Exprs[0] + NumOutputs;
}
const_outputs_iterator begin_outputs() const { return &Exprs[0]; }
const_outputs_iterator end_outputs() const { return &Exprs[0] + NumOutputs; }
const_outputs_iterator begin_outputs() const {
return Exprs.empty() ? NULL : &Exprs[0];
}
const_outputs_iterator end_outputs() const {
return Exprs.empty() ? NULL : &Exprs[0] + NumOutputs;
}
// Input name iterator.