forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
// RUN: %check_clang_tidy %s android-cloexec-fopen %t
 | 
						|
 | 
						|
#define FILE_OPEN_RO "r"
 | 
						|
 | 
						|
typedef int FILE;
 | 
						|
 | 
						|
extern "C" FILE *fopen(const char *filename, const char *mode, ...);
 | 
						|
extern "C" FILE *open(const char *filename, const char *mode, ...);
 | 
						|
 | 
						|
void f() {
 | 
						|
  fopen("filename", "r");
 | 
						|
  // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: use 'fopen' mode 'e' to set O_CLOEXEC [android-cloexec-fopen]
 | 
						|
  // CHECK-FIXES: fopen("filename", "re");
 | 
						|
 | 
						|
  fopen("filename", FILE_OPEN_RO);
 | 
						|
  // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: use 'fopen' mode 'e'
 | 
						|
  // CHECK-FIXES: fopen("filename", FILE_OPEN_RO "e");
 | 
						|
 | 
						|
  fopen("filename", "er");
 | 
						|
  // CHECK-MESSAGES-NOT: warning:
 | 
						|
  fopen("filename", "re");
 | 
						|
  // CHECK-MESSAGES-NOT: warning:
 | 
						|
  fopen("filename", "e");
 | 
						|
  // CHECK-MESSAGES-NOT: warning:
 | 
						|
  open("filename", "e");
 | 
						|
  // CHECK-MESSAGES-NOT: warning:
 | 
						|
 | 
						|
  char *str = "r";
 | 
						|
  fopen("filename", str);
 | 
						|
  // CHECK-MESSAGES-NOT: warning:
 | 
						|
  str = "re";
 | 
						|
  fopen("filename", str);
 | 
						|
  // CHECK-MESSAGES-NOT: warning:
 | 
						|
  char arr[2] = "r";
 | 
						|
  fopen("filename", arr);
 | 
						|
  // CHECK-MESSAGES-NOT: warning:
 | 
						|
  char arr2[3] = "re";
 | 
						|
  fopen("filename", arr2);
 | 
						|
  // CHECK-MESSAGES-NOT: warning:
 | 
						|
}
 | 
						|
 | 
						|
namespace i {
 | 
						|
int *fopen(const char *filename, const char *mode, ...);
 | 
						|
void g() {
 | 
						|
  fopen("filename", "e");
 | 
						|
  // CHECK-MESSAGES-NOT: warning:
 | 
						|
}
 | 
						|
} // namespace i
 | 
						|
 | 
						|
class C {
 | 
						|
public:
 | 
						|
  int *fopen(const char *filename, const char *mode, ...);
 | 
						|
  void h() {
 | 
						|
    fopen("filename", "e");
 | 
						|
    // CHECK-MESSAGES-NOT: warning:
 | 
						|
  }
 | 
						|
};
 |