diff options
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/android-cloexec-pipe2.cpp')
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/android-cloexec-pipe2.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/android-cloexec-pipe2.cpp b/clang-tools-extra/test/clang-tidy/android-cloexec-pipe2.cpp new file mode 100644 index 00000000000..4bda70fa77c --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/android-cloexec-pipe2.cpp @@ -0,0 +1,68 @@ +// RUN: %check_clang_tidy %s android-cloexec-pipe2 %t + +#define O_NONBLOCK 1 +#define __O_CLOEXEC 3 +#define O_CLOEXEC __O_CLOEXEC +#define TEMP_FAILURE_RETRY(exp) \ + ({ \ + int _rc; \ + do { \ + _rc = (exp); \ + } while (_rc == -1); \ + }) +#define NULL 0 + +extern "C" int pipe2(int pipefd[2], int flags); + +void warning() { + int pipefd[2]; + pipe2(pipefd, O_NONBLOCK); + // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'pipe2' + // CHECK-FIXES: pipe2(pipefd, O_NONBLOCK | O_CLOEXEC); + TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK)); + // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: 'pipe2' + // CHECK-FIXES: TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK | O_CLOEXEC)); +} + +void warningInMacroArugment() { + int pipefd[2]; + pipe2(pipefd, 3); + // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'pipe2' + // CHECK-FIXES: pipe2(pipefd, 3 | O_CLOEXEC); + TEMP_FAILURE_RETRY(pipe2(pipefd, 3)); + // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: 'pipe2' + // CHECK-FIXES: TEMP_FAILURE_RETRY(pipe2(pipefd, 3 | O_CLOEXEC)); + + int flag = O_NONBLOCK; + pipe2(pipefd, flag); + TEMP_FAILURE_RETRY(pipe2(pipefd, flag)); +} + +namespace i { +int pipe2(int pipefd[2], int flags); + +void noWarning() { + int pipefd[2]; + pipe2(pipefd, O_NONBLOCK); + TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK)); +} + +} // namespace i + +void noWarning() { + int pipefd[2]; + pipe2(pipefd, O_CLOEXEC); + TEMP_FAILURE_RETRY(pipe2(pipefd, O_CLOEXEC)); + pipe2(pipefd, O_NONBLOCK | O_CLOEXEC); + TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK | O_CLOEXEC)); +} + +class G { +public: + int pipe2(int pipefd[2], int flags); + void noWarning() { + int pipefd[2]; + pipe2(pipefd, O_NONBLOCK); + TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK)); + } +}; |

