And clang's analyzer has different UI concept via web, which is far superior. And for the screen valgrind has a far superior solution. I don't see the advantage of gcc's analyzer yet. Far too verbose. and the most important errors, like wrong optimizer decisions based on their interpretation of UB code are still silenced.
Or the famous optimized away memset call. Which is a security issue. At least a warning would be in order. Or at least an analyzer warning.
> warning: after 3 levels of inlining (potentially across files with Link Time Optimization), some common subexpression elimination, after hoisting this thing out of a loop and proving that these 13 pointers don't alias, we found a case where you're doing something undefined. This could either be because there is a bug in your code, or because you have macros and inlining and the invalid code is dynamically unreachable but we can't prove that it is dead.
The bar of zero false negatives is not useful for me when the alternative is to rely solely human code analysis and tests.
One thing I learned from using this tool is that static analyzers need to be able to configured to know about side effects of functions that are in libraries. For example, if a library function will free memory, it is important that there's a way to tell the analyzer about this behavior to avoid false positives about leaks.
Proper design, careful coding, static analysis, code review, and various forms of testing all have roles to play in delivering reliable code.
Requiring the user to add piles of annotations still sucks, even if you are smart and do something like abductive inference to identify minimally required annotations. Even something as simple as the checker framework in Java has trouble getting people to write correct annotations and has a few corner cases (what is the nullness property of a field in code reachable from a constructor, for example). Nobody does this stuff correctly for something like dataflow annotations on methods.
I've got a PhD in this and develop a static analysis tool for my job. I've never seen a productionized, fully sound tool for general purpose static analysis of general programs that solves problems more difficult that slightly augmented type checking.
The alternative is that your abstract interpretation is pinning to Top very quickly and then throwing false positives everywhere.
If all goes according to plan, I guess in a couple of decades there won't be any modern computer not making use of it.
https://msrc-blog.microsoft.com/2019/07/16/a-proactive-appro...
https://security.googleblog.com/2019/08/adopting-arm-memory-...
Lint exists since 1979.
So I do welcome hardware memory tagging, even if isn't perfect.
Apparently Google thinks the same way, given the Android is getting hardware memory tagging as requirement on ARM, with C and C++ still having more visibility than Rust on Fuchsia.
Just like Microsoft is doing by pursuing research in Project Verona and CHERI CPU, Checked C (hiring now for the team), Visual C++ Core Guidelines static analyser, focus on .NET, instead of going full speed with Rust.
Similar story can be told about Apple's ongoing changes.