65 lines
3.1 KiB
C++
65 lines
3.1 KiB
C++
// RUN: %check_clang_tidy %s bugprone-multi-level-implicit-pointer-conversion %t
|
|
|
|
using OneStar = void*;
|
|
using OneStarFancy = OneStar;
|
|
|
|
void takeFirstLevelVoidPtr(OneStar message);
|
|
void takeFirstLevelConstVoidPtr(const OneStarFancy message);
|
|
void takeFirstLevelConstVoidPtrConst(const void* const message);
|
|
void takeSecondLevelVoidPtr(void** message);
|
|
|
|
void** getSecondLevelVoidPtr();
|
|
void* getFirstLevelVoidPtr();
|
|
int** getSecondLevelIntPtr();
|
|
int* getFirstLevelIntPtr();
|
|
|
|
int table[5];
|
|
|
|
void test()
|
|
{
|
|
void** secondLevelVoidPtr;
|
|
int* firstLevelIntPtr;
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:13: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
void* a = getSecondLevelVoidPtr();
|
|
|
|
void** b = getSecondLevelVoidPtr();
|
|
void* c = getFirstLevelVoidPtr();
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:13: warning: multilevel pointer conversion from 'int **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
void* d = getSecondLevelIntPtr();
|
|
|
|
takeFirstLevelVoidPtr(&table);
|
|
|
|
takeFirstLevelVoidPtr(firstLevelIntPtr);
|
|
|
|
takeFirstLevelVoidPtr(getFirstLevelIntPtr());
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:25: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
takeFirstLevelVoidPtr(secondLevelVoidPtr);
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:30: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
takeFirstLevelConstVoidPtr(secondLevelVoidPtr);
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:35: warning: multilevel pointer conversion from 'void **' to 'const void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
takeFirstLevelConstVoidPtrConst(secondLevelVoidPtr);
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:35: warning: multilevel pointer conversion from 'void ***' to 'const void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
takeFirstLevelConstVoidPtrConst(&secondLevelVoidPtr);
|
|
|
|
takeSecondLevelVoidPtr(secondLevelVoidPtr);
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:25: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
takeFirstLevelVoidPtr(getSecondLevelVoidPtr());
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:30: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
takeFirstLevelConstVoidPtr(getSecondLevelVoidPtr());
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:35: warning: multilevel pointer conversion from 'void **' to 'const void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
takeFirstLevelConstVoidPtrConst(getSecondLevelVoidPtr());
|
|
|
|
// CHECK-MESSAGES: :[[@LINE+1]]:25: warning: multilevel pointer conversion from 'int **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
|
|
takeFirstLevelVoidPtr(getSecondLevelIntPtr());
|
|
|
|
takeSecondLevelVoidPtr(getSecondLevelVoidPtr());
|
|
}
|