<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi all!<br><br>This mail is a heads up for out-of-tree checker developers that I'm planning to land a variety of changes to how checker registration works. Also, I already commited some changes to make the command line interface a little less annoying. While I will properly document most of these in some form or another with a file in the actual repo, I'll leave about a week for everyone to raise objections.<div><br></div><div>===--- Checker registration ---===</div><div><br></div><div>Registering more than one checker in a registry function leads to multiple checkers receiving the same name. The solution was to reimplement parts on the checker registration process.</div><div><br></div><div>1. From now, all checkers should have a corresponding <font face="monospace, monospace">shouldRegister##CHECKERNAME</font> function defined, similar to <font face="monospace, monospace">register##CHECKERNAME</font>. The intent here is that once a registry function is called, it should register the checker. If based on some language options you chose not to register your checker within <font face="monospace, monospace">register##CHECKERNAME</font>, please move all such conditions to the new function.</div><div><a href="https://reviews.llvm.org/D55424">https://reviews.llvm.org/D55424</a><br></div><div><br></div><div>2. A registry function is no longer allowed to register more then one checker. Also, <font face="monospace, monospace">CheckerManager::registerChecker<CHECKER></font> may only be called once per checker. If you intend to acquire a checker object within a registry function (for example, if it merely enables extension to the main checker), please use <font face="monospace, monospace">CheckerManager::getChecker<CHECKER></font>. You can ensure that the checker you'd like to acquire is already registered by adding it as a dependency via <font face="monospace, monospace">CheckerRegistry::addDependency</font>.</div><div><a href="https://reviews.llvm.org/D54438">https://reviews.llvm.org/D54438</a><br></div><div><a href="https://reviews.llvm.org/D55429">https://reviews.llvm.org/D55429</a><br></div><div><br></div><div>3. <font face="monospace, monospace">CheckerRegistry</font> was moved from the <font face="monospace, monospace">Core</font> directory to <font face="monospace, monospace">Frontend</font>.<br></div><div><a href="https://reviews.llvm.org/D54436">https://reviews.llvm.org/D54436</a><br></div><div><br></div><div>===--- Command line interface ---===</div><div><br></div><div>Mainly focusing on <font face="monospace, monospace">-analyzer-config</font> options, it was an ancient and annoying issue that any invalid input would be ignored and the analyzer simply didn't do what you want -- this is changing. Please note that most of these have already landed.</div><div><br></div><div>1. <font face="monospace, monospace">AnalyzerOptions</font> no longer supports adding non-checker options without modifying the actual implementation, which can be done by writing a new entry in <font face="monospace, monospace">AnalyzerOptions.def</font>.</div><div><a href="https://reviews.llvm.org/D53483">https://reviews.llvm.org/D53483</a><br></div><div><br></div><div>2. There is a new <font face="monospace, monospace">-analyzer-config-help</font> flag to list all non-checker configurations.</div><div><a href="https://reviews.llvm.org/D53296">https://reviews.llvm.org/D53296</a><br></div><div><br></div><div>3. A new flag was added that will emit a warning on almost any invalid <font face="monospace, monospace">-analyzer-config</font> input, called <font face="monospace, monospace">-analyzer-config-compatibility-mode</font>. When the analyzer is invoked with <font face="monospace, monospace">-analyze</font> (in driver mode, I'm unsure about the correct terminology), it will be set to false by default, but will be enabled with -cc1 (in frontend mode). You may enable this feature in the driver mode via -Xclang analyzer-config-compatibility-mode=true.</div><div><a href="https://reviews.llvm.org/D53280">https://reviews.llvm.org/D53280</a><br></div><div><br></div><div>4. Similar plans are already in motion to make checker options similarly strict.</div><div><br></div><div>Cheers,</div><div>Kristóf Umann</div></div></div></div></div></div></div></div></div></div></div>