// 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: (anonymous namespace)::f1 void f1() {{ (void) __func__;;; }} } // CHECK: Delete AccessSpecDecl: public // CHECK: Delete CXXMethodDecl