brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · c9a7ef6 Raw
209 lines · cpp
1// RUN: %check_clang_tidy %s openmp-use-default-none %t -- -- -fopenmp=libomp -fopenmp-version=512// RUN: %check_clang_tidy -std=c11 %s openmp-use-default-none %t -- -- -x c -fopenmp=libomp -fopenmp-version=513 4//----------------------------------------------------------------------------//5// Null cases.6//----------------------------------------------------------------------------//7 8// 'for' directive can not have 'default' clause, no diagnostics.9void n0(const int a) {10#pragma omp for11  for (int b = 0; b < a; b++)12    ;13}14 15//----------------------------------------------------------------------------//16// Single-directive positive cases.17//----------------------------------------------------------------------------//18 19// 'parallel' directive.20 21// 'parallel' directive can have 'default' clause, but said clause is not22// specified, diagnosed.23void p0_0(void) {24#pragma omp parallel25  ;26  // CHECK-NOTES: :[[@LINE-2]]:1: warning: OpenMP directive 'parallel' does not specify 'default' clause, consider specifying 'default(none)' clause27}28 29// 'parallel' directive can have 'default' clause, and said clause specified,30// with 'none' kind, all good.31void p0_1(void) {32#pragma omp parallel default(none)33  ;34}35 36// 'parallel' directive can have 'default' clause, and said clause specified,37// but with 'shared' kind, which is not 'none', diagnose.38void p0_2(void) {39#pragma omp parallel default(shared)40  ;41  // CHECK-NOTES: :[[@LINE-2]]:1: warning: OpenMP directive 'parallel' specifies 'default(shared)' clause, consider using 'default(none)' clause instead42  // CHECK-NOTES: :[[@LINE-3]]:22: note: existing 'default' clause specified here43}44 45// 'parallel' directive can have 'default' clause, and said clause specified,46// but with 'firstprivate' kind, which is not 'none', diagnose.47void p0_3(void) {48#pragma omp parallel default(firstprivate)49  ;50  // CHECK-NOTES: :[[@LINE-2]]:1: warning: OpenMP directive 'parallel' specifies 'default(firstprivate)' clause, consider using 'default(none)' clause instead51  // CHECK-NOTES: :[[@LINE-3]]:22: note: existing 'default' clause specified here52}53 54// 'task' directive.55 56// 'task' directive can have 'default' clause, but said clause is not57// specified, diagnosed.58void p1_0(void) {59#pragma omp task60  ;61  // CHECK-NOTES: :[[@LINE-2]]:1: warning: OpenMP directive 'task' does not specify 'default' clause, consider specifying 'default(none)' clause62}63 64// 'task' directive can have 'default' clause, and said clause specified,65// with 'none' kind, all good.66void p1_1(void) {67#pragma omp task default(none)68  ;69}70 71// 'task' directive can have 'default' clause, and said clause specified,72// but with 'shared' kind, which is not 'none', diagnose.73void p1_2(void) {74#pragma omp task default(shared)75  ;76  // CHECK-NOTES: :[[@LINE-2]]:1: warning: OpenMP directive 'task' specifies 'default(shared)' clause, consider using 'default(none)' clause instead77  // CHECK-NOTES: :[[@LINE-3]]:18: note: existing 'default' clause specified here78}79 80// 'task' directive can have 'default' clause, and said clause specified,81// but with 'firstprivate' kind, which is not 'none', diagnose.82void p1_3(void) {83#pragma omp task default(firstprivate)84  ;85  // CHECK-NOTES: :[[@LINE-2]]:1: warning: OpenMP directive 'task' specifies 'default(firstprivate)' clause, consider using 'default(none)' clause instead86  // CHECK-NOTES: :[[@LINE-3]]:18: note: existing 'default' clause specified here87}88 89// 'teams' directive. (has to be inside of 'target' directive)90 91// 'teams' directive can have 'default' clause, but said clause is not92// specified, diagnosed.93void p2_0(void) {94#pragma omp target95#pragma omp teams96  ;97  // CHECK-NOTES: :[[@LINE-2]]:1: warning: OpenMP directive 'teams' does not specify 'default' clause, consider specifying 'default(none)' clause98}99 100// 'teams' directive can have 'default' clause, and said clause specified,101// with 'none' kind, all good.102void p2_1(void) {103#pragma omp target104#pragma omp teams default(none)105  ;106}107 108// 'teams' directive can have 'default' clause, and said clause specified,109// but with 'shared' kind, which is not 'none', diagnose.110void p2_2(void) {111#pragma omp target112#pragma omp teams default(shared)113  ;114  // CHECK-NOTES: :[[@LINE-2]]:1: warning: OpenMP directive 'teams' specifies 'default(shared)' clause, consider using 'default(none)' clause instead115  // CHECK-NOTES: :[[@LINE-3]]:19: note: existing 'default' clause specified here116}117 118// 'teams' directive can have 'default' clause, and said clause specified,119// but with 'firstprivate' kind, which is not 'none', diagnose.120void p2_3(void) {121#pragma omp target122#pragma omp teams default(firstprivate)123  ;124  // CHECK-NOTES: :[[@LINE-2]]:1: warning: OpenMP directive 'teams' specifies 'default(firstprivate)' clause, consider using 'default(none)' clause instead125  // CHECK-NOTES: :[[@LINE-3]]:19: note: existing 'default' clause specified here126}127 128// 'taskloop' directive.129 130// 'taskloop' directive can have 'default' clause, but said clause is not131// specified, diagnosed.132void p3_0(const int a) {133#pragma omp taskloop134  for (int b = 0; b < a; b++)135    ;136  // CHECK-NOTES: :[[@LINE-3]]:1: warning: OpenMP directive 'taskloop' does not specify 'default' clause, consider specifying 'default(none)' clause137}138 139// 'taskloop' directive can have 'default' clause, and said clause specified,140// with 'none' kind, all good.141void p3_1(const int a) {142#pragma omp taskloop default(none) shared(a)143  for (int b = 0; b < a; b++)144    ;145}146 147// 'taskloop' directive can have 'default' clause, and said clause specified,148// but with 'shared' kind, which is not 'none', diagnose.149void p3_2(const int a) {150#pragma omp taskloop default(shared)151  for (int b = 0; b < a; b++)152    ;153  // CHECK-NOTES: :[[@LINE-3]]:1: warning: OpenMP directive 'taskloop' specifies 'default(shared)' clause, consider using 'default(none)' clause instead154  // CHECK-NOTES: :[[@LINE-4]]:22: note: existing 'default' clause specified here155}156 157// 'taskloop' directive can have 'default' clause, and said clause specified,158// but with 'firstprivate' kind, which is not 'none', diagnose.159void p3_3(const int a) {160#pragma omp taskloop default(firstprivate)161  for (int b = 0; b < a; b++)162    ;163  // CHECK-NOTES: :[[@LINE-3]]:1: warning: OpenMP directive 'taskloop' specifies 'default(firstprivate)' clause, consider using 'default(none)' clause instead164  // CHECK-NOTES: :[[@LINE-4]]:22: note: existing 'default' clause specified here165}166 167//----------------------------------------------------------------------------//168// Combined directives.169// Let's not test every single possible permutation/combination of directives,170// but just *one* combined directive. The rest will be the same.171//----------------------------------------------------------------------------//172 173// 'parallel' directive can have 'default' clause, but said clause is not174// specified, diagnosed.175void p4_0(const int a) {176#pragma omp parallel for177  for (int b = 0; b < a; b++)178    ;179  // CHECK-NOTES: :[[@LINE-3]]:1: warning: OpenMP directive 'parallel for' does not specify 'default' clause, consider specifying 'default(none)' clause180}181 182// 'parallel' directive can have 'default' clause, and said clause specified,183// with 'none' kind, all good.184void p4_1(const int a) {185#pragma omp parallel for default(none) shared(a)186  for (int b = 0; b < a; b++)187    ;188}189 190// 'parallel' directive can have 'default' clause, and said clause specified,191// but with 'shared' kind, which is not 'none', diagnose.192void p4_2(const int a) {193#pragma omp parallel for default(shared)194  for (int b = 0; b < a; b++)195    ;196  // CHECK-NOTES: :[[@LINE-3]]:1: warning: OpenMP directive 'parallel for' specifies 'default(shared)' clause, consider using 'default(none)' clause instead197  // CHECK-NOTES: :[[@LINE-4]]:26: note: existing 'default' clause specified here198}199 200// 'parallel' directive can have 'default' clause, and said clause specified,201// but with 'firstprivate' kind, which is not 'none', diagnose.202void p4_3(const int a) {203#pragma omp parallel for default(firstprivate)204  for (int b = 0; b < a; b++)205    ;206  // CHECK-NOTES: :[[@LINE-3]]:1: warning: OpenMP directive 'parallel for' specifies 'default(firstprivate)' clause, consider using 'default(none)' clause instead207  // CHECK-NOTES: :[[@LINE-4]]:26: note: existing 'default' clause specified here208}209