merrymeerkat created this revision. Herald added a project: All. merrymeerkat requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
...when it is different from the equivalentType (the minimally desugared type), because the latter is already visited by default. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D142637 Files: clang/include/clang/AST/ASTNodeTraverser.h clang/test/AST/ast-dump-attr-type.cpp clang/test/AST/ast-dump-types-json.cpp Index: clang/test/AST/ast-dump-types-json.cpp =================================================================== --- clang/test/AST/ast-dump-types-json.cpp +++ clang/test/AST/ast-dump-types-json.cpp @@ -203,32 +203,6 @@ // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ParenType", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "void ()" -// CHECK-NEXT: }, -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "FunctionProtoType", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "void ()" -// CHECK-NEXT: }, -// CHECK-NEXT: "cc": "cdecl", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "BuiltinType", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "void" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: ] // CHECK-NEXT: } Index: clang/test/AST/ast-dump-attr-type.cpp =================================================================== --- /dev/null +++ clang/test/AST/ast-dump-attr-type.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only -ast-dump %s | FileCheck %s + +int * _Nonnull x; +using Ty = decltype(x); + +// CHECK:`-TypeAliasDecl 0x{{[^ ]*}} <line:4:1, col:22> col:7 Ty 'decltype(x)':'int *' +// CHECK-NEXT: `-DecltypeType 0x{{[^ ]*}} 'decltype(x)' sugar +// CHECK-NEXT: |-DeclRefExpr 0x{{[^ ]*}} <col:21> 'int * _Nonnull':'int *' lvalue Var 0x{{[^ ]*}} 'x' 'int * _Nonnull':'int *' non_odr_use_unevaluated +// CHECK-NEXT: `-AttributedType 0x{{[^ ]*}} 'int * _Nonnull' sugar +// CHECK-NEXT: `-PointerType 0x{{[^ ]*}} 'int *' +// CHECK-NEXT: `-BuiltinType 0x{{[^ ]*}} 'int' +// CHECK-NOT: `-PointerType 0x564c31a07520 'int *' Index: clang/include/clang/AST/ASTNodeTraverser.h =================================================================== --- clang/include/clang/AST/ASTNodeTraverser.h +++ clang/include/clang/AST/ASTNodeTraverser.h @@ -384,7 +384,8 @@ } void VisitAttributedType(const AttributedType *T) { // FIXME: AttrKind - Visit(T->getModifiedType()); + if (T->getModifiedType() != T->getEquivalentType()) + Visit(T->getModifiedType()); } void VisitBTFTagAttributedType(const BTFTagAttributedType *T) { Visit(T->getWrappedType());
Index: clang/test/AST/ast-dump-types-json.cpp =================================================================== --- clang/test/AST/ast-dump-types-json.cpp +++ clang/test/AST/ast-dump-types-json.cpp @@ -203,32 +203,6 @@ // CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ParenType", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "void ()" -// CHECK-NEXT: }, -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "FunctionProtoType", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "void ()" -// CHECK-NEXT: }, -// CHECK-NEXT: "cc": "cdecl", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "BuiltinType", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "void" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] // CHECK-NEXT: } // CHECK-NEXT: ] // CHECK-NEXT: } Index: clang/test/AST/ast-dump-attr-type.cpp =================================================================== --- /dev/null +++ clang/test/AST/ast-dump-attr-type.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only -ast-dump %s | FileCheck %s + +int * _Nonnull x; +using Ty = decltype(x); + +// CHECK:`-TypeAliasDecl 0x{{[^ ]*}} <line:4:1, col:22> col:7 Ty 'decltype(x)':'int *' +// CHECK-NEXT: `-DecltypeType 0x{{[^ ]*}} 'decltype(x)' sugar +// CHECK-NEXT: |-DeclRefExpr 0x{{[^ ]*}} <col:21> 'int * _Nonnull':'int *' lvalue Var 0x{{[^ ]*}} 'x' 'int * _Nonnull':'int *' non_odr_use_unevaluated +// CHECK-NEXT: `-AttributedType 0x{{[^ ]*}} 'int * _Nonnull' sugar +// CHECK-NEXT: `-PointerType 0x{{[^ ]*}} 'int *' +// CHECK-NEXT: `-BuiltinType 0x{{[^ ]*}} 'int' +// CHECK-NOT: `-PointerType 0x564c31a07520 'int *' Index: clang/include/clang/AST/ASTNodeTraverser.h =================================================================== --- clang/include/clang/AST/ASTNodeTraverser.h +++ clang/include/clang/AST/ASTNodeTraverser.h @@ -384,7 +384,8 @@ } void VisitAttributedType(const AttributedType *T) { // FIXME: AttrKind - Visit(T->getModifiedType()); + if (T->getModifiedType() != T->getEquivalentType()) + Visit(T->getModifiedType()); } void VisitBTFTagAttributedType(const BTFTagAttributedType *T) { Visit(T->getWrappedType());
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits