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:       }


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to