diff options
author | Jordan Rupprecht <rupprecht@google.com> | 2019-05-14 21:58:59 +0000 |
---|---|---|
committer | Jordan Rupprecht <rupprecht@google.com> | 2019-05-14 21:58:59 +0000 |
commit | 46054fed6aeeabea27b9ba4a3ef81ab5ff9b9645 (patch) | |
tree | d12279f80b5729d0324f066002c838baa736fbd2 /test/clang-tidy/openmp-exception-escape.cpp | |
parent | 5026a9a16d10a2edf09be54c7225f49b5789c69e (diff) | |
parent | 0eb1ac6d1df856f065717226ef34d00679a211fe (diff) |
Creating branches/google/stable and tags/google/stable/2019-05-14 from r360103upstream/stable
git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/branches/google/stable@360714 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/clang-tidy/openmp-exception-escape.cpp')
-rw-r--r-- | test/clang-tidy/openmp-exception-escape.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/test/clang-tidy/openmp-exception-escape.cpp b/test/clang-tidy/openmp-exception-escape.cpp new file mode 100644 index 00000000..73345836 --- /dev/null +++ b/test/clang-tidy/openmp-exception-escape.cpp @@ -0,0 +1,132 @@ +// RUN: %check_clang_tidy %s openmp-exception-escape %t -- -extra-arg=-fopenmp=libomp -extra-arg=-fexceptions -config="{CheckOptions: [{key: openmp-exception-escape.IgnoredExceptions, value: 'ignored, ignored2'}]}" -- + +int thrower() { + throw 42; +} + +class ignored {}; +class ignored2 {}; +namespace std { +class bad_alloc {}; +} // namespace std + +void parallel() { +#pragma omp parallel + thrower(); + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: an exception thrown inside of the OpenMP 'parallel' region is not caught in that same region +} + +void ignore() { +#pragma omp parallel + throw ignored(); +} + +void ignore2() { +#pragma omp parallel + throw ignored2(); +} + +void standalone_directive() { +#pragma omp taskwait + throw ignored(); // not structured block +} + +void ignore_alloc() { +#pragma omp parallel + throw std::bad_alloc(); +} + +void parallel_caught() { +#pragma omp parallel + { + try { + thrower(); + } catch (...) { + } + } +} + +void for_header(const int a) { + // Only the body of the loop counts. +#pragma omp for + for (int i = 0; i < thrower(); i++) + ; +} + +void forloop(const int a) { +#pragma omp for + for (int i = 0; i < a; i++) + thrower(); + // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: an exception thrown inside of the OpenMP 'for' region is not caught in that same region +} + +void parallel_forloop(const int a) { +#pragma omp parallel + { +#pragma omp for + for (int i = 0; i < a; i++) + thrower(); + thrower(); + // CHECK-MESSAGES: :[[@LINE-5]]:3: warning: an exception thrown inside of the OpenMP 'parallel' region is not caught in that same region + // CHECK-MESSAGES: :[[@LINE-3]]:7: warning: an exception thrown inside of the OpenMP 'for' region is not caught in that same region + } +} + +void parallel_forloop_caught(const int a) { +#pragma omp parallel + { +#pragma omp for + for (int i = 0; i < a; i++) { + try { + thrower(); + } catch (...) { + } + } + thrower(); + // CHECK-MESSAGES: :[[@LINE-9]]:3: warning: an exception thrown inside of the OpenMP 'parallel' region is not caught in that same region + } +} + +void parallel_caught_forloop(const int a) { +#pragma omp parallel + { +#pragma omp for + for (int i = 0; i < a; i++) + thrower(); + try { + thrower(); + } catch (...) { + } + // CHECK-MESSAGES: :[[@LINE-5]]:7: warning: an exception thrown inside of the OpenMP 'for' region is not caught in that same region + } +} + +void parallel_outercaught_forloop(const int a) { +#pragma omp parallel + { + try { +#pragma omp for + for (int i = 0; i < a; i++) + thrower(); + thrower(); + } catch (...) { + } + // CHECK-MESSAGES: :[[@LINE-4]]:9: warning: an exception thrown inside of the OpenMP 'for' region is not caught in that same region + } +} + +void parallel_outercaught_forloop_caught(const int a) { +#pragma omp parallel + { + try { +#pragma omp for + for (int i = 0; i < a; i++) { + try { + thrower(); + } catch (...) { + } + } + } catch (...) { + } + } +} |