Skip to content

Commit 70abbd9

Browse files
authored
[AST] Dump argument types for TypeTraitExpr. (#89370)
The argument types are not modeled as children of TypeTraitExpr, therefore they are not dumped with the default implementation. Dumping them is really useful for ad-hoc debugging, context #89358
1 parent 9ef9db7 commit 70abbd9

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

clang/include/clang/AST/ASTNodeTraverser.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,12 @@ class ASTNodeTraverser
851851
Visit(R);
852852
}
853853

854+
void VisitTypeTraitExpr(const TypeTraitExpr *E) {
855+
// Argument types are not children of the TypeTraitExpr.
856+
for (auto *A : E->getArgs())
857+
Visit(A->getType());
858+
}
859+
854860
void VisitLambdaExpr(const LambdaExpr *Node) {
855861
if (Traversal == TK_IgnoreUnlessSpelledInSource) {
856862
for (unsigned I = 0, N = Node->capture_size(); I != N; ++I) {

clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2725,7 +2725,25 @@ int main()
27252725
// CHECK-NEXT: "type": {
27262726
// CHECK-NEXT: "qualType": "bool"
27272727
// CHECK-NEXT: },
2728-
// CHECK-NEXT: "valueCategory": "prvalue"
2728+
// CHECK-NEXT: "valueCategory": "prvalue",
2729+
// CHECK-NEXT: "inner": [
2730+
// CHECK-NEXT: {
2731+
// CHECK-NEXT: "id": "0x{{.*}}",
2732+
// CHECK-NEXT: "kind": "TemplateTypeParmType",
2733+
// CHECK-NEXT: "type": {
2734+
// CHECK-NEXT: "qualType": "_Ty"
2735+
// CHECK-NEXT: },
2736+
// CHECK-NEXT: "isDependent": true,
2737+
// CHECK-NEXT: "isInstantiationDependent": true,
2738+
// CHECK-NEXT: "depth": 0,
2739+
// CHECK-NEXT: "index": 0,
2740+
// CHECK-NEXT: "decl": {
2741+
// CHECK-NEXT: "id": "0x{{.*}}",
2742+
// CHECK-NEXT: "kind": "TemplateTypeParmDecl",
2743+
// CHECK-NEXT: "name": "_Ty"
2744+
// CHECK-NEXT: }
2745+
// CHECK-NEXT: }
2746+
// CHECK-NEXT: ]
27292747
// CHECK-NEXT: }
27302748
// CHECK-NEXT: ]
27312749
// CHECK-NEXT: }
@@ -3003,7 +3021,25 @@ int main()
30033021
// CHECK-NEXT: "type": {
30043022
// CHECK-NEXT: "qualType": "bool"
30053023
// CHECK-NEXT: },
3006-
// CHECK-NEXT: "valueCategory": "prvalue"
3024+
// CHECK-NEXT: "valueCategory": "prvalue",
3025+
// CHECK-NEXT: "inner": [
3026+
// CHECK-NEXT: {
3027+
// CHECK-NEXT: "id": "0x{{.*}}",
3028+
// CHECK-NEXT: "kind": "TemplateTypeParmType",
3029+
// CHECK-NEXT: "type": {
3030+
// CHECK-NEXT: "qualType": "_Ty"
3031+
// CHECK-NEXT: },
3032+
// CHECK-NEXT: "isDependent": true,
3033+
// CHECK-NEXT: "isInstantiationDependent": true,
3034+
// CHECK-NEXT: "depth": 0,
3035+
// CHECK-NEXT: "index": 0,
3036+
// CHECK-NEXT: "decl": {
3037+
// CHECK-NEXT: "id": "0x{{.*}}",
3038+
// CHECK-NEXT: "kind": "TemplateTypeParmDecl",
3039+
// CHECK-NEXT: "name": "_Ty"
3040+
// CHECK-NEXT: }
3041+
// CHECK-NEXT: }
3042+
// CHECK-NEXT: ]
30073043
// CHECK-NEXT: }
30083044
// CHECK-NEXT: ]
30093045
// CHECK-NEXT: }

clang/test/AST/ast-dump-traits.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,19 @@ void test_unary_expr_or_type_trait() {
4040
// CHECK-NEXT: | | `-EnumDecl {{.*}} <col:3, col:11> col:8{{( imported)?}} referenced E
4141
// CHECK-NEXT: | |-CStyleCastExpr {{.*}} <line:13:3, col:21> 'void' <ToVoid>
4242
// CHECK-NEXT: | | `-TypeTraitExpr {{.*}} <col:10, col:21> 'bool' __is_enum
43+
// CHECK-NEXT: | | `-ElaboratedType {{.*}} 'E' sugar
44+
// CHECK-NEXT: | | `-EnumType {{.*}} 'E'
45+
// CHECK-NEXT: | | `-Enum {{.*}} 'E'
4346
// CHECK-NEXT: | |-CStyleCastExpr {{.*}} <line:15:3, col:30> 'void' <ToVoid>
4447
// CHECK-NEXT: | | `-TypeTraitExpr {{.*}} <col:10, col:30> 'bool' __is_same
48+
// CHECK-NEXT: | | |-BuiltinType {{.*}} 'int'
49+
// CHECK-NEXT: | | `-BuiltinType {{.*}} 'float'
4550
// CHECK-NEXT: | `-CStyleCastExpr {{.*}} <line:17:3, col:47> 'void' <ToVoid>
4651
// CHECK-NEXT: | `-TypeTraitExpr {{.*}} <col:10, col:47> 'bool' __is_constructible
52+
// CHECK-NEXT: |-BuiltinType {{.*}} 'int'
53+
// CHECK-NEXT: |-BuiltinType {{.*}} 'int'
54+
// CHECK-NEXT: |-BuiltinType {{.*}} 'int'
55+
// CHECK-NEXT: `-BuiltinType {{.*}} 'int'
4756
// CHECK-NEXT: |-FunctionDecl {{.*}} <line:20:1, line:23:1> line:20:6{{( imported)?}} test_array_type_trait 'void ()'
4857
// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:30, line:23:1>
4958
// CHECK-NEXT: | `-CStyleCastExpr {{.*}} <line:22:3, col:34> 'void' <ToVoid>

0 commit comments

Comments
 (0)