xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape-openmp.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s bugprone-exception-escape %t -- -extra-arg=-fopenmp=libomp -extra-arg=-fexceptions --
2*89a1d03eSRichard 
thrower()3*89a1d03eSRichard int thrower() {
4*89a1d03eSRichard   throw 42;
5*89a1d03eSRichard }
6*89a1d03eSRichard 
ok_parallel()7*89a1d03eSRichard void ok_parallel() {
8*89a1d03eSRichard #pragma omp parallel
9*89a1d03eSRichard   thrower();
10*89a1d03eSRichard }
11*89a1d03eSRichard 
bad_for_header_XFAIL(const int a)12*89a1d03eSRichard void bad_for_header_XFAIL(const int a) noexcept {
13*89a1d03eSRichard #pragma omp for
14*89a1d03eSRichard   for (int i = 0; i < thrower(); i++)
15*89a1d03eSRichard     ;
16*89a1d03eSRichard   // FIXME: this really should be caught by bugprone-exception-escape.
17*89a1d03eSRichard   // https://bugs.llvm.org/show_bug.cgi?id=41102
18*89a1d03eSRichard }
19*89a1d03eSRichard 
ok_forloop(const int a)20*89a1d03eSRichard void ok_forloop(const int a) {
21*89a1d03eSRichard #pragma omp for
22*89a1d03eSRichard   for (int i = 0; i < a; i++)
23*89a1d03eSRichard     thrower();
24*89a1d03eSRichard }
25*89a1d03eSRichard 
some_exception_just_so_that_check_clang_tidy_shuts_up()26*89a1d03eSRichard void some_exception_just_so_that_check_clang_tidy_shuts_up() noexcept {
27*89a1d03eSRichard   thrower();
28*89a1d03eSRichard }
29*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-3]]:6: warning: an exception may be thrown in function 'some_exception_just_so_that_check_clang_tidy_shuts_up' which should not throw exceptions
30