Skip to content

Conversation

@firewave
Copy link
Collaborator

No description provided.

@firewave
Copy link
Collaborator Author

firewave commented Dec 13, 2025

This provides a cleaner callstack as a std::function object is never created.

Before:

#2 0x557f52ae1bb9 in CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0::operator()() const /home/user/CLionProjects/cppcheck/lib/cppcheck.cpp:1356:24
#3 0x557f52ae19fc in void std::__invoke_impl<void, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&>(std::__invoke_other, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/bits/invoke.h:63:14
#4 0x557f52ae18fc in std::enable_if<is_invocable_r_v<void, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&>, void>::type std::__invoke_r<void, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&>(CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/bits/invoke.h:113:2
#5 0x557f52ae14f4 in std::_Function_handler<void (), CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0>::_M_invoke(std::_Any_data const&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/bits/std_function.h:292:9
#6 0x557f521f2e4d in std::function<void ()>::operator()() const /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/bits/std_function.h:593:9
#7 0x557f521c5e91 in Timer::run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, ShowTime, TimerResultsIntf*, std::function<void ()> const&) /home/user/CLionProjects/cppcheck/lib/timer.h:96:9
#8 0x557f52aa643f in CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) /home/user/CLionProjects/cppcheck/lib/cppcheck.cpp:1355:13

After:

#2 0x5590d11f66e9 in CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0::operator()() const /home/user/CLionProjects/cppcheck/lib/cppcheck.cpp:1356:24
#3 0x5590d11de5f1 in void Timer::run<CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, ShowTime, TimerResultsIntf*, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0 const&) /home/user/CLionProjects/cppcheck/lib/timer.h:97:9
#4 0x5590d11bd84c in CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) /home/user/CLionProjects/cppcheck/lib/cppcheck.cpp:1355:13

I filed https://trac.cppcheck.net/ticket/14327 about suggesting this ourselves.

@sonarqubecloud
Copy link

@firewave firewave changed the title timer.h: template-ized Timer::run() template-ized Timer::run() Dec 13, 2025
@danmar
Copy link
Owner

danmar commented Dec 15, 2025

The problem is you throw away type safety. Concepts should be used to get sensible compiler error output. I have no idea what concepts to use here.

@firewave
Copy link
Collaborator Author

The problem is you throw away type safety. Concepts should be used to get sensible compiler error output. I have no idea what concepts to use here.

That could be addressed by adding a REQUIRES but we are not doing that in other places. I might take a look at this later.

@firewave firewave merged commit f934fa3 into danmar:main Dec 15, 2025
55 checks passed
@firewave firewave deleted the timer-f branch December 15, 2025 11:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants