Index: lib/AST/ASTDumper.cpp =================================================================== --- lib/AST/ASTDumper.cpp +++ lib/AST/ASTDumper.cpp @@ -1043,21 +1043,21 @@ void ASTDumper::VisitOMPDeclareReductionDecl(const OMPDeclareReductionDecl *D) { NodeDumper.dumpName(D); NodeDumper.dumpType(D->getType()); - OS << " combiner"; - dumpStmt(D->getCombiner()); + + dumpStmt(D->getCombiner(), "combiner"); if (auto *Initializer = D->getInitializer()) { - OS << " initializer"; + std::string label = "initializer"; switch (D->getInitializerKind()) { case OMPDeclareReductionDecl::DirectInit: - OS << " omp_priv = "; + label += " omp_priv ="; break; case OMPDeclareReductionDecl::CopyInit: - OS << " omp_priv ()"; + label += " omp_priv ()"; break; case OMPDeclareReductionDecl::CallInit: break; } - dumpStmt(Initializer); + dumpStmt(Initializer, label); } } Index: test/AST/dump.cpp =================================================================== --- test/AST/dump.cpp +++ test/AST/dump.cpp @@ -13,33 +13,37 @@ #pragma omp declare reduction(fun : float : omp_out += omp_in) initializer(omp_priv = omp_orig + 15) -// CHECK: |-OMPDeclareReductionDecl {{.+}} col:35 operator+ 'int' combiner -// CHECK-NEXT: | |-CompoundAssignOperator {{.+}} 'int' lvalue '*=' ComputeLHSTy='int' ComputeResultTy='int' -// CHECK-NEXT: | | |-DeclRefExpr {{.+}} 'int' lvalue Var {{.+}} 'omp_out' 'int' -// CHECK-NEXT: | | `-ImplicitCastExpr {{.+}} 'int' -// CHECK-NEXT: | | `-DeclRefExpr {{.+}} 'int' lvalue Var {{.+}} 'omp_in' 'int' +// CHECK: |-OMPDeclareReductionDecl {{.+}} col:35 operator+ 'int' +// CHECK-NEXT: | |-combiner +// CHECK-NEXT: | | `-CompoundAssignOperator {{.+}} 'int' lvalue '*=' ComputeLHSTy='int' ComputeResultTy='int' +// CHECK-NEXT: | | |-DeclRefExpr {{.+}} 'int' lvalue Var {{.+}} 'omp_out' 'int' +// CHECK-NEXT: | | `-ImplicitCastExpr {{.+}} 'int' +// CHECK-NEXT: | | `-DeclRefExpr {{.+}} 'int' lvalue Var {{.+}} 'omp_in' 'int' // CHECK-NEXT: | |-VarDecl {{.+}} col:35 implicit used omp_in 'int' // CHECK-NEXT: | `-VarDecl {{.+}} col:35 implicit used omp_out 'int' -// CHECK-NEXT: |-OMPDeclareReductionDecl {{.+}} col:40 operator+ 'char' combiner -// CHECK-NEXT: | |-CompoundAssignOperator {{.+}} 'char' lvalue '*=' ComputeLHSTy='int' ComputeResultTy='int' -// CHECK-NEXT: | | |-DeclRefExpr {{.+}} 'char' lvalue Var {{.+}} 'omp_out' 'char' -// CHECK-NEXT: | | `-ImplicitCastExpr {{.+}} 'int' -// CHECK-NEXT: | | `-ImplicitCastExpr {{.+}} 'char' -// CHECK-NEXT: | | `-DeclRefExpr {{.+}} 'char' lvalue Var {{.+}} 'omp_in' 'char' +// CHECK-NEXT: |-OMPDeclareReductionDecl {{.+}} col:40 operator+ 'char' +// CHECK-NEXT: | |-combiner +// CHECK-NEXT: | `-CompoundAssignOperator {{.+}} 'char' lvalue '*=' ComputeLHSTy='int' ComputeResultTy='int' +// CHECK-NEXT: | |-DeclRefExpr {{.+}} 'char' lvalue Var {{.+}} 'omp_out' 'char' +// CHECK-NEXT: | `-ImplicitCastExpr {{.+}} 'int' +// CHECK-NEXT: | `-ImplicitCastExpr {{.+}} 'char' +// CHECK-NEXT: | `-DeclRefExpr {{.+}} 'char' lvalue Var {{.+}} 'omp_in' 'char' // CHECK-NEXT: | |-VarDecl {{.+}} col:40 implicit used omp_in 'char' // CHECK-NEXT: | `-VarDecl {{.+}} col:40 implicit used omp_out 'char' -// CHECK-NEXT: |-OMPDeclareReductionDecl {{.+}} col:37 fun 'float' combiner initializer -// CHECK-NEXT: | |-CompoundAssignOperator {{.+}} 'float' lvalue '+=' ComputeLHSTy='float' ComputeResultTy='float' -// CHECK-NEXT: | | |-DeclRefExpr {{.+}} 'float' lvalue Var {{.+}} 'omp_out' 'float' -// CHECK-NEXT: | | `-ImplicitCastExpr {{.+}} 'float' -// CHECK-NEXT: | | `-DeclRefExpr {{.+}} 'float' lvalue Var {{.+}} 'omp_in' 'float' -// CHECK-NEXT: | |-BinaryOperator {{.+}} 'float' lvalue '=' -// CHECK-NEXT: | | |-DeclRefExpr {{.+}} 'float' lvalue Var {{.+}} 'omp_priv' 'float' -// CHECK-NEXT: | | `-BinaryOperator {{.+}} 'float' '+' -// CHECK-NEXT: | | |-ImplicitCastExpr {{.+}} 'float' -// CHECK-NEXT: | | | `-DeclRefExpr {{.+}} 'float' lvalue Var {{.+}} 'omp_orig' 'float' -// CHECK-NEXT: | | `-ImplicitCastExpr {{.+}} 'float' -// CHECK-NEXT: | | `-IntegerLiteral {{.+}} 'int' 15 +// CHECK-NEXT: |-OMPDeclareReductionDecl {{.+}} col:37 fun 'float' +// CHECK-NEXT: | |-combiner +// CHECK-NEXT: | `-CompoundAssignOperator {{.+}} 'float' lvalue '+=' ComputeLHSTy='float' ComputeResultTy='float' +// CHECK-NEXT: | |-DeclRefExpr {{.+}} 'float' lvalue Var {{.+}} 'omp_out' 'float' +// CHECK-NEXT: | `-ImplicitCastExpr {{.+}} 'float' +// CHECK-NEXT: | `-DeclRefExpr {{.+}} 'float' lvalue Var {{.+}} 'omp_in' 'float' +// CHECK-NEXT: | |-initializer +// CHECK-NEXT: | `-BinaryOperator {{.+}} 'float' lvalue '=' +// CHECK-NEXT: | |-DeclRefExpr {{.+}} 'float' lvalue Var {{.+}} 'omp_priv' 'float' +// CHECK-NEXT: | `-BinaryOperator {{.+}} 'float' '+' +// CHECK-NEXT: | |-ImplicitCastExpr {{.+}} 'float' +// CHECK-NEXT: | | `-DeclRefExpr {{.+}} 'float' lvalue Var {{.+}} 'omp_orig' 'float' +// CHECK-NEXT: | `-ImplicitCastExpr {{.+}} 'float' +// CHECK-NEXT: | `-IntegerLiteral {{.+}} 'int' 15 struct S { int a, b;