Author: Bruno Ricci Date: 2020-06-09T15:18:14+01:00 New Revision: 6d0f8345ac195990aea3776722f6de6e2957e6c2
URL: https://github.com/llvm/llvm-project/commit/6d0f8345ac195990aea3776722f6de6e2957e6c2 DIFF: https://github.com/llvm/llvm-project/commit/6d0f8345ac195990aea3776722f6de6e2957e6c2.diff LOG: [clang][AST] TextNodeDumper: dump the operator spelling for overloaded operators. This mirrors what is done for built-in operators. Added: clang/test/AST/ast-dump-overloaded-operators.cpp Modified: clang/include/clang/AST/TextNodeDumper.h clang/lib/AST/TextNodeDumper.cpp clang/test/Import/call-expr/test.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/TextNodeDumper.h b/clang/include/clang/AST/TextNodeDumper.h index 0fb4baf0ca4d..4636c8ef65d3 100644 --- a/clang/include/clang/AST/TextNodeDumper.h +++ b/clang/include/clang/AST/TextNodeDumper.h @@ -231,6 +231,7 @@ class TextNodeDumper void VisitCaseStmt(const CaseStmt *Node); void VisitConstantExpr(const ConstantExpr *Node); void VisitCallExpr(const CallExpr *Node); + void VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *Node); void VisitCastExpr(const CastExpr *Node); void VisitImplicitCastExpr(const ImplicitCastExpr *Node); void VisitDeclRefExpr(const DeclRefExpr *Node); diff --git a/clang/lib/AST/TextNodeDumper.cpp b/clang/lib/AST/TextNodeDumper.cpp index 72f0ba37e3e7..84f9738ade8d 100644 --- a/clang/lib/AST/TextNodeDumper.cpp +++ b/clang/lib/AST/TextNodeDumper.cpp @@ -715,6 +715,14 @@ void TextNodeDumper::VisitCallExpr(const CallExpr *Node) { OS << " adl"; } +void TextNodeDumper::VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *Node) { + const char *OperatorSpelling = clang::getOperatorSpelling(Node->getOperator()); + if (OperatorSpelling) + OS << " '" << OperatorSpelling << "'"; + + VisitCallExpr(Node); +} + void TextNodeDumper::VisitCastExpr(const CastExpr *Node) { OS << " <"; { diff --git a/clang/test/AST/ast-dump-overloaded-operators.cpp b/clang/test/AST/ast-dump-overloaded-operators.cpp new file mode 100644 index 000000000000..cd4e14be9f1a --- /dev/null +++ b/clang/test/AST/ast-dump-overloaded-operators.cpp @@ -0,0 +1,30 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s | FileCheck -strict-whitespace %s + +enum E {}; +void operator+(E,E); +void operator,(E,E); + +void test() { + E e; + e + e; + e , e; +} +// CHECK: TranslationUnitDecl {{.*}} <<invalid sloc>> <invalid sloc> +// CHECK: `-FunctionDecl {{.*}} <line:7:1, line:11:1> line:7:6 test 'void ()' +// CHECK-NEXT: `-CompoundStmt {{.*}} <col:13, line:11:1> +// CHECK-NEXT: |-DeclStmt {{.*}} <line:8:3, col:6> +// CHECK-NEXT: | `-VarDecl {{.*}} <col:3, col:5> col:5 used e 'E' +// CHECK-NEXT: |-CXXOperatorCallExpr {{.*}} <line:9:3, col:7> 'void' '+' +// CHECK-NEXT: | |-ImplicitCastExpr {{.*}} <col:5> 'void (*)(E, E)' <FunctionToPointerDecay> +// CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:5> 'void (E, E)' lvalue Function {{.*}} 'operator+' 'void (E, E)' +// CHECK-NEXT: | |-ImplicitCastExpr {{.*}} <col:3> 'E' <LValueToRValue> +// CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:3> 'E' lvalue Var {{.*}} 'e' 'E' +// CHECK-NEXT: | `-ImplicitCastExpr {{.*}} <col:7> 'E' <LValueToRValue> +// CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:7> 'E' lvalue Var {{.*}} 'e' 'E' +// CHECK-NEXT: `-CXXOperatorCallExpr {{.*}} <line:10:3, col:7> 'void' ',' +// CHECK-NEXT: |-ImplicitCastExpr {{.*}} <col:5> 'void (*)(E, E)' <FunctionToPointerDecay> +// CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:5> 'void (E, E)' lvalue Function {{.*}} 'operator,' 'void (E, E)' +// CHECK-NEXT: |-ImplicitCastExpr {{.*}} <col:3> 'E' <LValueToRValue> +// CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:3> 'E' lvalue Var {{.*}} 'e' 'E' +// CHECK-NEXT: `-ImplicitCastExpr {{.*}} <col:7> 'E' <LValueToRValue> +// CHECK-NEXT: `-DeclRefExpr {{.*}} <col:7> 'E' lvalue Var {{.*}} 'e' 'E' diff --git a/clang/test/Import/call-expr/test.cpp b/clang/test/Import/call-expr/test.cpp index 86c1b50c47d6..e2836a2bb9de 100644 --- a/clang/test/Import/call-expr/test.cpp +++ b/clang/test/Import/call-expr/test.cpp @@ -5,4 +5,4 @@ void expr() { // CHECK: FunctionDecl 0x{{[^ ]*}} <{{[^>]*}}> line:{{.*}}:{{[^ ]*}} used f 'void ()' // CHECK: -CallExpr 0x{{[^ ]*}} <{{[^>]*}}> 'void' adl -// CHECK: -CXXOperatorCallExpr 0x{{[^ ]*}} <{{[^>]*}}> 'void' adl +// CHECK: -CXXOperatorCallExpr 0x{{[^ ]*}} <{{[^>]*}}> 'void' '+' adl _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits