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