From: Alexey Bataev Date: Wed, 25 Jul 2018 14:40:26 +0000 (+0000) Subject: [OPENMP] Fix PR38256: Fix locations of the artificial conditional op. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3334e9178a3382da8d7ba92c462d4be410772fe0;p=clang [OPENMP] Fix PR38256: Fix locations of the artificial conditional op. Fixed the source locations of the conditional op so that they don'r crash coverage pass. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@337928 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaOpenMP.cpp b/lib/Sema/SemaOpenMP.cpp index f5a1d0b222..e1a4c420d4 100644 --- a/lib/Sema/SemaOpenMP.cpp +++ b/lib/Sema/SemaOpenMP.cpp @@ -4909,7 +4909,8 @@ checkOpenMPLoop(OpenMPDirectiveKind DKind, Expr *CollapseLoopCountExpr, ExprResult IsUBGreater = SemaRef.BuildBinOp(CurScope, InitLoc, BO_GT, UB.get(), LastIteration.get()); ExprResult CondOp = SemaRef.ActOnConditionalOp( - InitLoc, InitLoc, IsUBGreater.get(), LastIteration.get(), UB.get()); + LastIteration.get()->getExprLoc(), InitLoc, IsUBGreater.get(), + LastIteration.get(), UB.get()); EUB = SemaRef.BuildBinOp(CurScope, InitLoc, BO_Assign, UB.get(), CondOp.get()); EUB = SemaRef.ActOnFinishFullExpr(EUB.get()); diff --git a/test/CoverageMapping/openmp.c b/test/CoverageMapping/openmp.c new file mode 100644 index 0000000000..1ac12624e0 --- /dev/null +++ b/test/CoverageMapping/openmp.c @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -fopenmp -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name openmp.c %s | FileCheck %s + +// CHECK: openmp.c:{{.+}}omp_outlined{{.+}}: +// CHECK: File 0, 10:3 -> 10:31 +// CHECK: File 0, 10:19 -> 10:24 +// CHECK: File 0, 10:26 -> 10:29 +// CHECK: File 0, 10:30 -> 10:31 +int foo(int time, int n) { +#pragma omp parallel for default(shared) schedule(dynamic, 1) reduction(+ : time) + for (int i = 1; i < n; ++i); + return 0; +}