llvm-project/clang/test/Tooling/clang-diff-basic.cpp
Johannes Altmanninger 51321aef8e [clang-diff] Simplify mapping
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
2017-08-19 17:53:01 +00:00

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