xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/android/cloexec-pipe.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s android-cloexec-pipe %t
2*89a1d03eSRichard 
3*89a1d03eSRichard extern "C" int pipe(int pipefd[2]);
4*89a1d03eSRichard 
warning()5*89a1d03eSRichard void warning() {
6*89a1d03eSRichard   int pipefd[2];
7*89a1d03eSRichard   pipe(pipefd);
8*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: prefer pipe2() with O_CLOEXEC to avoid leaking file descriptors to child processes [android-cloexec-pipe]
9*89a1d03eSRichard   // CHECK-FIXES: pipe2(pipefd, O_CLOEXEC);
10*89a1d03eSRichard }
11*89a1d03eSRichard 
12*89a1d03eSRichard namespace i {
13*89a1d03eSRichard int pipe(int pipefd[2]);
noWarningInNamespace()14*89a1d03eSRichard void noWarningInNamespace() {
15*89a1d03eSRichard   int pipefd[2];
16*89a1d03eSRichard   pipe(pipefd);
17*89a1d03eSRichard }
18*89a1d03eSRichard } // namespace i
19*89a1d03eSRichard 
20*89a1d03eSRichard class C {
21*89a1d03eSRichard public:
22*89a1d03eSRichard   int pipe(int pipefd[2]);
noWarningForMemberFunction()23*89a1d03eSRichard   void noWarningForMemberFunction() {
24*89a1d03eSRichard     int pipefd[2];
25*89a1d03eSRichard     pipe(pipefd);
26*89a1d03eSRichard   }
27*89a1d03eSRichard };
28