<div dir="ltr"><div><div><div><div>I was trying to write a clang static analysis for detecting implicit bool to int casts. Namely, I wanted to allow forms like:<br><br></div>int x = (int) true;<br><br></div>But disallow forms like:<br><br></div>int x = true;<br><br></div>Unfortunately, it seems like both of these generate implicit cast AST nodes, namely I get the following AST tree for the explicitly casted form:<br><br><pre class="" id="ct-4">    `-DeclStmt 0x7fae2407a118 <line:51:3, col:30>
      `-VarDecl 0x7fae2407a050 <col:3, col:26> col:7 x 'int' cinit
        `-CStyleCastExpr 0x7fae2407a0f0 <col:21, col:26> 'int' <NoOp>
          `-ImplicitCastExpr 0x7fae2407a0d8 <col:26> 'int' <IntegralCast>
            `-CXXBoolLiteralExpr 0x7fae2407a0b0 <col:26> '_Bool' true</pre>How should I distinguish between the two forms reliably, such that explicit casts are never matched, but implicit casts are matched, when an explicit cast still inserts an implicit cast, and then just becomes a NoOp?<br></div>