<div dir="ltr">Hi,<br><div><br></div><div>There is an evolving need to configure the Clang Static Analyzer within the analyzed source code itself. We'd like to</div><div>1) suppress specific checkers (we already have an ongoing discussion at <a href="https://reviews.llvm.org/D89638">D89638</a>)</div><div>2) express summaries (mainly argument constraints)</div><div>3) express taint propagation rules for functions (or for global variables like std::cin)</div><div><br></div><div>What if we had one attribute for CSA with a StringArgument?<br>(Actually, we already have that with the `annotate` attribute.)<br></div><div><br></div><div>So we'd have something like this:</div><div>1) [[clang::csa("supress.somecheck.somefunctionality")]]</div><div>2) [[clang::csa("summary.std::fread.BufferSize.Buffer(0).BufSize(1).BufSizeMultiplier(2)")]]<br></div><div>3) [[clang::csa("taint.sink.myNamespace::mySink")]]</div><div><br></div><div>Disadvantages: we must process strings whenever a node has the 'csa' attr attached, we have to come up with a "DSL".<br>Advantages: total flexibility.<br></div><div><br></div><div>I'd like to explore the possible approaches that we could have. For example, Aaron suggested alternatively for the suppression:</div><div>[[clang::suppress("analyzer.somecheck.somefunctionality")]]<br>[[clang::suppress("compiler.warning.12345")]]<br>[[clang::suppress("tidy.check-name.whatever")]]<br></div><div><br></div><div>Thanks,</div><div>Gabor</div></div>