[PATCH] D23418: [analyzer] Added a reusable constraint system to the CloneDetector

Artem Dergachev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 6 03:56:58 PDT 2017


NoQ added a comment.

  $ cat test.c
  #include <stdio.h>
  int main() {
    int i = 5;
    {
      int i = i;
      printf("%d\n", i);
    }
    return 0;
  }
  $ clang test.c
  $ ./a.out
  32767
  $ clang test.c -Xclang -ast-dump
  ...
  `-FunctionDecl 0x7ff82d8eac78 <test.c:2:1, line:9:1> line:2:5 main 'int ()'
    `-CompoundStmt 0x7ff82d8eb070 <col:12, line:9:1>
      |-DeclStmt 0x7ff82d8eadb0 <line:3:3, col:12>
      | `-VarDecl 0x7ff82d8ead30 <col:3, col:11> col:7 i 'int' cinit
      |   `-IntegerLiteral 0x7ff82d8ead90 <col:11> 'int' 5
      |-CompoundStmt 0x7ff82d8eb010 <line:4:3, line:7:3>
      | |-DeclStmt 0x7ff82d8eae78 <line:5:5, col:14>
      | | `-VarDecl 0x7ff82d8eadd8 <col:5, col:13> col:9 used i 'int' cinit
      | |   `-ImplicitCastExpr 0x7ff82d8eae60 <col:13> 'int' <LValueToRValue>
      | |     `-DeclRefExpr 0x7ff82d8eae38 <col:13> 'int' lvalue Var 0x7ff82d8eadd
  ...

It seems that in `int i = i;` the `i` in the new `i`, which is already declared by now, just not initialized yet, rather than the old `i`.


https://reviews.llvm.org/D23418





More information about the cfe-commits mailing list