brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.6 KiB · fd2a592 Raw
308 lines · plain
1// RUN: %check_clang_tidy %s llvmlibc-inline-function-decl %t2 3#ifndef LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_CHECKERS_LLVMLIBC_INLINEFUNCTIONDECL_H4#define LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_CHECKERS_LLVMLIBC_INLINEFUNCTIONDECL_H5 6#define LIBC_INLINE inline7 8namespace __llvm_libc {9 10LIBC_INLINE int addi(int a, int b) {11  return a + b;12}13 14LIBC_INLINE constexpr long addl(long a, long b) {15  return a + b;16}17 18constexpr long long addll(long long a, long long b) {19// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: 'addll' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]20// CHECK-FIXES: LIBC_INLINE constexpr long long addll(long long a, long long b) {21  return a + b;22}23 24inline unsigned long addul(unsigned long a, unsigned long b) {25// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: 'addul' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]26// CHECK-FIXES: LIBC_INLINE inline unsigned long addul(unsigned long a, unsigned long b) {27  return a + b;28}29 30class  MyClass {31  int A;32public:33  MyClass() : A(123) {}34  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'MyClass' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]35  // CHECK-FIXES:   LIBC_INLINE MyClass() : A(123) {}36 37  LIBC_INLINE MyClass(int V) : A(V) {}38 39  constexpr operator int() const { return A; }40  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'operator int' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]41  // CHECK-FIXES:   LIBC_INLINE constexpr operator int() const { return A; }42 43  LIBC_INLINE bool operator==(const MyClass &RHS) {44    return RHS.A == A;45  }46 47  static int getVal(const MyClass &V) {48  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'getVal' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]49  // CHECK-FIXES:   LIBC_INLINE static int getVal(const MyClass &V) {50    return V.A;51  }52 53  LIBC_INLINE static void setVal(MyClass &V, int A) {54    V.A = A;55  }56 57  constexpr static int addInt(MyClass &V, int A) {58  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'addInt' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]59  // CHECK-FIXES:   LIBC_INLINE constexpr static int addInt(MyClass &V, int A) {60    return V.A += A;61  }62 63  static LIBC_INLINE int mulInt(MyClass &V, int A) {64  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'mulInt' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]65    return V.A *= A;66  }67};68 69LIBC_INLINE void lambda() {70// CHECK-MESSAGES-NOT: :[[@LINE+4]]:3: warning: '__invoke' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]71// CHECK-MESSAGES-NOT: :[[@LINE+3]]:3: warning: 'operator void (*)()' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]72// CHECK-MESSAGES-NOT: :[[@LINE+2]]:3: warning: '~(lambda at [[FILENAME:.+]])' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]73// CHECK-MESSAGES-NOT: :[[@LINE+1]]:6: warning: 'operator()' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]74  [](){};75}76 77namespace issue_62746 {78 79void goodSimpleFunction();80void badSimpleFunction();81void badSimpleFunctionWrongLocation();82 83LIBC_INLINE void goodSimpleFunction() {}84 85inline void badSimpleFunction() {}86// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: 'badSimpleFunction' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]87// CHECK-FIXES: LIBC_INLINE inline void badSimpleFunction() {}88 89void LIBC_INLINE badSimpleFunctionWrongLocation() {}90// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: 'badSimpleFunctionWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]91 92template <typename T>93void goodTemplateFunction();94template <typename T>95void badTemplateFunction();96template <typename T>97void badTemplateFunctionWrongLocation();98 99template <typename T> LIBC_INLINE void goodTemplateFunction() {}100 101template <typename T> inline void badTemplateFunction() {}102// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: 'badTemplateFunction' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]103// CHECK-FIXES: template <typename T> LIBC_INLINE inline void badTemplateFunction() {}104 105template <typename T> void LIBC_INLINE badTemplateFunctionWrongLocation() {}106// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: 'badTemplateFunctionWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]107 108template <typename... Ts>109void goodVariadicFunction();110template <typename... Ts>111void badVariadicFunction();112template <typename... Ts>113void badVariadicFunctionWrongLocation();114 115template <typename... Ts> LIBC_INLINE void goodVariadicFunction() {}116 117template <typename... Ts> inline void badVariadicFunction() {}118// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'badVariadicFunction' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]119// CHECK-FIXES: template <typename... Ts> LIBC_INLINE inline void badVariadicFunction() {}120 121template <typename... Ts> void LIBC_INLINE badVariadicFunctionWrongLocation() {}122// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'badVariadicFunctionWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]123// CHECK-FIXES: template <typename... Ts> LIBC_INLINE void LIBC_INLINE badVariadicFunctionWrongLocation() {}124 125struct NoTemplate {126  void goodNoTemplate();127  void badNoTemplate();128  void badNoTemplateWrongLocation();129 130  template <typename T>131  void goodNestedTemplate();132  template <typename T>133  void badNestedTemplate();134  template <typename T>135  void badNestedTemplateWrongLocation();136 137  template <typename... Ts>138  void goodVariadicTemplate();139  template <typename... Ts>140  void badVariadicTemplate();141  template <typename... Ts>142  void badVariadicTemplateWrongLocation();143 144};145 146LIBC_INLINE void NoTemplate::goodNoTemplate() {}147 148inline void NoTemplate::badNoTemplate() {}149// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: 'badNoTemplate' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]150// CHECK-FIXES: LIBC_INLINE inline void NoTemplate::badNoTemplate() {}151 152void LIBC_INLINE NoTemplate::badNoTemplateWrongLocation() {}153// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: 'badNoTemplateWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]154// CHECK-FIXES: LIBC_INLINE void LIBC_INLINE NoTemplate::badNoTemplateWrongLocation() {}155 156template <typename T> LIBC_INLINE void NoTemplate::goodNestedTemplate() {}157 158template <typename T> inline void NoTemplate::badNestedTemplate() {}159// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: 'badNestedTemplate' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]160// CHECK-FIXES: template <typename T> LIBC_INLINE inline void NoTemplate::badNestedTemplate() {}161 162template <typename T> void LIBC_INLINE NoTemplate::badNestedTemplateWrongLocation() {}163// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: 'badNestedTemplateWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]164// CHECK-FIXES: template <typename T> LIBC_INLINE void LIBC_INLINE NoTemplate::badNestedTemplateWrongLocation() {}165 166template <typename... Ts> LIBC_INLINE void NoTemplate::goodVariadicTemplate() {}167 168template <typename... Ts> void inline NoTemplate::badVariadicTemplate() {}169// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'badVariadicTemplate' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]170// CHECK-FIXES: template <typename... Ts> LIBC_INLINE void inline NoTemplate::badVariadicTemplate() {}171 172template <typename... Ts> void LIBC_INLINE NoTemplate::badVariadicTemplateWrongLocation() {}173// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'badVariadicTemplateWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]174 175template <typename T>176struct SimpleTemplate {177  void goodSimpleTemplate();178  void badSimpleTemplate();179  void badSimpleTemplateWrongLocation();180 181  template <typename U>182  void goodNestedTemplate();183  template <typename U>184  void badNestedTemplate();185  template <typename U>186  void badNestedTemplateWrongLocation();187 188  template <typename... Ts>189  void goodNestedVariadicTemplate();190  template <typename... Ts>191  void badNestedVariadicTemplate();192  template <typename... Ts>193  void badNestedVariadicTemplateWrongLocation();194};195 196template <typename T> LIBC_INLINE void SimpleTemplate<T>::goodSimpleTemplate() {}197 198template <typename T> inline void SimpleTemplate<T>::badSimpleTemplate() {}199// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: 'badSimpleTemplate' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]200// CHECK-FIXES: template <typename T> LIBC_INLINE inline void SimpleTemplate<T>::badSimpleTemplate() {}201 202template <typename T> void LIBC_INLINE SimpleTemplate<T>::badSimpleTemplateWrongLocation() {}203// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: 'badSimpleTemplateWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]204 205template <typename T> template <typename U> LIBC_INLINE void SimpleTemplate<T>::goodNestedTemplate() {}206 207template <typename T> template <typename U> inline void SimpleTemplate<T>::badNestedTemplate() {}208// CHECK-MESSAGES: :[[@LINE-1]]:45: warning: 'badNestedTemplate' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]209// CHECK-FIXES: template <typename T> template <typename U> LIBC_INLINE inline void SimpleTemplate<T>::badNestedTemplate() {}210 211template <typename T> template <typename U> void LIBC_INLINE SimpleTemplate<T>::badNestedTemplateWrongLocation() {}212// CHECK-MESSAGES: :[[@LINE-1]]:45: warning: 'badNestedTemplateWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]213 214template <typename T> template <typename... Ts> LIBC_INLINE void SimpleTemplate<T>::goodNestedVariadicTemplate() {}215 216template <typename T> template <typename... Ts> inline void SimpleTemplate<T>::badNestedVariadicTemplate() {}217// CHECK-MESSAGES: :[[@LINE-1]]:49: warning: 'badNestedVariadicTemplate' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]218// CHECK-FIXES: template <typename T> template <typename... Ts> LIBC_INLINE inline void SimpleTemplate<T>::badNestedVariadicTemplate() {}219 220template <typename T> template <typename... Ts> void LIBC_INLINE SimpleTemplate<T>::badNestedVariadicTemplateWrongLocation() {}221// CHECK-MESSAGES: :[[@LINE-1]]:49: warning: 'badNestedVariadicTemplateWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]222 223template <typename... Ts>224struct VariadicTemplate {225  void goodVariadicTemplate();226  void badVariadicTemplate();227  void badVariadicTemplateWrongLocation();228 229  template <typename U>230  void goodNestedTemplate();231  template <typename U>232  void badNestedTemplate();233  template <typename U>234  void badNestedTemplateWrongLocation();235 236  template <typename... Us>237  void goodNestedVariadicTemplate();238  template <typename... Us>239  void badNestedVariadicTemplate();240  template <typename... Us>241  void badNestedVariadicTemplateWrongLocation();242};243 244template <typename... Ts> LIBC_INLINE void VariadicTemplate<Ts...>::goodVariadicTemplate() {}245 246template <typename... Ts> inline void VariadicTemplate<Ts...>::badVariadicTemplate() {}247// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'badVariadicTemplate' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]248// CHECK-FIXES: template <typename... Ts> LIBC_INLINE inline void VariadicTemplate<Ts...>::badVariadicTemplate() {}249 250template <typename... Ts> void LIBC_INLINE VariadicTemplate<Ts...>::badVariadicTemplateWrongLocation() {}251// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'badVariadicTemplateWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]252 253template <typename... Ts> template <typename U> LIBC_INLINE void VariadicTemplate<Ts...>::goodNestedTemplate() {}254 255template <typename... Ts> template <typename U> inline void VariadicTemplate<Ts...>::badNestedTemplate() {}256// CHECK-MESSAGES: :[[@LINE-1]]:49: warning: 'badNestedTemplate' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]257// CHECK-FIXES: template <typename... Ts> template <typename U> LIBC_INLINE inline void VariadicTemplate<Ts...>::badNestedTemplate() {}258 259template <typename... Ts> template <typename U> void LIBC_INLINE VariadicTemplate<Ts...>::badNestedTemplateWrongLocation() {}260// CHECK-MESSAGES: :[[@LINE-1]]:49: warning: 'badNestedTemplateWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]261 262template <typename... Ts> template <typename... Us> LIBC_INLINE void VariadicTemplate<Ts...>::goodNestedVariadicTemplate() {}263 264template <typename... Ts> template <typename... Us> inline void VariadicTemplate<Ts...>::badNestedVariadicTemplate() {}265// CHECK-MESSAGES: :[[@LINE-1]]:53: warning: 'badNestedVariadicTemplate' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]266// CHECK-FIXES: template <typename... Ts> template <typename... Us> LIBC_INLINE inline void VariadicTemplate<Ts...>::badNestedVariadicTemplate() {}267 268template <typename... Ts> template <typename... Us> void LIBC_INLINE VariadicTemplate<Ts...>::badNestedVariadicTemplateWrongLocation() {}269// CHECK-MESSAGES: :[[@LINE-1]]:53: warning: 'badNestedVariadicTemplateWrongLocation' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]270 271template <typename T>272void goodWeirdFormatting();273template <typename T>274void badWeirdFormatting();275 276template <typename T>LIBC_INLINE void goodWeirdFormatting() {}277 278template <typename T>void LIBC_INLINE badWeirdFormatting() {}279// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: 'badWeirdFormatting' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]280 281 282template <unsigned int NumberOfBits> struct HasMemberAndTemplate {283  char Data[NumberOfBits];284 285  void explicitFunction() {}286// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'explicitFunction' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]287// CHECK-FIXES: LIBC_INLINE void explicitFunction() {}288};289 290static auto instanceOfStruct = HasMemberAndTemplate<16>(); 291 292struct HasMemberAndExplicitDefault {293  int TrivialMember;294 295  HasMemberAndExplicitDefault() = default;296// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'HasMemberAndExplicitDefault' must be tagged with the LIBC_INLINE macro; the macro should be placed at the beginning of the declaration [llvmlibc-inline-function-decl]297// CHECK-FIXES: LIBC_INLINE HasMemberAndExplicitDefault() = default;298 299  ~HasMemberAndExplicitDefault() = delete;300};301 302 303} // namespace issue_62746304 305} // namespace __llvm_libc306 307#endif // LLVM_CLANG_TOOLS_EXTRA_TEST_CLANG_TIDY_CHECKERS_LLVMLIBC_INLINEFUNCTIONDECL_H308