From ed28b6d0280d49da5d3d69ed823e812dcbc2798b Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Fri, 22 May 2009 22:03:22 +0000 Subject: [PATCH] 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 --- clang/include/clang/AST/Stmt.h | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/clang/include/clang/AST/Stmt.h b/clang/include/clang/AST/Stmt.h index 57b420870fff..ffd2a742df3a 100644 --- a/clang/include/clang/AST/Stmt.h +++ b/clang/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.