[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