aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-05-22 22:03:22 +0000
committerTed Kremenek <kremenek@apple.com>2009-05-22 22:03:22 +0000
commitd59a5bd0ab7821a643c540df8c84c70fef76a1c2 (patch)
treec7f9cc44492ec612a7b7b3e2d32c76535f881340
parentb5ff6bfaf4bff6c70042600ad4070518440cec4a (diff)
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72286 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/AST/Stmt.h25
1 files changed, 17 insertions, 8 deletions
diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h
index 57b420870f..ffd2a742df 100644
--- a/include/clang/AST/Stmt.h
+++ b/include/clang/AST/Stmt.h
@@ -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.