From 9e4d5da66ba56954f8fa64f59d28f4d2335fd37f Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Wed, 5 Mar 2014 06:45:14 +0000 Subject: [PATCH] [OPNEMP] Fixed instantiation of 'if' clause git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202940 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/TreeTransform.h | 5 ++++- test/OpenMP/parallel_ast_print.cpp | 18 +++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 5d2124f7ce..d164bdd650 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -6309,7 +6309,10 @@ TreeTransform::TransformOMPSimdDirective(OMPSimdDirective *D) { template OMPClause * TreeTransform::TransformOMPIfClause(OMPIfClause *C) { - return getDerived().RebuildOMPIfClause(C->getCondition(), C->getLocStart(), + ExprResult Cond = getDerived().TransformExpr(C->getCondition()); + if (Cond.isInvalid()) + return 0; + return getDerived().RebuildOMPIfClause(Cond.take(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); } diff --git a/test/OpenMP/parallel_ast_print.cpp b/test/OpenMP/parallel_ast_print.cpp index c197031c59..e76a410522 100644 --- a/test/OpenMP/parallel_ast_print.cpp +++ b/test/OpenMP/parallel_ast_print.cpp @@ -9,7 +9,7 @@ void foo() {} -template +template T tmain(T argc, T *argv) { T b = argc, c, d, e, f, g; static T a; @@ -17,29 +17,37 @@ T tmain(T argc, T *argv) { a=2; #pragma omp parallel default(none), private(argc,b) firstprivate(argv) shared (d) if (argc > 0) foo(); +#pragma omp parallel if (C) + foo(); return 0; } -// CHECK: template int tmain(int argc, int *argv) { +// CHECK: template int tmain(int argc, int *argv) { // CHECK-NEXT: int b = argc, c, d, e, f, g; // CHECK-NEXT: static int a; // CHECK-NEXT: #pragma omp parallel // CHECK-NEXT: a = 2; // CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) // CHECK-NEXT: foo() -// CHECK: template float tmain(float argc, float *argv) { +// CHECK-NEXT: #pragma omp parallel if(2) +// CHECK-NEXT: foo() +// CHECK: template float tmain(float argc, float *argv) { // CHECK-NEXT: float b = argc, c, d, e, f, g; // CHECK-NEXT: static float a; // CHECK-NEXT: #pragma omp parallel // CHECK-NEXT: a = 2; // CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) // CHECK-NEXT: foo() -// CHECK: template T tmain(T argc, T *argv) { +// CHECK-NEXT: #pragma omp parallel if(0) +// CHECK-NEXT: foo() +// CHECK: template T tmain(T argc, T *argv) { // CHECK-NEXT: T b = argc, c, d, e, f, g; // CHECK-NEXT: static T a; // CHECK-NEXT: #pragma omp parallel // CHECK-NEXT: a = 2; // CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) // CHECK-NEXT: foo() +// CHECK-NEXT: #pragma omp parallel if(C) +// CHECK-NEXT: foo() int main (int argc, char **argv) { float x; @@ -54,7 +62,7 @@ int main (int argc, char **argv) { // CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) if(argc > 0) foo(); // CHECK-NEXT: foo(); - return tmain(b, &b) + tmain(x, &x); + return tmain(b, &b) + tmain(x, &x); } #endif -- 2.50.1