[clang] 70acb3a - A slightly more concise AST dump :)

Dani Ferreira Franco Moura via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 10 11:11:38 PST 2023


Author: Dani Ferreira Franco Moura
Date: 2023-02-10T19:11:31Z
New Revision: 70acb3aab3a10eea802781f69c8336c21dce6d59

URL: https://github.com/llvm/llvm-project/commit/70acb3aab3a10eea802781f69c8336c21dce6d59
DIFF: https://github.com/llvm/llvm-project/commit/70acb3aab3a10eea802781f69c8336c21dce6d59.diff

LOG: A slightly more concise AST dump :)

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

Added: 
    clang/test/AST/ast-dump-attr-type.cpp

Modified: 
    clang/include/clang/AST/ASTNodeTraverser.h
    clang/test/AST/ast-dump-types-json.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/AST/ASTNodeTraverser.h b/clang/include/clang/AST/ASTNodeTraverser.h
index a2c57aab89ebc..86a896740e910 100644
--- a/clang/include/clang/AST/ASTNodeTraverser.h
+++ b/clang/include/clang/AST/ASTNodeTraverser.h
@@ -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());

diff  --git a/clang/test/AST/ast-dump-attr-type.cpp b/clang/test/AST/ast-dump-attr-type.cpp
new file mode 100644
index 0000000000000..17e710ff72817
--- /dev/null
+++ b/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'

diff  --git a/clang/test/AST/ast-dump-types-json.cpp b/clang/test/AST/ast-dump-types-json.cpp
index 87cfaa241fbc7..0a92483fb1c7f 100644
--- a/clang/test/AST/ast-dump-types-json.cpp
+++ b/clang/test/AST/ast-dump-types-json.cpp
@@ -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:       }


        


More information about the cfe-commits mailing list