brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 5c2bb57 Raw
63 lines · cpp
1// RUN: %check_clang_tidy -check-suffixes=,NO-CONFIG %s bugprone-lambda-function-name %t2// RUN: %check_clang_tidy %s bugprone-lambda-function-name %t -- -config="{CheckOptions: [{key: bugprone-lambda-function-name.IgnoreMacros, value: true}]}" --3 4 5void Foo(const char* a, const char* b, int c) {}6 7#define FUNC_MACRO Foo(__func__, "", 0)8#define FUNCTION_MACRO Foo(__FUNCTION__, "", 0)9#define EMBED_IN_ANOTHER_MACRO1 FUNC_MACRO10 11void Positives() {12  [] { __func__; }();13  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: inside a lambda, '__func__' expands to the name of the function call operator; consider capturing the name of the enclosing function explicitly [bugprone-lambda-function-name]14  [] { __FUNCTION__; }();15  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: inside a lambda, '__FUNCTION__' expands to the name of the function call operator; consider capturing the name of the enclosing function explicitly [bugprone-lambda-function-name]16  [] { FUNC_MACRO; }();17  // CHECK-MESSAGES-NO-CONFIG: :[[@LINE-1]]:8: warning: inside a lambda, '__func__' expands to the name of the function call operator; consider capturing the name of the enclosing function explicitly [bugprone-lambda-function-name]18  [] { FUNCTION_MACRO; }();19  // CHECK-MESSAGES-NO-CONFIG: :[[@LINE-1]]:8: warning: inside a lambda, '__FUNCTION__' expands to the name of the function call operator; consider capturing the name of the enclosing function explicitly [bugprone-lambda-function-name]20  [] { EMBED_IN_ANOTHER_MACRO1; }();21  // CHECK-MESSAGES-NO-CONFIG: :[[@LINE-1]]:8: warning: inside a lambda, '__func__' expands to the name of the function call operator; consider capturing the name of the enclosing function explicitly [bugprone-lambda-function-name]22  [] {23    __func__;24  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: inside a lambda, '__func__' expands to the name of the function call operator; consider capturing the name of the enclosing function explicitly [bugprone-lambda-function-name]25    struct S {26      void f() {27        __func__;28        [] {29          __func__;30  // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: inside a lambda, '__func__' expands to the name of the function call operator; consider capturing the name of the enclosing function explicitly [bugprone-lambda-function-name]31        }();32        __func__;33      }34    };35    __func__;36  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: inside a lambda, '__func__' expands to the name of the function call operator; consider capturing the name of the enclosing function explicitly [bugprone-lambda-function-name]37  }();38}39 40#define FUNC_MACRO_WITH_FILE_AND_LINE Foo(__func__, __FILE__, __LINE__)41#define FUNCTION_MACRO_WITH_FILE_AND_LINE Foo(__FUNCTION__, __FILE__, __LINE__)42#define EMBED_IN_ANOTHER_MACRO2 FUNC_MACRO_WITH_FILE_AND_LINE43 44void Negatives() {45  __func__;46  __FUNCTION__;47 48  // __PRETTY_FUNCTION__ should not trigger a warning because its value is49  // actually potentially useful.50  __PRETTY_FUNCTION__;51  [] { __PRETTY_FUNCTION__; }();52 53  // Don't warn if __func__/__FUNCTION is used inside a macro that also uses54  // __FILE__ and __LINE__, on the assumption that __FILE__ and __LINE__ will55  // be useful even if __func__/__FUNCTION__ is not.56  [] { FUNC_MACRO_WITH_FILE_AND_LINE; }();57  [] { FUNCTION_MACRO_WITH_FILE_AND_LINE; }();58  [] { EMBED_IN_ANOTHER_MACRO2; }();59 60  [] (const char* func = __func__) { func; }();61  [func=__func__] { func; }();62}63