1 // RUN: %check_clang_tidy %s bugprone-bitwise-pointer-cast %t 2 3 void memcpy(void* to, void* dst, unsigned long long size) 4 { 5 // Dummy implementation for the purpose of the test 6 } 7 8 namespace std 9 { 10 using ::memcpy; 11 } 12 13 void pointer2pointer() 14 { 15 int x{}; 16 int* px{}; 17 float y{}; 18 float* py{}; 19 20 memcpy(&py, &px, sizeof(px)); 21 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not use 'memcpy' to cast between pointers [bugprone-bitwise-pointer-cast] 22 std::memcpy(&py, &px, sizeof(px)); 23 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not use 'memcpy' to cast between pointers [bugprone-bitwise-pointer-cast] 24 25 std::memcpy(&y, &x, sizeof(x)); 26 } 27 28 // Pointer-integer conversions are allowed by this check 29 void int2pointer() 30 { 31 unsigned long long addr{}; 32 float* p{}; 33 std::memcpy(&p, &addr, sizeof(addr)); 34 } 35 36 void pointer2int() 37 { 38 unsigned long long addr{}; 39 float* p{}; 40 std::memcpy(&addr, &p, sizeof(p)); 41 } 42