diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2016-09-26 15:00:45 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2016-09-26 15:00:45 +0000 |
commit | 160572855dec877a5aa153130f9a3b40c722f839 (patch) | |
tree | 646a39300af9abbebfd0a0b73bf286fed83adc17 /clang-tools-extra/test/clang-tidy/cert-static-object-exception.cpp | |
parent | 194cae9aba0190a8b7310981c36b8bd15a49f2e0 (diff) | |
download | bcm5719-llvm-160572855dec877a5aa153130f9a3b40c722f839.tar.gz bcm5719-llvm-160572855dec877a5aa153130f9a3b40c722f839.zip |
Silence a false positive with the cert-err58-cpp check; now allows objects with static or thread storage duration at function block scope.
Patch by Malcolm Parsons
llvm-svn: 282409
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/cert-static-object-exception.cpp')
-rw-r--r-- | clang-tools-extra/test/clang-tidy/cert-static-object-exception.cpp | 88 |
1 files changed, 76 insertions, 12 deletions
diff --git a/clang-tools-extra/test/clang-tidy/cert-static-object-exception.cpp b/clang-tools-extra/test/clang-tidy/cert-static-object-exception.cpp index ae2d967f438..64dc2deddd5 100644 --- a/clang-tools-extra/test/clang-tidy/cert-static-object-exception.cpp +++ b/clang-tools-extra/test/clang-tidy/cert-static-object-exception.cpp @@ -28,25 +28,89 @@ V v("v"); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: construction of 'v' with static storage duration may throw an exception that cannot be caught // CHECK-MESSAGES: 16:12: note: possibly throwing constructor declared here +thread_local S s3; +// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: construction of 's3' with thread_local storage duration may throw an exception that cannot be caught +thread_local T t3; // ok +thread_local U u3; +// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: construction of 'u3' with thread_local storage duration may throw an exception that cannot be caught +thread_local V v3("v"); +// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: construction of 'v3' with thread_local storage duration may throw an exception that cannot be caught + void f(S s1, T t1, U u1, V v1) { // ok, ok, ok, ok S s2; // ok T t2; // ok U u2; // ok V v2("v"); // ok - thread_local S s3; - // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: construction of 's3' with thread_local storage duration may throw an exception that cannot be caught + thread_local S s3; // ok thread_local T t3; // ok - thread_local U u3; - // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: construction of 'u3' with thread_local storage duration may throw an exception that cannot be caught - thread_local V v3("v"); - // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: construction of 'v3' with thread_local storage duration may throw an exception that cannot be caught + thread_local U u3; // ok + thread_local V v3("v"); // ok - static S s4; - // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: construction of 's4' with static storage duration may throw an exception that cannot be caught + static S s4; // ok static T t4; // ok - static U u4; - // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: construction of 'u4' with static storage duration may throw an exception that cannot be caught - static V v4("v"); - // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: construction of 'v4' with static storage duration may throw an exception that cannot be caught + static U u4; // ok + static V v4("v"); // ok } + +namespace { +S s; +// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: construction of 's' with static storage duration may throw an exception that cannot be caught [cert-err58-cpp] +// CHECK-MESSAGES: 4:3: note: possibly throwing constructor declared here +T t; // ok +U u; +// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: construction of 'u' with static storage duration may throw an exception that cannot be caught +// CHECK-MESSAGES: 12:3: note: possibly throwing constructor declared here +V v("v"); +// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: construction of 'v' with static storage duration may throw an exception that cannot be caught +// CHECK-MESSAGES: 16:12: note: possibly throwing constructor declared here + +thread_local S s3; +// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: construction of 's3' with thread_local storage duration may throw an exception that cannot be caught +thread_local T t3; // ok +thread_local U u3; +// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: construction of 'u3' with thread_local storage duration may throw an exception that cannot be caught +thread_local V v3("v"); +// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: construction of 'v3' with thread_local storage duration may throw an exception that cannot be caught +}; + +class Statics { + static S s; + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: construction of 's' with static storage duration may throw an exception that cannot be caught [cert-err58-cpp] + // CHECK-MESSAGES: 4:3: note: possibly throwing constructor declared here + static T t; // ok + static U u; + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: construction of 'u' with static storage duration may throw an exception that cannot be caught + // CHECK-MESSAGES: 12:3: note: possibly throwing constructor declared here + static V v; + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: construction of 'v' with static storage duration may throw an exception that cannot be caught + // CHECK-MESSAGES: 16:12: note: possibly throwing constructor declared here + + void f(S s, T t, U u, V v) { + S s2; // ok + T t2; // ok + U u2; // ok + V v2("v"); // ok + + thread_local S s3; // ok + thread_local T t3; // ok + thread_local U u3; // ok + thread_local V v3("v"); // ok + + static S s4; // ok + static T t4; // ok + static U u4; // ok + static V v4("v"); // ok + } +}; + +S Statics::s; +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: construction of 's' with static storage duration may throw an exception that cannot be caught [cert-err58-cpp] +// CHECK-MESSAGES: 4:3: note: possibly throwing constructor declared here +T Statics::t; +U Statics::u; +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: construction of 'u' with static storage duration may throw an exception that cannot be caught +// CHECK-MESSAGES: 12:3: note: possibly throwing constructor declared here +V Statics::v("v"); +// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: construction of 'v' with static storage duration may throw an exception that cannot be caught +// CHECK-MESSAGES: 16:12: note: possibly throwing constructor declared here |