brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 6868f9e Raw
78 lines · cpp
1// RUN: %check_clang_tidy %s bugprone-multi-level-implicit-pointer-conversion %t2 3using OneStar = void*;4using OneStarFancy = OneStar;5 6void takeFirstLevelVoidPtr(OneStar message);7void takeFirstLevelConstVoidPtr(const OneStarFancy message);8void takeFirstLevelConstVoidPtrConst(const void* const message);9void takeSecondLevelVoidPtr(void** message);10 11void** getSecondLevelVoidPtr();12void* getFirstLevelVoidPtr();13int** getSecondLevelIntPtr();14int* getFirstLevelIntPtr();15 16int table[5];17 18void test()19{20  void** secondLevelVoidPtr;21  int* firstLevelIntPtr;22 23  // CHECK-MESSAGES: :[[@LINE+1]]:13: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]24  void* a = getSecondLevelVoidPtr();25 26  void** b = getSecondLevelVoidPtr();27  void* c = getFirstLevelVoidPtr();28 29  // CHECK-MESSAGES: :[[@LINE+1]]:13: warning: multilevel pointer conversion from 'int **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]30  void* d = getSecondLevelIntPtr();31 32  takeFirstLevelVoidPtr(&table);33 34  takeFirstLevelVoidPtr(firstLevelIntPtr);35 36  takeFirstLevelVoidPtr(getFirstLevelIntPtr());37 38  // CHECK-MESSAGES: :[[@LINE+1]]:25: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]39  takeFirstLevelVoidPtr(secondLevelVoidPtr);40 41  // CHECK-MESSAGES: :[[@LINE+1]]:30: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]42  takeFirstLevelConstVoidPtr(secondLevelVoidPtr);43 44  // CHECK-MESSAGES: :[[@LINE+1]]:35: warning: multilevel pointer conversion from 'void **' to 'const void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]45  takeFirstLevelConstVoidPtrConst(secondLevelVoidPtr);46 47  // CHECK-MESSAGES: :[[@LINE+1]]:35: warning: multilevel pointer conversion from 'void ***' to 'const void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]48  takeFirstLevelConstVoidPtrConst(&secondLevelVoidPtr);49 50  takeSecondLevelVoidPtr(secondLevelVoidPtr);51 52  // CHECK-MESSAGES: :[[@LINE+1]]:25: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]53  takeFirstLevelVoidPtr(getSecondLevelVoidPtr());54 55  // CHECK-MESSAGES: :[[@LINE+1]]:30: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]56  takeFirstLevelConstVoidPtr(getSecondLevelVoidPtr());57 58  // CHECK-MESSAGES: :[[@LINE+1]]:35: warning: multilevel pointer conversion from 'void **' to 'const void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]59  takeFirstLevelConstVoidPtrConst(getSecondLevelVoidPtr());60 61  // CHECK-MESSAGES: :[[@LINE+1]]:25: warning: multilevel pointer conversion from 'int **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]62  takeFirstLevelVoidPtr(getSecondLevelIntPtr());63 64  takeSecondLevelVoidPtr(getSecondLevelVoidPtr());65}66 67namespace PR93959 {68  void free(void*);69 70  void test() {71    char **p = nullptr;72    free(p);73    // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: multilevel pointer conversion from 'char **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]74    free((void *)p);75    free(static_cast<void *>(p));76  }77}78