From 45f3b425be9e6812a2ec9e50ae1501c4b5b52b8b Mon Sep 17 00:00:00 2001 From: Akira Hatanaka Date: Wed, 28 Oct 2015 02:32:19 +0000 Subject: [PATCH] Add a test case for r251476. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251477 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/OpenMP/function-attr.cpp | 54 +++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 test/OpenMP/function-attr.cpp diff --git a/test/OpenMP/function-attr.cpp b/test/OpenMP/function-attr.cpp new file mode 100644 index 0000000000..87aba40f2b --- /dev/null +++ b/test/OpenMP/function-attr.cpp @@ -0,0 +1,54 @@ +// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-apple-darwin10 -stack-protector 2 -emit-llvm -o - %s | FileCheck %s + +// Check that function attributes are added to the OpenMP runtime functions. + +template +struct S { + T f; + S(T a) : f(a) {} + S() : f() {} + operator T() { return T(); } + ~S() {} +}; + +// CHECK: define internal void @.omp.copyprivate.copy_func(i8*, i8*) [[ATTR0:#[0-9]+]] { + +void foo0(); + +int foo1() { + char a; + +#pragma omp parallel + a = 2; +#pragma omp single copyprivate(a) + foo0(); + + return 0; +} + +// CHECK: define internal void @.omp_task_privates_map.({{.*}}) [[ATTR3:#[0-9]+]] { +// CHECK: define internal i32 @.omp_task_entry.({{.*}}) [[ATTR0]] { +// CHECK: define internal i32 @.omp_task_destructor.({{.*}}) [[ATTR0]] { + +int foo2() { + S s_arr[] = {1, 2}; + S var(3); +#pragma omp task private(s_arr, var) + s_arr[0] = var; + return 0; +} + +// CHECK: define internal void @.omp.reduction.reduction_func(i8*, i8*) [[ATTR0]] { + +float foo3(int n, float *a, float *b) { + int i; + float result; + +#pragma omp parallel for private(i) reduction(+:result) + for (i=0; i < n; i++) + result = result + (a[i] * b[i]); + return result; +} + +// CHECK: attributes [[ATTR0]] = {{{.*}} sspstrong {{.*}}} +// CHECK: attributes [[ATTR3]] = {{{.*}} sspstrong {{.*}}} -- 2.40.0