summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/StmtPrinter.cpp
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2013-09-24 03:17:45 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2013-09-24 03:17:45 +0000
commit756c196f1463f2c666f853aecb20e198d8af010d (patch)
tree8643031801147465637162c6ebf28724f76fc425 /clang/lib/AST/StmtPrinter.cpp
parent036f16dc8c494efca4a342703fd572b6de76a1fa (diff)
downloadbcm5719-llvm-756c196f1463f2c666f853aecb20e198d8af010d.tar.gz
bcm5719-llvm-756c196f1463f2c666f853aecb20e198d8af010d.zip
[OPENMP] Bug fixes and improvements.
1. Fixed constructor of shared clause. 2. Some macros for clauses processing are replaced by private template methods. 3. Additional checks in sema analysis of OpenMP clauses. llvm-svn: 191265
Diffstat (limited to 'clang/lib/AST/StmtPrinter.cpp')
-rw-r--r--clang/lib/AST/StmtPrinter.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp
index ee3852a3e98..df8d2bbf09d 100644
--- a/clang/lib/AST/StmtPrinter.cpp
+++ b/clang/lib/AST/StmtPrinter.cpp
@@ -586,6 +586,9 @@ void StmtPrinter::VisitSEHFinallyStmt(SEHFinallyStmt *Node) {
namespace {
class OMPClausePrinter : public OMPClauseVisitor<OMPClausePrinter> {
raw_ostream &OS;
+ /// \brief Process clauses with list of variables.
+ template <typename T>
+ void VisitOMPClauseList(T *Node, char StartSym);
public:
OMPClausePrinter(raw_ostream &OS) : OS(OS) { }
#define OPENMP_CLAUSE(Name, Class) \
@@ -599,17 +602,19 @@ void OMPClausePrinter::VisitOMPDefaultClause(OMPDefaultClause *Node) {
<< ")";
}
-#define PROCESS_OMP_CLAUSE_LIST(Class, Node, StartSym) \
- for (OMPVarList<Class>::varlist_iterator I = Node->varlist_begin(), \
- E = Node->varlist_end(); \
- I != E; ++I) \
- OS << (I == Node->varlist_begin() ? StartSym : ',') \
+template<typename T>
+void OMPClausePrinter::VisitOMPClauseList(T *Node, char StartSym) {
+ for (typename T::varlist_iterator I = Node->varlist_begin(),
+ E = Node->varlist_end();
+ I != E; ++I)
+ OS << (I == Node->varlist_begin() ? StartSym : ',')
<< *cast<NamedDecl>(cast<DeclRefExpr>(*I)->getDecl());
+}
void OMPClausePrinter::VisitOMPPrivateClause(OMPPrivateClause *Node) {
if (!Node->varlist_empty()) {
OS << "private";
- PROCESS_OMP_CLAUSE_LIST(OMPPrivateClause, Node, '(')
+ VisitOMPClauseList(Node, '(');
OS << ")";
}
}
@@ -617,12 +622,11 @@ void OMPClausePrinter::VisitOMPPrivateClause(OMPPrivateClause *Node) {
void OMPClausePrinter::VisitOMPSharedClause(OMPSharedClause *Node) {
if (!Node->varlist_empty()) {
OS << "shared";
- PROCESS_OMP_CLAUSE_LIST(OMPSharedClause, Node, '(')
+ VisitOMPClauseList(Node, '(');
OS << ")";
}
}
-#undef PROCESS_OMP_CLAUSE_LIST
}
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud