// RUN: %check_clang_tidy %s android-cloexec-memfd-create %t #define MFD_ALLOW_SEALING 1 #define __O_CLOEXEC 3 #define MFD_CLOEXEC __O_CLOEXEC #define TEMP_FAILURE_RETRY(exp) \ ({ \ int _rc; \ do { \ _rc = (exp); \ } while (_rc == -1); \ }) #define NULL 0 extern "C" int memfd_create(const char *name, unsigned int flags); void a() { memfd_create(NULL, MFD_ALLOW_SEALING); // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: 'memfd_create' should use MFD_CLOEXEC where possible [android-cloexec-memfd-create] // CHECK-FIXES: memfd_create(NULL, MFD_ALLOW_SEALING | MFD_CLOEXEC) TEMP_FAILURE_RETRY(memfd_create(NULL, MFD_ALLOW_SEALING)); // CHECK-MESSAGES: :[[@LINE-1]]:58: warning: 'memfd_create' // CHECK-FIXES: TEMP_FAILURE_RETRY(memfd_create(NULL, MFD_ALLOW_SEALING | MFD_CLOEXEC)) } void f() { memfd_create(NULL, 3); // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: 'memfd_create' // CHECK-FIXES: memfd_create(NULL, 3 | MFD_CLOEXEC) TEMP_FAILURE_RETRY(memfd_create(NULL, 3)); // CHECK-MESSAGES: :[[@LINE-1]]:42: warning: 'memfd_create' // CHECK-FIXES: TEMP_FAILURE_RETRY(memfd_create(NULL, 3 | MFD_CLOEXEC)) int flag = 3; memfd_create(NULL, flag); TEMP_FAILURE_RETRY(memfd_create(NULL, flag)); } namespace i { int memfd_create(const char *name, unsigned int flags); void d() { memfd_create(NULL, MFD_ALLOW_SEALING); TEMP_FAILURE_RETRY(memfd_create(NULL, MFD_ALLOW_SEALING)); } } // namespace i void e() { memfd_create(NULL, MFD_CLOEXEC); TEMP_FAILURE_RETRY(memfd_create(NULL, MFD_CLOEXEC)); memfd_create(NULL, MFD_ALLOW_SEALING | MFD_CLOEXEC); TEMP_FAILURE_RETRY(memfd_create(NULL, MFD_ALLOW_SEALING | MFD_CLOEXEC)); } class G { public: int memfd_create(const char *name, unsigned int flags); void d() { memfd_create(NULL, MFD_ALLOW_SEALING); TEMP_FAILURE_RETRY(memfd_create(NULL, MFD_ALLOW_SEALING)); } };