
Summary: Until we find a decent heuristic on how to choose between multiple identical trees, there is no point in supporting multiple mappings. This also enables matching of nodes with parents of different types, because there are many instances where this is appropriate. For example for and foreach statements; functions in the global or other namespaces. Reviewers: arphaman Subscribers: klimek Differential Revision: https://reviews.llvm.org/D36183 llvm-svn: 311251
58 lines
1.7 KiB
C++
58 lines
1.7 KiB
C++
// RUN: clang-diff -dump-matches %S/Inputs/clang-diff-basic-src.cpp %s -- | FileCheck %s
|
|
|
|
// CHECK: Match TranslationUnitDecl{{.*}} to TranslationUnitDecl
|
|
// CHECK: Match NamespaceDecl: src{{.*}} to NamespaceDecl: dst
|
|
namespace dst {
|
|
// CHECK-NOT: Match NamespaceDecl: src{{.*}} to NamespaceDecl: inner
|
|
namespace inner {
|
|
void foo() {
|
|
// CHECK: Match IntegerLiteral: 321{{.*}} to IntegerLiteral: 322
|
|
int x = 322;
|
|
}
|
|
}
|
|
|
|
// CHECK: Match DeclRefExpr: foo{{.*}} to DeclRefExpr: inner::foo
|
|
void main() { inner::foo(); }
|
|
|
|
// CHECK: Match StringLiteral: foo{{.*}} to StringLiteral: foo
|
|
const char *b = "f" "o" "o";
|
|
|
|
// unsigned is canonicalized to unsigned int
|
|
// CHECK: Match TypedefDecl: nat;unsigned int;{{.*}} to TypedefDecl: nat;unsigned int;
|
|
typedef unsigned nat;
|
|
|
|
// CHECK: Match VarDecl: p(int){{.*}} to VarDecl: prod(double)
|
|
// CHECK: Update VarDecl: p(int){{.*}} to prod(double)
|
|
// CHECK: Match BinaryOperator: *{{.*}} to BinaryOperator: *
|
|
double prod = 1 * 2 * 10;
|
|
// CHECK: Update DeclRefExpr
|
|
int squared = prod * prod;
|
|
|
|
class X {
|
|
const char *foo(int i) {
|
|
if (i == 0)
|
|
return "Bar";
|
|
// CHECK: Insert IfStmt{{.*}} into IfStmt
|
|
// CHECK: Insert BinaryOperator: =={{.*}} into IfStmt
|
|
else if (i == -1)
|
|
return "foo";
|
|
return 0;
|
|
}
|
|
X(){}
|
|
};
|
|
}
|
|
|
|
// CHECK: Move CompoundStmt{{.*}} into CompoundStmt
|
|
void m() { { int x = 0 + 0 + 0; } }
|
|
// CHECK: Update and Move IntegerLiteral: 7{{.*}} into BinaryOperator: +({{.*}}) at 1
|
|
int um = 1 + 7;
|
|
|
|
namespace {
|
|
// match with parents of different type
|
|
// CHECK: Match FunctionDecl: f1{{.*}} to FunctionDecl: f1
|
|
void f1() {{ (void) __func__;;; }}
|
|
}
|
|
|
|
// CHECK: Delete AccessSpecDecl: public
|
|
// CHECK: Delete CXXMethodDecl
|