| // 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()); |
| } |