Skip to content

Commit

Permalink
A slightly more concise AST dump :)
Browse files Browse the repository at this point in the history
If the modifiedType and the minimally desugared type of an AttributedType are the same, then we do not need to show both in an AST dump.

Here, we change VisitAttributedType to only visit the modifiedType when it is different from the equivalentType (the minimally desugared type), because the latter is already visited by default.

Reviewed By: sammccall

Differential Revision: https://reviews.llvm.org/D142637
  • Loading branch information
merrymeerkat committed Feb 10, 2023
1 parent 83e84cd commit 70acb3a
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 27 deletions.
3 changes: 2 additions & 1 deletion clang/include/clang/AST/ASTNodeTraverser.h
Expand Up @@ -384,7 +384,8 @@ class ASTNodeTraverser
}
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());
Expand Down
24 changes: 24 additions & 0 deletions clang/test/AST/ast-dump-attr-type.cpp
@@ -0,0 +1,24 @@
// 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

[[clang::address_space(3)]] int *y;
using Ty1 = decltype(y);

// CHECK: TypeAliasDecl 0x{{[^ ]*}} <line:15:1, col:23> col:7 Ty1 'decltype(y)':'__attribute__((address_space(3))) int *'
// CHECK-NEXT: `-DecltypeType 0x{{[^ ]*}} 'decltype(y)' sugar
// CHECK-NEXT: |-DeclRefExpr 0x{{[^ ]*}} <col:22> '__attribute__((address_space(3))) int *' lvalue Var 0x{{[^ ]*}} 'y' '__attribute__((address_space(3))) int *' non_odr_use_unevaluated
// CHECK-NEXT: `-PointerType 0x{{[^ ]*}} '__attribute__((address_space(3))) int *'
// CHECK-NEXT: `-AttributedType 0x{{[^ ]*}} '__attribute__((address_space(3))) int' sugar
// CHECK-NEXT |-BuiltinType 0x{{[^ ]*}} 'int'
// CHECK-NEXT `-QualType 0x{{[^ ]*}} '__attribute__((address_space(3))) int' __attribute__((address_space(3)))
// CHECK-NEXT `-BuiltinType 0x{{[^ ]*}} 'int'
26 changes: 0 additions & 26 deletions clang/test/AST/ast-dump-types-json.cpp
Expand Up @@ -203,32 +203,6 @@ using ::TestUsingShadowDeclType;
// 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: }
Expand Down

0 comments on commit 70acb3a

Please sign in to comment.