[PATCH] D33497: clang-tidy check for __func__/__FUNCTION__ in lambdas
Bryce Liu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 24 08:46:48 PDT 2017
brycel added a comment.
In https://reviews.llvm.org/D33497#763307, @lebedev.ri wrote:
> 1. What about `__PRETTY_FUNCTION__` ?
`__PRETTY_FUNCTION__` is a little more useful, it at least tells you which function the lambda is defined in:
#include <stdio.h>
int main() {
auto f = [] {
printf("__func__: %s\n", __func__);
printf("__FUNCTION__: %s\n", __FUNCTION__);
printf("__PRETTY_FUNCTION__: %s\n", __PRETTY_FUNCTION__);
};
f();
}
results in the output:
__func__: operator()
__FUNCTION__: operator()
__PRETTY_FUNCTION__: auto main()::(anonymous class)::operator()() const
I think `__PRETTY_FUNCTION__` inside a lambda is useful enough not to warn about.
> 2. Consider following generic error handling macro: (ThrowException is some template function) ``` #undef STR #define STR(a) XSTR(a)
>
> #define ThrowExceptionHelper(CLASS, fmt, ...) ThrowException<CLASS>(__FILE__ ":" STR(__LINE__) ": %s: " fmt, __PRETTY_FUNCTION__, ##__VA_ARGS__) #endif ``` Which is called like `if(somethig) ThrowException(std::exception, "%s", "bar");` Even though the function name may be useless, file/line info is still there and is(?) correct. Perhaps there should not be a warning in such a case?
That's a good point. I'll look into suppressing the warning if we're in a macro definition where `__FILE__` and `__LINE__` are both used. It may suppress some warnings that would be legitimate (such as if `__FILE__`/`__LINE__` are written but not actually output anywhere), but in those cases it's probably impossible to figure out the author's intention.
https://reviews.llvm.org/D33497
More information about the cfe-commits
mailing list