69 lines · cpp
1// RUN: %check_clang_tidy %s android-cloexec-pipe2 %t2 3#define O_NONBLOCK 14#define __O_CLOEXEC 35#define O_CLOEXEC __O_CLOEXEC6#define TEMP_FAILURE_RETRY(exp) \7 ({ \8 int _rc; \9 do { \10 _rc = (exp); \11 } while (_rc == -1); \12 })13#define NULL 014 15extern "C" int pipe2(int pipefd[2], int flags);16 17void warning() {18 int pipefd[2];19 pipe2(pipefd, O_NONBLOCK);20 // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'pipe2'21 // CHECK-FIXES: pipe2(pipefd, O_NONBLOCK | O_CLOEXEC);22 TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK));23 // CHECK-MESSAGES: :[[@LINE-1]]:46: warning: 'pipe2'24 // CHECK-FIXES: TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK | O_CLOEXEC));25}26 27void warningInMacroArugment() {28 int pipefd[2];29 pipe2(pipefd, 3);30 // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'pipe2'31 // CHECK-FIXES: pipe2(pipefd, 3 | O_CLOEXEC);32 TEMP_FAILURE_RETRY(pipe2(pipefd, 3));33 // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: 'pipe2'34 // CHECK-FIXES: TEMP_FAILURE_RETRY(pipe2(pipefd, 3 | O_CLOEXEC));35 36 int flag = O_NONBLOCK;37 pipe2(pipefd, flag);38 TEMP_FAILURE_RETRY(pipe2(pipefd, flag));39}40 41namespace i {42int pipe2(int pipefd[2], int flags);43 44void noWarning() {45 int pipefd[2];46 pipe2(pipefd, O_NONBLOCK);47 TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK));48}49 50} // namespace i51 52void noWarning() {53 int pipefd[2];54 pipe2(pipefd, O_CLOEXEC);55 TEMP_FAILURE_RETRY(pipe2(pipefd, O_CLOEXEC));56 pipe2(pipefd, O_NONBLOCK | O_CLOEXEC);57 TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK | O_CLOEXEC));58}59 60class G {61public:62 int pipe2(int pipefd[2], int flags);63 void noWarning() {64 int pipefd[2];65 pipe2(pipefd, O_NONBLOCK);66 TEMP_FAILURE_RETRY(pipe2(pipefd, O_NONBLOCK));67 }68};69