1 // This testcase checks emission of debug info for variables inside 2 // private/firstprivate/lastprivate. 3 4 // REQUIRES: x86_64-linux 5 6 // RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s 7 // expected-no-diagnostics 8 9 // CHECK: define internal i32 @.omp_task_entry. 10 11 // CHECK: call void @llvm.dbg.declare(metadata i32** %.priv.ptr.addr.i, metadata [[PRIV1:![0-9]+]], metadata !DIExpression(DW_OP_deref)) 12 // CHECK: call void @llvm.dbg.declare(metadata i32** %.priv.ptr.addr1.i, metadata [[PRIV2:![0-9]+]], metadata !DIExpression(DW_OP_deref)) 13 // CHECK: call void @llvm.dbg.declare(metadata i32** %.firstpriv.ptr.addr.i, metadata [[FPRIV:![0-9]+]], metadata !DIExpression(DW_OP_deref)) 14 15 // CHECK: [[PRIV1]] = !DILocalVariable(name: "priv1" 16 // CHECK: [[PRIV2]] = !DILocalVariable(name: "priv2" 17 // CHECK: [[FPRIV]] = !DILocalVariable(name: "fpriv" 18 19 extern int printf(const char *, ...); 20 21 int foo(int n) { 22 int res, priv1, priv2, fpriv; 23 fpriv = n + 4; 24 25 if (n < 2) 26 return n; 27 else { 28 #pragma omp task shared(res) private(priv1, priv2) firstprivate(fpriv) 29 { 30 priv1 = n; 31 priv2 = n + 2; 32 printf("Task n=%d,priv1=%d,priv2=%d,fpriv=%d\n", n, priv1, priv2, fpriv); 33 34 res = priv1 + priv2 + fpriv + foo(n - 1); 35 } 36 #pragma omp taskwait 37 return res; 38 } 39 } 40 41 int main() { 42 int n = 10; 43 printf("foo(%d) = %d\n", n, foo(n)); 44 return 0; 45 } 46