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



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to