[PATCH] D71371: [analyzer] Do not cache out on some shared implicit AST nodes.
Artem Dergachev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 11 11:48:16 PST 2019
NoQ added a comment.
Ahaa. Ahaa. Okay.
So the AST is like
| |-DeclStmt 0x7f9f3b8932e0 <line:6:3, col:43>
| | `-VarDecl 0x7f9f3b892f50 <col:3, col:42> col:7 used a 'int [5]' cinit
| | `-InitListExpr 0x7f9f3b893268 <col:14, col:42> 'int [5]'
| | |-array_filler: ImplicitValueInitExpr 0x7f9f3b8932d0 <<invalid sloc>> 'int'
| | |-IntegerLiteral 0x7f9f3b893118 <col:41> 'int' 4
| | |-ImplicitValueInitExpr 0x7f9f3b8932d0 <<invalid sloc>> 'int'
| | |-IntegerLiteral 0x7f9f3b893078 <col:31> 'int' 15
| | |-ImplicitValueInitExpr 0x7f9f3b8932d0 <<invalid sloc>> 'int'
| | `-IntegerLiteral 0x7f9f3b892fd8 <col:21> 'int' 29
And the CFG is like
[B1]
1: 4
2: [B1.4]
3: 15
4: /*implicit*/(int)0
5: 29
6: {[4] = [B1.5], [2] = [B1.3], [0] = [B1.1]}
7: int a[5] = {[4] = 29, [2] = 15, [0] = 4};
And you're trying to avoid agglutinating program points for `[B1.2]` and `[B1.4]`.
Can we simply erase the implicit initializers from the CFG? Under an option, of course. We ignore them in the static analyzer anyway (like all constants).
We could do a custom program point just for this problem (which includes the index as part of its identity), but it's kinda underwhelming to build a whole new program point that always does nothing.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D71371/new/
https://reviews.llvm.org/D71371
More information about the cfe-commits
mailing list