// This testcase checks emission of debug info for threadprivate variables // present in any clause of OpenMP construct. // REQUIRES: x86-registered-target // RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s // expected-no-diagnostics // CHECK: define internal void @main.omp_outlined_debug__( // CHECK: call void @llvm.dbg.declare(metadata ptr %.global_tid..addr, // CHECK: call void @llvm.dbg.declare(metadata ptr %.bound_tid..addr, // CHECK: call void @llvm.dbg.declare(metadata ptr %nt.addr // CHECK: store ptr %gbl_dynamic_int, ptr %gbl_dynamic_int.addr, align 8 // CHECK-NOT: call void @llvm.dbg.declare(metadata ptr %gbl_dynamic_int.addr // CHECK-NOT: call void @llvm.dbg.declare(metadata ptr %gbl_static_int.addr extern int printf(const char *, ...); extern void omp_set_num_threads(int); extern int omp_get_num_threads(void); extern int omp_get_thread_num(void); int gbl_dynamic_int; __thread int gbl_static_int; #pragma omp threadprivate(gbl_dynamic_int) int main() { int nt = 0; int offset = 10; gbl_dynamic_int = 55; gbl_static_int = 77; omp_set_num_threads(4); #pragma omp parallel copyin(gbl_dynamic_int, gbl_static_int) { int data; int tid; nt = omp_get_num_threads(); tid = omp_get_thread_num(); data = gbl_dynamic_int + gbl_static_int; gbl_dynamic_int += 10; gbl_static_int += 20; #pragma omp barrier if (tid == 0) printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n", nt, tid, data, &gbl_dynamic_int, &gbl_static_int); if (tid == 1) printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n", nt, tid, data, &gbl_dynamic_int, &gbl_static_int); if (tid == 2) printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n", nt, tid, data, &gbl_dynamic_int, &gbl_static_int); if (tid == 3) printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n", nt, tid, data, &gbl_dynamic_int, &gbl_static_int); } return 0; }