summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2015-07-18 17:09:36 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2015-07-18 17:09:36 +0000
commit5733e3512b833c48c77e95f18c7148e2a7042832 (patch)
treee53b0bdd71f1768353933e42e95b8a69ed67e7d4
parent8c81678dfa8e992d42b56012c9d8592908167fe5 (diff)
downloadbcm5719-llvm-5733e3512b833c48c77e95f18c7148e2a7042832.tar.gz
bcm5719-llvm-5733e3512b833c48c77e95f18c7148e2a7042832.zip
[AST] Remove StmtRange in favor of an iterator_range.
StmtRange was just a convenient wrapper for two StmtIterators before we had real range support. This removes some of the implicit conversions StmtRange had leading to slightly more verbose code but also should make more obvious what's going on. No functional change intended. llvm-svn: 242615
-rw-r--r--clang/include/clang/AST/Expr.h51
-rw-r--r--clang/include/clang/AST/ExprCXX.h70
-rw-r--r--clang/include/clang/AST/ExprObjC.h18
-rw-r--r--clang/include/clang/AST/OpenMPClause.h136
-rw-r--r--clang/include/clang/AST/Stmt.h40
-rw-r--r--clang/include/clang/AST/StmtIterator.h80
-rw-r--r--clang/include/clang/AST/StmtOpenMP.h2
-rw-r--r--clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp8
-rw-r--r--clang/lib/AST/Expr.cpp4
-rw-r--r--clang/lib/AST/Stmt.cpp2
-rw-r--r--clang/lib/AST/StmtPrinter.cpp11
-rw-r--r--clang/lib/Analysis/CFG.cpp3
-rw-r--r--clang/lib/Sema/SemaOpenMP.cpp8
13 files changed, 228 insertions, 205 deletions
diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h
index 24d09fb9afc..5ff0e7083a0 100644
--- a/clang/include/clang/AST/Expr.h
+++ b/clang/include/clang/AST/Expr.h
@@ -857,7 +857,9 @@ public:
return Loc;
}
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
/// The source expression of an opaque value expression is the
/// expression which originally generated the value. This is
@@ -1169,7 +1171,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
friend class ASTStmtReader;
friend class ASTStmtWriter;
@@ -1315,7 +1319,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
class CharacterLiteral : public Expr {
@@ -1362,7 +1368,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
class FloatingLiteral : public Expr, private APFloatStorage {
@@ -1424,7 +1432,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// ImaginaryLiteral - We support imaginary integer and floating point literals,
@@ -1619,7 +1629,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// ParenExpr - This represents a parethesized expression, e.g. "(1)". This
@@ -3397,7 +3409,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).
@@ -3676,7 +3690,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// VAArgExpr, used for the builtin function __builtin_va_arg.
@@ -3929,7 +3945,8 @@ public:
// Iterators
child_range children() {
// FIXME: This does not include the array filler expression.
- if (InitExprs.empty()) return child_range();
+ if (InitExprs.empty())
+ return child_range(child_iterator(), child_iterator());
return child_range(&InitExprs[0], &InitExprs[0] + InitExprs.size());
}
@@ -4306,7 +4323,9 @@ public:
SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
// In cases like:
@@ -4380,7 +4399,9 @@ public:
SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
@@ -4646,7 +4667,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2]
@@ -4948,7 +4971,9 @@ public:
assert(T->isDependentType() && "TypoExpr given a non-dependent type");
}
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
SourceLocation getLocStart() const LLVM_READONLY { return SourceLocation(); }
SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
};
diff --git a/clang/include/clang/AST/ExprCXX.h b/clang/include/clang/AST/ExprCXX.h
index cc185303ed7..b89508ed89d 100644
--- a/clang/include/clang/AST/ExprCXX.h
+++ b/clang/include/clang/AST/ExprCXX.h
@@ -457,7 +457,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief The null pointer literal (C++11 [lex.nullptr])
@@ -484,7 +486,9 @@ public:
return T->getStmtClass() == CXXNullPtrLiteralExprClass;
}
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief Implicit construction of a std::initializer_list<T> object from an
@@ -607,7 +611,8 @@ public:
// Iterators
child_range children() {
- if (isTypeOperand()) return child_range();
+ if (isTypeOperand())
+ return child_range(child_iterator(), child_iterator());
Stmt **begin = reinterpret_cast<Stmt**>(&Operand);
return child_range(begin, begin + 1);
}
@@ -749,7 +754,8 @@ public:
// Iterators
child_range children() {
- if (isTypeOperand()) return child_range();
+ if (isTypeOperand())
+ return child_range(child_iterator(), child_iterator());
Stmt **begin = reinterpret_cast<Stmt**>(&Operand);
return child_range(begin, begin + 1);
}
@@ -797,7 +803,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief A C++ throw-expression (C++ [except.throw]).
@@ -935,7 +943,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
friend class ASTStmtReader;
friend class ASTStmtWriter;
@@ -991,7 +1001,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
friend class ASTReader;
friend class ASTStmtReader;
@@ -1652,7 +1664,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief Represents a new-expression for memory allocation and constructor
@@ -2201,8 +2215,10 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
-
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
+
friend class ASTStmtReader;
friend class ASTStmtWriter;
@@ -2274,7 +2290,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
friend class ASTStmtReader;
};
@@ -2331,7 +2349,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
friend class ASTStmtReader;
};
@@ -2622,7 +2642,9 @@ public:
return getNameInfo().getLocEnd();
}
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
static bool classof(const Stmt *T) {
return T->getStmtClass() == UnresolvedLookupExprClass;
@@ -2785,7 +2807,9 @@ public:
return T->getStmtClass() == DependentScopeDeclRefExprClass;
}
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
friend class ASTStmtReader;
friend class ASTStmtWriter;
@@ -3222,7 +3246,8 @@ public:
// Iterators
child_range children() {
- if (isImplicitAccess()) return child_range();
+ if (isImplicitAccess())
+ return child_range(child_iterator(), child_iterator());
return child_range(&Base, &Base + 1);
}
@@ -3365,7 +3390,8 @@ public:
// Iterators
child_range children() {
- if (isImplicitAccess()) return child_range();
+ if (isImplicitAccess())
+ return child_range(child_iterator(), child_iterator());
return child_range(&Base, &Base + 1);
}
};
@@ -3592,7 +3618,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief Represents a reference to a non-type template parameter
@@ -3695,7 +3723,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief Represents a reference to a function parameter pack that has been
@@ -3762,7 +3792,9 @@ public:
return T->getStmtClass() == FunctionParmPackExprClass;
}
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief Represents a prvalue temporary that is written into memory so that
diff --git a/clang/include/clang/AST/ExprObjC.h b/clang/include/clang/AST/ExprObjC.h
index a7e82f9d93e..09ffc397c5f 100644
--- a/clang/include/clang/AST/ExprObjC.h
+++ b/clang/include/clang/AST/ExprObjC.h
@@ -82,7 +82,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// ObjCBoxedExpr - used for generalized expression boxing.
@@ -391,7 +393,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// ObjCSelectorExpr used for \@selector in Objective-C.
@@ -426,7 +430,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// ObjCProtocolExpr used for protocol expression in Objective-C.
@@ -466,7 +472,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
friend class ASTStmtReader;
friend class ASTStmtWriter;
@@ -715,7 +723,7 @@ public:
Stmt **begin = reinterpret_cast<Stmt**>(&Receiver); // hack!
return child_range(begin, begin+1);
}
- return child_range();
+ return child_range(child_iterator(), child_iterator());
}
private:
diff --git a/clang/include/clang/AST/OpenMPClause.h b/clang/include/clang/AST/OpenMPClause.h
index fcfa1dd4753..7d3fcf04236 100644
--- a/clang/include/clang/AST/OpenMPClause.h
+++ b/clang/include/clang/AST/OpenMPClause.h
@@ -57,9 +57,15 @@ public:
bool isImplicit() const { return StartLoc.isInvalid(); }
- StmtRange children();
- ConstStmtRange children() const {
- return const_cast<OMPClause *>(this)->children();
+ typedef StmtIterator child_iterator;
+ typedef ConstStmtIterator const_child_iterator;
+ typedef llvm::iterator_range<child_iterator> child_range;
+ typedef llvm::iterator_range<const_child_iterator> const_child_range;
+
+ child_range children();
+ const_child_range children() const {
+ auto Children = const_cast<OMPClause *>(this)->children();
+ return const_child_range(Children.begin(), Children.end());
}
static bool classof(const OMPClause *) { return true; }
};
@@ -193,7 +199,7 @@ public:
return T->getClauseKind() == OMPC_if;
}
- StmtRange children() { return StmtRange(&Condition, &Condition + 1); }
+ child_range children() { return child_range(&Condition, &Condition + 1); }
};
/// \brief This represents 'final' clause in the '#pragma omp ...' directive.
@@ -246,7 +252,7 @@ public:
return T->getClauseKind() == OMPC_final;
}
- StmtRange children() { return StmtRange(&Condition, &Condition + 1); }
+ child_range children() { return child_range(&Condition, &Condition + 1); }
};
/// \brief This represents 'num_threads' clause in the '#pragma omp ...'
@@ -300,7 +306,7 @@ public:
return T->getClauseKind() == OMPC_num_threads;
}
- StmtRange children() { return StmtRange(&NumThreads, &NumThreads + 1); }
+ child_range children() { return child_range(&NumThreads, &NumThreads + 1); }
};
/// \brief This represents 'safelen' clause in the '#pragma omp ...'
@@ -356,7 +362,7 @@ public:
return T->getClauseKind() == OMPC_safelen;
}
- StmtRange children() { return StmtRange(&Safelen, &Safelen + 1); }
+ child_range children() { return child_range(&Safelen, &Safelen + 1); }
};
/// \brief This represents 'collapse' clause in the '#pragma omp ...'
@@ -412,7 +418,7 @@ public:
return T->getClauseKind() == OMPC_collapse;
}
- StmtRange children() { return StmtRange(&NumForLoops, &NumForLoops + 1); }
+ child_range children() { return child_range(&NumForLoops, &NumForLoops + 1); }
};
/// \brief This represents 'default' clause in the '#pragma omp ...' directive.
@@ -481,7 +487,9 @@ public:
return T->getClauseKind() == OMPC_default;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'proc_bind' clause in the '#pragma omp ...'
@@ -552,7 +560,9 @@ public:
return T->getClauseKind() == OMPC_proc_bind;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'schedule' clause in the '#pragma omp ...' directive.
@@ -676,8 +686,8 @@ public:
return T->getClauseKind() == OMPC_schedule;
}
- StmtRange children() {
- return StmtRange(&ChunkSizes[CHUNK_SIZE], &ChunkSizes[CHUNK_SIZE] + 1);
+ child_range children() {
+ return child_range(&ChunkSizes[CHUNK_SIZE], &ChunkSizes[CHUNK_SIZE] + 1);
}
};
@@ -707,7 +717,9 @@ public:
return T->getClauseKind() == OMPC_ordered;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'nowait' clause in the '#pragma omp ...' directive.
@@ -736,7 +748,9 @@ public:
return T->getClauseKind() == OMPC_nowait;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'untied' clause in the '#pragma omp ...' directive.
@@ -765,7 +779,9 @@ public:
return T->getClauseKind() == OMPC_untied;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'mergeable' clause in the '#pragma omp ...'
@@ -795,7 +811,9 @@ public:
return T->getClauseKind() == OMPC_mergeable;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'read' clause in the '#pragma omp atomic' directive.
@@ -823,7 +841,9 @@ public:
return T->getClauseKind() == OMPC_read;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'write' clause in the '#pragma omp atomic' directive.
@@ -852,7 +872,9 @@ public:
return T->getClauseKind() == OMPC_write;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'update' clause in the '#pragma omp atomic'
@@ -882,7 +904,9 @@ public:
return T->getClauseKind() == OMPC_update;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'capture' clause in the '#pragma omp atomic'
@@ -912,7 +936,9 @@ public:
return T->getClauseKind() == OMPC_capture;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents 'seq_cst' clause in the '#pragma omp atomic'
@@ -942,7 +968,9 @@ public:
return T->getClauseKind() == OMPC_seq_cst;
}
- StmtRange children() { return StmtRange(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This represents clause 'private' in the '#pragma omp ...' directives.
@@ -1026,9 +1054,9 @@ public:
getPrivateCopies().end());
}
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -1147,9 +1175,9 @@ public:
return inits_const_range(getInits().begin(), getInits().end());
}
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -1332,9 +1360,9 @@ public:
getAssignmentOps().end());
}
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -1391,9 +1419,9 @@ public:
///
static OMPSharedClause *CreateEmpty(const ASTContext &C, unsigned N);
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -1571,9 +1599,9 @@ public:
getReductionOps().end());
}
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -1750,9 +1778,9 @@ public:
return finals_const_range(getFinals().begin(), getFinals().end());
}
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -1835,9 +1863,9 @@ public:
/// \brief Returns alignment.
const Expr *getAlignment() const { return *varlist_end(); }
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -1993,9 +2021,9 @@ public:
getAssignmentOps().end());
}
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -2138,9 +2166,9 @@ public:
getAssignmentOps().end());
}
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -2202,9 +2230,9 @@ public:
///
static OMPFlushClause *CreateEmpty(const ASTContext &C, unsigned N);
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
@@ -2290,9 +2318,9 @@ public:
/// \brief Get colon location.
SourceLocation getColonLoc() const { return ColonLoc; }
- StmtRange children() {
- return StmtRange(reinterpret_cast<Stmt **>(varlist_begin()),
- reinterpret_cast<Stmt **>(varlist_end()));
+ child_range children() {
+ return child_range(reinterpret_cast<Stmt **>(varlist_begin()),
+ reinterpret_cast<Stmt **>(varlist_end()));
}
static bool classof(const OMPClause *T) {
diff --git a/clang/include/clang/AST/Stmt.h b/clang/include/clang/AST/Stmt.h
index 7ab698b4bd3..eb0bfd3bb56 100644
--- a/clang/include/clang/AST/Stmt.h
+++ b/clang/include/clang/AST/Stmt.h
@@ -394,19 +394,20 @@ public:
typedef StmtIterator child_iterator;
typedef ConstStmtIterator const_child_iterator;
- typedef StmtRange child_range;
- typedef ConstStmtRange const_child_range;
+ typedef llvm::iterator_range<child_iterator> child_range;
+ typedef llvm::iterator_range<const_child_iterator> const_child_range;
child_range children();
const_child_range children() const {
- return const_cast<Stmt*>(this)->children();
+ auto Children = const_cast<Stmt *>(this)->children();
+ return const_child_range(Children.begin(), Children.end());
}
- child_iterator child_begin() { return children().first; }
- child_iterator child_end() { return children().second; }
+ child_iterator child_begin() { return children().begin(); }
+ child_iterator child_end() { return children().end(); }
- const_child_iterator child_begin() const { return children().first; }
- const_child_iterator child_end() const { return children().second; }
+ const_child_iterator child_begin() const { return children().begin(); }
+ const_child_iterator child_end() const { return children().end(); }
/// \brief Produce a unique representation of the given statement.
///
@@ -527,7 +528,9 @@ public:
return T->getStmtClass() == NullStmtClass;
}
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
friend class ASTStmtReader;
friend class ASTStmtWriter;
@@ -626,7 +629,8 @@ public:
}
const_child_range children() const {
- return child_range(Body, Body + CompoundStmtBits.NumStmts);
+ return const_child_range(child_iterator(Body),
+ child_iterator(Body + CompoundStmtBits.NumStmts));
}
};
@@ -1222,7 +1226,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// IndirectGotoStmt - This represents an indirect goto.
@@ -1290,7 +1296,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// BreakStmt - This represents a break.
@@ -1318,7 +1326,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
@@ -1373,7 +1383,7 @@ public:
// Iterators
child_range children() {
if (RetExpr) return child_range(&RetExpr, &RetExpr+1);
- return child_range();
+ return child_range(child_iterator(), child_iterator());
}
};
@@ -1957,7 +1967,9 @@ public:
}
// Iterators
- child_range children() { return child_range(); }
+ child_range children() {
+ return child_range(child_iterator(), child_iterator());
+ }
};
/// \brief This captures a statement into a function. For example, the following
diff --git a/clang/include/clang/AST/StmtIterator.h b/clang/include/clang/AST/StmtIterator.h
index a5a57af523d..81f8ad4344a 100644
--- a/clang/include/clang/AST/StmtIterator.h
+++ b/clang/include/clang/AST/StmtIterator.h
@@ -139,86 +139,6 @@ struct ConstStmtIterator : public StmtIteratorImpl<ConstStmtIterator,
StmtIteratorImpl<ConstStmtIterator,const Stmt*>(RHS) {}
};
-/// A range of statement iterators.
-///
-/// This class provides some extra functionality beyond std::pair
-/// in order to allow the following idiom:
-/// for (StmtRange range = stmt->children(); range; ++range)
-struct StmtRange : std::pair<StmtIterator,StmtIterator> {
- StmtRange() {}
- StmtRange(const StmtIterator &begin, const StmtIterator &end)
- : std::pair<StmtIterator,StmtIterator>(begin, end) {}
-
- bool empty() const { return first == second; }
- explicit operator bool() const { return !empty(); }
-
- Stmt *operator->() const { return first.operator->(); }
- Stmt *&operator*() const { return first.operator*(); }
-
- StmtRange &operator++() {
- assert(!empty() && "incrementing on empty range");
- ++first;
- return *this;
- }
-
- StmtRange operator++(int) {
- assert(!empty() && "incrementing on empty range");
- StmtRange copy = *this;
- ++first;
- return copy;
- }
-
- friend const StmtIterator &begin(const StmtRange &range) {
- return range.first;
- }
- friend const StmtIterator &end(const StmtRange &range) {
- return range.second;
- }
-};
-
-/// A range of const statement iterators.
-///
-/// This class provides some extra functionality beyond std::pair
-/// in order to allow the following idiom:
-/// for (ConstStmtRange range = stmt->children(); range; ++range)
-struct ConstStmtRange : std::pair<ConstStmtIterator,ConstStmtIterator> {
- ConstStmtRange() {}
- ConstStmtRange(const ConstStmtIterator &begin,
- const ConstStmtIterator &end)
- : std::pair<ConstStmtIterator,ConstStmtIterator>(begin, end) {}
- ConstStmtRange(const StmtRange &range)
- : std::pair<ConstStmtIterator,ConstStmtIterator>(range.first, range.second)
- {}
- ConstStmtRange(const StmtIterator &begin, const StmtIterator &end)
- : std::pair<ConstStmtIterator,ConstStmtIterator>(begin, end) {}
-
- bool empty() const { return first == second; }
- explicit operator bool() const { return !empty(); }
-
- const Stmt *operator->() const { return first.operator->(); }
- const Stmt *operator*() const { return first.operator*(); }
-
- ConstStmtRange &operator++() {
- assert(!empty() && "incrementing on empty range");
- ++first;
- return *this;
- }
-
- ConstStmtRange operator++(int) {
- assert(!empty() && "incrementing on empty range");
- ConstStmtRange copy = *this;
- ++first;
- return copy;
- }
-
- friend const ConstStmtIterator &begin(const ConstStmtRange &range) {
- return range.first;
- }
- friend const ConstStmtIterator &end(const ConstStmtRange &range) {
- return range.second;
- }
-};
-
} // end namespace clang
#endif
diff --git a/clang/include/clang/AST/StmtOpenMP.h b/clang/include/clang/AST/StmtOpenMP.h
index b412daaf285..be001165267 100644
--- a/clang/include/clang/AST/StmtOpenMP.h
+++ b/clang/include/clang/AST/StmtOpenMP.h
@@ -195,7 +195,7 @@ public:
child_range children() {
if (!hasAssociatedStmt())
- return child_range();
+ return child_range(child_iterator(), child_iterator());
Stmt **ChildStorage = reinterpret_cast<Stmt **>(getClauses().end());
return child_range(ChildStorage, ChildStorage + NumChildren);
}
diff --git a/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp b/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
index 7db1a1c378c..fbbd0bf641b 100644
--- a/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
+++ b/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
@@ -359,16 +359,16 @@ private:
return;
Stmt::child_range StmtExprChild = StmtE->children();
- if (!StmtExprChild)
+ if (StmtExprChild.begin() == StmtExprChild.end())
return;
- CompoundStmt *CompS = dyn_cast_or_null<CompoundStmt>(*StmtExprChild);
+ auto *CompS = dyn_cast_or_null<CompoundStmt>(*StmtExprChild.begin());
if (!CompS)
return;
Stmt::child_range CompStmtChild = CompS->children();
- if (!CompStmtChild)
+ if (CompStmtChild.begin() == CompStmtChild.end())
return;
- DeclStmt *DeclS = dyn_cast_or_null<DeclStmt>(*CompStmtChild);
+ auto *DeclS = dyn_cast_or_null<DeclStmt>(*CompStmtChild.begin());
if (!DeclS)
return;
if (!DeclS->isSingleDecl())
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 5ee06b3666d..55fc6a3f916 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -3891,7 +3891,7 @@ DesignatedInitExpr::DesignatedInitExpr(const ASTContext &C, QualType Ty,
this->Designators = new (C) Designator[NumDesignators];
// Record the initializer itself.
- child_range Child = children();
+ child_iterator Child = child_begin();
*Child++ = Init;
// Copy the designators and their subexpressions, computing
@@ -4175,7 +4175,7 @@ Stmt::child_range UnaryExprOrTypeTraitExpr::children() {
if (const VariableArrayType* T = dyn_cast<VariableArrayType>(
getArgumentType().getTypePtr()))
return child_range(child_iterator(T), child_iterator());
- return child_range();
+ return child_range(child_iterator(), child_iterator());
}
return child_range(&Argument.Ex, &Argument.Ex + 1);
}
diff --git a/clang/lib/AST/Stmt.cpp b/clang/lib/AST/Stmt.cpp
index 80b6be88a3e..78cbc7d7932 100644
--- a/clang/lib/AST/Stmt.cpp
+++ b/clang/lib/AST/Stmt.cpp
@@ -1171,7 +1171,7 @@ bool CapturedStmt::capturesVariable(const VarDecl *Var) const {
return false;
}
-StmtRange OMPClause::children() {
+OMPClause::child_range OMPClause::children() {
switch(getClauseKind()) {
default : break;
#define OPENMP_CLAUSE(Name, Class) \
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp
index 8870c67c746..df21d7bad63 100644
--- a/clang/lib/AST/StmtPrinter.cpp
+++ b/clang/lib/AST/StmtPrinter.cpp
@@ -2129,14 +2129,11 @@ void StmtPrinter::VisitObjCBoxedExpr(ObjCBoxedExpr *E) {
void StmtPrinter::VisitObjCArrayLiteral(ObjCArrayLiteral *E) {
OS << "@[ ";
- StmtRange ch = E->children();
- if (ch.first != ch.second) {
- while (1) {
- Visit(*ch.first);
- ++ch.first;
- if (ch.first == ch.second) break;
+ ObjCArrayLiteral::child_range Ch = E->children();
+ for (auto I = Ch.begin(), E = Ch.end(); I != E; ++I) {
+ if (I != Ch.begin())
OS << ", ";
- }
+ Visit(*I);
}
OS << " ]";
}
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp
index 54d15bd232a..73b6fc6c3c8 100644
--- a/clang/lib/Analysis/CFG.cpp
+++ b/clang/lib/Analysis/CFG.cpp
@@ -4128,7 +4128,8 @@ static void print_elem(raw_ostream &OS, StmtPrinterHelper &Helper,
if (const StmtExpr *SE = dyn_cast<StmtExpr>(S)) {
const CompoundStmt *Sub = SE->getSubStmt();
- if (Sub->children()) {
+ auto Children = Sub->children();
+ if (Children.begin() != Children.end()) {
OS << "({ ... ; ";
Helper.handledStmt(*SE->getSubStmt()->body_rbegin(),OS);
OS << " })\n";
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index e11ab82f88c..90b8f712af7 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -3377,11 +3377,11 @@ StmtResult Sema::ActOnOpenMPSectionsDirective(ArrayRef<OMPClause *> Clauses,
BaseStmt = CS->getCapturedStmt();
if (auto C = dyn_cast_or_null<CompoundStmt>(BaseStmt)) {
auto S = C->children();
- if (!S)
+ if (S.begin() == S.end())
return StmtError();
// All associated statements must be '#pragma omp section' except for
// the first one.
- for (Stmt *SectionStmt : ++S) {
+ for (Stmt *SectionStmt : llvm::make_range(std::next(S.begin()), S.end())) {
if (!SectionStmt || !isa<OMPSectionDirective>(SectionStmt)) {
if (SectionStmt)
Diag(SectionStmt->getLocStart(),
@@ -3535,11 +3535,11 @@ Sema::ActOnOpenMPParallelSectionsDirective(ArrayRef<OMPClause *> Clauses,
BaseStmt = CS->getCapturedStmt();
if (auto C = dyn_cast_or_null<CompoundStmt>(BaseStmt)) {
auto S = C->children();
- if (!S)
+ if (S.begin() == S.end())
return StmtError();
// All associated statements must be '#pragma omp section' except for
// the first one.
- for (Stmt *SectionStmt : ++S) {
+ for (Stmt *SectionStmt : llvm::make_range(std::next(S.begin()), S.end())) {
if (!SectionStmt || !isa<OMPSectionDirective>(SectionStmt)) {
if (SectionStmt)
Diag(SectionStmt->getLocStart(),
OpenPOWER on IntegriCloud