diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-05-22 22:03:22 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-05-22 22:03:22 +0000 |
commit | d59a5bd0ab7821a643c540df8c84c70fef76a1c2 (patch) | |
tree | c7f9cc44492ec612a7b7b3e2d32c76535f881340 | |
parent | b5ff6bfaf4bff6c70042600ad4070518440cec4a (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.h | 25 |
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. |