[PATCH] D66627: [clang-tidy] add checks to bugprone-posix-return
jcai19 updated this revision to Diff 220393. jcai19 added a comment. Thanks for the confirmation! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66627/new/ https://reviews.llvm.org/D66627 Files: clang-tools-extra/clang-tidy/bugprone/PosixReturnCheck.cpp clang-tools-extra/clang-tidy/bugprone/PosixReturnCheck.h clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/docs/clang-tidy/checks/bugprone-posix-return.rst clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp Index: clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp === --- clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp +++ clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp @@ -9,6 +9,16 @@ typedef decltype(sizeof(int)) size_t; typedef struct __posix_spawn_file_actions* posix_spawn_file_actions_t; typedef struct __posix_spawnattr* posix_spawnattr_t; +# define __CPU_SETSIZE 1024 +# define __NCPUBITS (8 * sizeof (__cpu_mask)) +typedef unsigned long int __cpu_mask; +typedef struct +{ + __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS]; +} cpu_set_t; +typedef struct _opaque_pthread_t *__darwin_pthread_t; +typedef __darwin_pthread_t pthread_t; +typedef struct pthread_attr_t_ *pthread_attr_t; extern "C" int posix_fadvise(int fd, off_t offset, off_t len, int advice); extern "C" int posix_fallocate(int fd, off_t offset, off_t len); @@ -23,6 +33,12 @@ const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, char *const argv[], char *const envp[]); +extern "C" int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); +extern "C" int pthread_attr_setaffinity_np(pthread_attr_t *attr, size_t cpusetsize, const cpu_set_t *cpuset); +extern "C" int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); +extern "C" int pthread_attr_init(pthread_attr_t *attr); +extern "C" int pthread_yield(void); + void warningLessThanZero() { if (posix_fadvise(0, 0, 0, 0) < 0) {} @@ -43,11 +59,38 @@ if (posix_spawnp(NULL, NULL, NULL, NULL, {NULL}, {NULL}) < 0) {} // CHECK-MESSAGES: :[[@LINE-1]]:60: warning: // CHECK-FIXES: posix_spawnp(NULL, NULL, NULL, NULL, {NULL}, {NULL}) > 0 + if (pthread_create(NULL, NULL, NULL, NULL) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: the comparison always evaluates to false because pthread_create always returns non-negative values + // CHECK-FIXES: pthread_create(NULL, NULL, NULL, NULL) > 0 + if (pthread_attr_setaffinity_np(NULL, 0, NULL) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: + // CHECK-FIXES: pthread_attr_setaffinity_np(NULL, 0, NULL) > 0 + if (pthread_attr_setschedpolicy(NULL, 0) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: + // CHECK-FIXES: pthread_attr_setschedpolicy(NULL, 0) > 0) + if (pthread_attr_init(NULL) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: + // CHECK-FIXES: pthread_attr_init(NULL) > 0 + if (pthread_yield() < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: + // CHECK-FIXES: pthread_yield() > 0 + } void warningAlwaysTrue() { if (posix_fadvise(0, 0, 0, 0) >= 0) {} // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: the comparison always evaluates to true because posix_fadvise always returns non-negative values + if (pthread_create(NULL, NULL, NULL, NULL) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: the comparison always evaluates to true because pthread_create always returns non-negative values + if (pthread_attr_setaffinity_np(NULL, 0, NULL) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: + if (pthread_attr_setschedpolicy(NULL, 0) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: + if (pthread_attr_init(NULL) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: + if (pthread_yield() >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: + } void warningEqualsNegative() { @@ -69,6 +112,15 @@ // CHECK-MESSAGES: :[[@LINE-1]]:59: warning: if (posix_spawnp(NULL, NULL, NULL, NULL, {NULL}, {NULL}) == -1) {} // CHECK-MESSAGES: :[[@LINE-1]]:60: warning: + if (pthread_create(NULL, NULL, NULL, NULL) == -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: pthread_create + if (pthread_create(NULL, NULL, NULL, NULL) != -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + if (pthread_create(NULL, NULL, NULL, NULL) <= -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + if (pthread_create(NULL, NULL, NULL, NULL) < -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + } void WarningWithMacro() { @@ -85,6 +137,20 @@ // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: if (posix_fadvise(0, 0, 0, 0) < NEGATIVE_ONE) {} // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: + if (pthread_create(NULL, NULL, NULL, NULL) < ZERO) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + // CHECK-FIXES:
[PATCH] D66627: [clang-tidy] add checks to bugprone-posix-return
gribozavr accepted this revision. gribozavr added inline comments. Comment at: clang-tools-extra/docs/ReleaseNotes.rst:70 +- New :doc:`bugprone-posix-return + ` check. jcai19 wrote: > Eugene.Zelenko wrote: > > Check is not new, just modified. Such check should be after new checks. > Is Modified the right keyword for modification? Thanks I'd say "improved" instead of modified. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66627/new/ https://reviews.llvm.org/D66627 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D66627: [clang-tidy] add checks to bugprone-posix-return
jcai19 marked 3 inline comments as done. jcai19 added inline comments. Comment at: clang-tools-extra/docs/ReleaseNotes.rst:70 +- New :doc:`bugprone-posix-return + ` check. Eugene.Zelenko wrote: > Check is not new, just modified. Such check should be after new checks. Is Modified the right keyword for modification? Thanks Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66627/new/ https://reviews.llvm.org/D66627 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D66627: [clang-tidy] add checks to bugprone-posix-return
jcai19 updated this revision to Diff 217532. jcai19 added a comment. Fix format and test cases. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66627/new/ https://reviews.llvm.org/D66627 Files: clang-tools-extra/clang-tidy/bugprone/PosixReturnCheck.cpp clang-tools-extra/clang-tidy/bugprone/PosixReturnCheck.h clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/docs/clang-tidy/checks/bugprone-posix-return.rst clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp Index: clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp === --- clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp +++ clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp @@ -9,6 +9,16 @@ typedef decltype(sizeof(int)) size_t; typedef struct __posix_spawn_file_actions* posix_spawn_file_actions_t; typedef struct __posix_spawnattr* posix_spawnattr_t; +# define __CPU_SETSIZE 1024 +# define __NCPUBITS (8 * sizeof (__cpu_mask)) +typedef unsigned long int __cpu_mask; +typedef struct +{ + __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS]; +} cpu_set_t; +typedef struct _opaque_pthread_t *__darwin_pthread_t; +typedef __darwin_pthread_t pthread_t; +typedef struct pthread_attr_t_ *pthread_attr_t; extern "C" int posix_fadvise(int fd, off_t offset, off_t len, int advice); extern "C" int posix_fallocate(int fd, off_t offset, off_t len); @@ -23,6 +33,12 @@ const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, char *const argv[], char *const envp[]); +extern "C" int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); +extern "C" int pthread_attr_setaffinity_np(pthread_attr_t *attr, size_t cpusetsize, const cpu_set_t *cpuset); +extern "C" int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); +extern "C" int pthread_attr_init(pthread_attr_t *attr); +extern "C" int pthread_yield(void); + void warningLessThanZero() { if (posix_fadvise(0, 0, 0, 0) < 0) {} @@ -43,11 +59,38 @@ if (posix_spawnp(NULL, NULL, NULL, NULL, {NULL}, {NULL}) < 0) {} // CHECK-MESSAGES: :[[@LINE-1]]:60: warning: // CHECK-FIXES: posix_spawnp(NULL, NULL, NULL, NULL, {NULL}, {NULL}) > 0 + if (pthread_create(NULL, NULL, NULL, NULL) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: the comparison always evaluates to false because pthread_create always returns non-negative values + // CHECK-FIXES: pthread_create(NULL, NULL, NULL, NULL) > 0 + if (pthread_attr_setaffinity_np(NULL, 0, NULL) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: + // CHECK-FIXES: pthread_attr_setaffinity_np(NULL, 0, NULL) > 0 + if (pthread_attr_setschedpolicy(NULL, 0) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: + // CHECK-FIXES: pthread_attr_setschedpolicy(NULL, 0) > 0) + if (pthread_attr_init(NULL) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: + // CHECK-FIXES: pthread_attr_init(NULL) > 0 + if (pthread_yield() < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: + // CHECK-FIXES: pthread_yield() > 0 + } void warningAlwaysTrue() { if (posix_fadvise(0, 0, 0, 0) >= 0) {} // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: the comparison always evaluates to true because posix_fadvise always returns non-negative values + if (pthread_create(NULL, NULL, NULL, NULL) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: the comparison always evaluates to true because pthread_create always returns non-negative values + if (pthread_attr_setaffinity_np(NULL, 0, NULL) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: + if (pthread_attr_setschedpolicy(NULL, 0) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: + if (pthread_attr_init(NULL) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: + if (pthread_yield() >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: + } void warningEqualsNegative() { @@ -69,6 +112,15 @@ // CHECK-MESSAGES: :[[@LINE-1]]:59: warning: if (posix_spawnp(NULL, NULL, NULL, NULL, {NULL}, {NULL}) == -1) {} // CHECK-MESSAGES: :[[@LINE-1]]:60: warning: + if (pthread_create(NULL, NULL, NULL, NULL) == -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: pthread_create + if (pthread_create(NULL, NULL, NULL, NULL) != -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + if (pthread_create(NULL, NULL, NULL, NULL) <= -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + if (pthread_create(NULL, NULL, NULL, NULL) < -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + } void WarningWithMacro() { @@ -85,6 +137,20 @@ // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: if (posix_fadvise(0, 0, 0, 0) < NEGATIVE_ONE) {} // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: + if (pthread_create(NULL, NULL, NULL, NULL) < ZERO) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + // CHECK-FIXES:
[PATCH] D66627: [clang-tidy] add checks to bugprone-posix-return
gribozavr accepted this revision. gribozavr added a comment. This revision is now accepted and ready to land. LGTM with all comments addressed. Comment at: clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp:169 int posix_fadvise(int fd, off_t offset, off_t len, int advice); +int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); Maybe pick a simpler function for this test, like pthread_yield? Comment at: clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp:191 int posix_fadvise(int fd, off_t offset, off_t len, int advice); + int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); Ditto, pthread_yield would be simpler to declare. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66627/new/ https://reviews.llvm.org/D66627 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D66627: [clang-tidy] add checks to bugprone-posix-return
Eugene.Zelenko added inline comments. Comment at: clang-tools-extra/docs/ReleaseNotes.rst:70 +- New :doc:`bugprone-posix-return + ` check. Check is not new, just modified. Such check should be after new checks. Comment at: clang-tools-extra/docs/ReleaseNotes.rst:71 +- New :doc:`bugprone-posix-return + ` check. + This check now also checks if any calls to pthread_* functions expect Please insert empty line below. Comment at: clang-tools-extra/docs/ReleaseNotes.rst:72 + ` check. + This check now also checks if any calls to pthread_* functions expect + negative return values. Please omit //This check//. Please enclose pthread_* in double back-ticks. Comment at: clang-tools-extra/docs/clang-tidy/checks/bugprone-posix-return.rst:6 -Checks if any calls to POSIX functions (except ``posix_openpt``) expect negative -return values. These functions return either ``0`` on success or an ``errno`` on failure, -which is positive only. +Checks if any calls to pthread_* or posix_* functions (except ``posix_openpt``) +expect negative return values. These functions return either ``0`` on success Please enclose pthread_* and posix_* in double back-ticks. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66627/new/ https://reviews.llvm.org/D66627 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D66627: [clang-tidy] add checks to bugprone-posix-return
jcai19 updated this revision to Diff 217236. jcai19 added a comment. Update Release Notes and check documentation. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66627/new/ https://reviews.llvm.org/D66627 Files: clang-tools-extra/clang-tidy/bugprone/PosixReturnCheck.cpp clang-tools-extra/clang-tidy/bugprone/PosixReturnCheck.h clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/docs/clang-tidy/checks/bugprone-posix-return.rst clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp Index: clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp === --- clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp +++ clang-tools-extra/test/clang-tidy/bugprone-posix-return.cpp @@ -9,6 +9,16 @@ typedef decltype(sizeof(int)) size_t; typedef struct __posix_spawn_file_actions* posix_spawn_file_actions_t; typedef struct __posix_spawnattr* posix_spawnattr_t; +# define __CPU_SETSIZE 1024 +# define __NCPUBITS (8 * sizeof (__cpu_mask)) +typedef unsigned long int __cpu_mask; +typedef struct +{ + __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS]; +} cpu_set_t; +typedef struct _opaque_pthread_t *__darwin_pthread_t; +typedef __darwin_pthread_t pthread_t; +typedef struct pthread_attr_t_ *pthread_attr_t; extern "C" int posix_fadvise(int fd, off_t offset, off_t len, int advice); extern "C" int posix_fallocate(int fd, off_t offset, off_t len); @@ -23,6 +33,12 @@ const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, char *const argv[], char *const envp[]); +extern "C" int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); +extern "C" int pthread_attr_setaffinity_np(pthread_attr_t *attr, size_t cpusetsize, const cpu_set_t *cpuset); +extern "C" int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); +extern "C" int pthread_attr_init(pthread_attr_t *attr); +extern "C" int pthread_yield(void); + void warningLessThanZero() { if (posix_fadvise(0, 0, 0, 0) < 0) {} @@ -43,11 +59,38 @@ if (posix_spawnp(NULL, NULL, NULL, NULL, {NULL}, {NULL}) < 0) {} // CHECK-MESSAGES: :[[@LINE-1]]:60: warning: // CHECK-FIXES: posix_spawnp(NULL, NULL, NULL, NULL, {NULL}, {NULL}) > 0 + if (pthread_create(NULL, NULL, NULL, NULL) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: the comparison always evaluates to false because pthread_create always returns non-negative values + // CHECK-FIXES: pthread_create(NULL, NULL, NULL, NULL) > 0 + if (pthread_attr_setaffinity_np(NULL, 0, NULL) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: + // CHECK-FIXES: pthread_attr_setaffinity_np(NULL, 0, NULL) > 0 + if (pthread_attr_setschedpolicy(NULL, 0) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: + // CHECK-FIXES: pthread_attr_setschedpolicy(NULL, 0) > 0) + if (pthread_attr_init(NULL) < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: + // CHECK-FIXES: pthread_attr_init(NULL) > 0 + if (pthread_yield() < 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: + // CHECK-FIXES: pthread_yield() > 0 + } void warningAlwaysTrue() { if (posix_fadvise(0, 0, 0, 0) >= 0) {} // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: the comparison always evaluates to true because posix_fadvise always returns non-negative values + if (pthread_create(NULL, NULL, NULL, NULL) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: the comparison always evaluates to true because pthread_create always returns non-negative values + if (pthread_attr_setaffinity_np(NULL, 0, NULL) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: + if (pthread_attr_setschedpolicy(NULL, 0) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: + if (pthread_attr_init(NULL) >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: + if (pthread_yield() >= 0) {} + // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: + } void warningEqualsNegative() { @@ -69,6 +112,15 @@ // CHECK-MESSAGES: :[[@LINE-1]]:59: warning: if (posix_spawnp(NULL, NULL, NULL, NULL, {NULL}, {NULL}) == -1) {} // CHECK-MESSAGES: :[[@LINE-1]]:60: warning: + if (pthread_create(NULL, NULL, NULL, NULL) == -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: pthread_create + if (pthread_create(NULL, NULL, NULL, NULL) != -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + if (pthread_create(NULL, NULL, NULL, NULL) <= -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + if (pthread_create(NULL, NULL, NULL, NULL) < -1) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + } void WarningWithMacro() { @@ -85,6 +137,20 @@ // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: if (posix_fadvise(0, 0, 0, 0) < NEGATIVE_ONE) {} // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: + if (pthread_create(NULL, NULL, NULL, NULL) < ZERO) {} + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: + //
[PATCH] D66627: [clang-tidy] add checks to bugprone-posix-return
Eugene.Zelenko added a comment. It'll be reasonable to mention changes in Release Notes and check documentation. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66627/new/ https://reviews.llvm.org/D66627 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits