[Clang] Fix AST dump for {CXXDefaultArgExpr, CXXDefaultInitExpr} (#88269)
This PR fix a AST dump issue since https://github.com/llvm/llvm-project/pull/80001 When Clang dumps `CXXDefaultArgExpr`/`CXXDefaultInitExpr`, there has no recursively dump the complete `CXXDefaultArgExpr`/`CXXDefaultInitExpr`. Since this PR, Clang will recursively dump a `CXXDefaultArgExpr`/`CXXDefaultInitExpr` node, even if the node has no rewritten init. *Consider*: ``` struct A { int arr[1]; }; struct B { const A &a = A{{0}}; }; void test() { B b{}; } ``` *Before*: ``` `-FunctionDecl <line:9:1, line:11:1> line:9:6 test 'void ()' `-CompoundStmt <col:13, line:11:1> `-DeclStmt <line:10:3, col:8> `-VarDecl <col:3, col:7> col:5 b 'B' listinit `-InitListExpr <col:6, col:7> 'B' `-CXXDefaultInitExpr <col:7> 'const A' lvalue has rewritten init `-ExprWithCleanups <line:6:16, col:21> 'const A' lvalue ``` *After*: ``` `-FunctionDecl 0x15a9455a8 <line:9:1, line:11:1> line:9:6 test 'void ()' `-CompoundStmt 0x15a945850 <col:13, line:11:1> `-DeclStmt 0x15a945838 <line:10:3, col:8> `-VarDecl 0x15a945708 <col:3, col:7> col:5 b 'B' listinit `-InitListExpr 0x15a9457b0 <col:6, col:7> 'B' `-CXXDefaultInitExpr 0x15a9457f8 <col:7> 'const A' lvalue has rewritten init `-ExprWithCleanups 0x15a945568 <line:6:16, col:21> 'const A' lvalue `-MaterializeTemporaryExpr 0x15a945500 <col:16, col:21> 'const A' lvalue extended by Field 0x15a945160 'a' 'const A &' `-ImplicitCastExpr 0x15a9454e8 <col:16, col:21> 'const A' <NoOp> `-CXXFunctionalCastExpr 0x15a9454c0 <col:16, col:21> 'A' functional cast to A <NoOp> `-InitListExpr 0x15a9452c0 <col:17, col:21> 'A' `-InitListExpr 0x15a945308 <col:18, col:20> 'int[1]' `-IntegerLiteral 0x15a945210 <col:19> 'int' 0 ``` --------- Signed-off-by: yronglin <yronglin777@gmail.com>
This commit is contained in:
parent
2c2377d3a9
commit
986d0dba85
@ -932,6 +932,14 @@ public:
|
||||
Visit(TArg);
|
||||
}
|
||||
|
||||
void VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node) {
|
||||
Visit(Node->getExpr());
|
||||
}
|
||||
|
||||
void VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node) {
|
||||
Visit(Node->getExpr());
|
||||
}
|
||||
|
||||
// Implements Visit methods for Attrs.
|
||||
#include "clang/AST/AttrNodeTraverse.inc"
|
||||
};
|
||||
|
@ -310,6 +310,8 @@ public:
|
||||
void VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *MTE);
|
||||
void VisitCXXDependentScopeMemberExpr(const CXXDependentScopeMemberExpr *ME);
|
||||
void VisitRequiresExpr(const RequiresExpr *RE);
|
||||
void VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node);
|
||||
void VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node);
|
||||
|
||||
void VisitObjCEncodeExpr(const ObjCEncodeExpr *OEE);
|
||||
void VisitObjCMessageExpr(const ObjCMessageExpr *OME);
|
||||
|
@ -1576,6 +1576,14 @@ void JSONNodeDumper::VisitMaterializeTemporaryExpr(
|
||||
attributeOnlyIfTrue("boundToLValueRef", MTE->isBoundToLvalueReference());
|
||||
}
|
||||
|
||||
void JSONNodeDumper::VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node) {
|
||||
attributeOnlyIfTrue("hasRewrittenInit", Node->hasRewrittenInit());
|
||||
}
|
||||
|
||||
void JSONNodeDumper::VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node) {
|
||||
attributeOnlyIfTrue("hasRewrittenInit", Node->hasRewrittenInit());
|
||||
}
|
||||
|
||||
void JSONNodeDumper::VisitCXXDependentScopeMemberExpr(
|
||||
const CXXDependentScopeMemberExpr *DSME) {
|
||||
JOS.attribute("isArrow", DSME->isArrow());
|
||||
|
@ -1450,23 +1450,13 @@ void TextNodeDumper::VisitExpressionTraitExpr(const ExpressionTraitExpr *Node) {
|
||||
}
|
||||
|
||||
void TextNodeDumper::VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node) {
|
||||
if (Node->hasRewrittenInit()) {
|
||||
if (Node->hasRewrittenInit())
|
||||
OS << " has rewritten init";
|
||||
AddChild([=] {
|
||||
ColorScope Color(OS, ShowColors, StmtColor);
|
||||
Visit(Node->getExpr());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void TextNodeDumper::VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node) {
|
||||
if (Node->hasRewrittenInit()) {
|
||||
if (Node->hasRewrittenInit())
|
||||
OS << " has rewritten init";
|
||||
AddChild([=] {
|
||||
ColorScope Color(OS, ShowColors, StmtColor);
|
||||
Visit(Node->getExpr());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void TextNodeDumper::VisitMaterializeTemporaryExpr(
|
||||
|
2091
clang/test/AST/ast-dump-default-arg-json.cpp
Normal file
2091
clang/test/AST/ast-dump-default-arg-json.cpp
Normal file
File diff suppressed because it is too large
Load Diff
929
clang/test/AST/ast-dump-default-init-json.cpp
Normal file
929
clang/test/AST/ast-dump-default-init-json.cpp
Normal file
@ -0,0 +1,929 @@
|
||||
// RUN: %clang_cc1 -triple x86_64-linux-gnu -fsyntax-only -ast-dump=json %s | FileCheck %s
|
||||
|
||||
struct A {
|
||||
int arr[1];
|
||||
};
|
||||
|
||||
struct B {
|
||||
const A &a = A{{0}};
|
||||
};
|
||||
|
||||
void test() {
|
||||
B b{};
|
||||
}
|
||||
|
||||
// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
|
||||
|
||||
|
||||
// CHECK-NOT: {{^}}Dumping
|
||||
// CHECK: "kind": "TranslationUnitDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "TypedefDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "__int128_t",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "__int128"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "BuiltinType",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "__int128"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "TypedefDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "__uint128_t",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "unsigned __int128"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "BuiltinType",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "unsigned __int128"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "TypedefDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "__NSConstantString",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "__NSConstantString_tag"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "RecordType",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "__NSConstantString_tag"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "decl": {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXRecordDecl",
|
||||
// CHECK-NEXT: "name": "__NSConstantString_tag"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "TypedefDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "__builtin_ms_va_list",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "char *"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "PointerType",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "char *"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "BuiltinType",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "char"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "TypedefDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "__builtin_va_list",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "__va_list_tag[1]"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ConstantArrayType",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "__va_list_tag[1]"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "size": 1,
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "RecordType",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "__va_list_tag"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "decl": {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXRecordDecl",
|
||||
// CHECK-NEXT: "name": "__va_list_tag"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXRecordDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
// CHECK-NEXT: "offset": 99,
|
||||
// CHECK-NEXT: "file": "{{.*}}",
|
||||
// CHECK-NEXT: "line": 3,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 92,
|
||||
// CHECK-NEXT: "col": 1,
|
||||
// CHECK-NEXT: "tokLen": 6
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 117,
|
||||
// CHECK-NEXT: "line": 5,
|
||||
// CHECK-NEXT: "col": 1,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isReferenced": true,
|
||||
// CHECK-NEXT: "name": "A",
|
||||
// CHECK-NEXT: "tagUsed": "struct",
|
||||
// CHECK-NEXT: "completeDefinition": true,
|
||||
// CHECK-NEXT: "definitionData": {
|
||||
// CHECK-NEXT: "canPassInRegisters": true,
|
||||
// CHECK-NEXT: "copyAssign": {
|
||||
// CHECK-NEXT: "hasConstParam": true,
|
||||
// CHECK-NEXT: "implicitHasConstParam": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "simple": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "copyCtor": {
|
||||
// CHECK-NEXT: "hasConstParam": true,
|
||||
// CHECK-NEXT: "implicitHasConstParam": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "simple": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "defaultCtor": {
|
||||
// CHECK-NEXT: "exists": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "dtor": {
|
||||
// CHECK-NEXT: "irrelevant": true,
|
||||
// CHECK-NEXT: "simple": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isAggregate": true,
|
||||
// CHECK-NEXT: "isLiteral": true,
|
||||
// CHECK-NEXT: "isPOD": true,
|
||||
// CHECK-NEXT: "isStandardLayout": true,
|
||||
// CHECK-NEXT: "isTrivial": true,
|
||||
// CHECK-NEXT: "isTriviallyCopyable": true,
|
||||
// CHECK-NEXT: "moveAssign": {
|
||||
// CHECK-NEXT: "exists": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "simple": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "moveCtor": {
|
||||
// CHECK-NEXT: "exists": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "simple": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXRecordDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
// CHECK-NEXT: "offset": 99,
|
||||
// CHECK-NEXT: "line": 3,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 92,
|
||||
// CHECK-NEXT: "col": 1,
|
||||
// CHECK-NEXT: "tokLen": 6
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 99,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "A",
|
||||
// CHECK-NEXT: "tagUsed": "struct"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "FieldDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
// CHECK-NEXT: "offset": 109,
|
||||
// CHECK-NEXT: "line": 4,
|
||||
// CHECK-NEXT: "col": 7,
|
||||
// CHECK-NEXT: "tokLen": 3
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 105,
|
||||
// CHECK-NEXT: "col": 3,
|
||||
// CHECK-NEXT: "tokLen": 3
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 114,
|
||||
// CHECK-NEXT: "col": 12,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "name": "arr",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "int[1]"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXDestructorDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
// CHECK-NEXT: "offset": 99,
|
||||
// CHECK-NEXT: "line": 3,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 99,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 99,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "isReferenced": true,
|
||||
// CHECK-NEXT: "name": "~A",
|
||||
// CHECK-NEXT: "mangledName": "_ZN1AD1Ev",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void () noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inline": true,
|
||||
// CHECK-NEXT: "explicitlyDefaulted": "default"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXRecordDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
// CHECK-NEXT: "offset": 128,
|
||||
// CHECK-NEXT: "line": 7,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 121,
|
||||
// CHECK-NEXT: "col": 1,
|
||||
// CHECK-NEXT: "tokLen": 6
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 155,
|
||||
// CHECK-NEXT: "line": 9,
|
||||
// CHECK-NEXT: "col": 1,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isReferenced": true,
|
||||
// CHECK-NEXT: "name": "B",
|
||||
// CHECK-NEXT: "tagUsed": "struct",
|
||||
// CHECK-NEXT: "completeDefinition": true,
|
||||
// CHECK-NEXT: "definitionData": {
|
||||
// CHECK-NEXT: "canConstDefaultInit": true,
|
||||
// CHECK-NEXT: "canPassInRegisters": true,
|
||||
// CHECK-NEXT: "copyAssign": {
|
||||
// CHECK-NEXT: "hasConstParam": true,
|
||||
// CHECK-NEXT: "implicitHasConstParam": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "copyCtor": {
|
||||
// CHECK-NEXT: "hasConstParam": true,
|
||||
// CHECK-NEXT: "implicitHasConstParam": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "simple": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "defaultCtor": {
|
||||
// CHECK-NEXT: "defaultedIsConstexpr": true,
|
||||
// CHECK-NEXT: "exists": true,
|
||||
// CHECK-NEXT: "isConstexpr": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "nonTrivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "dtor": {
|
||||
// CHECK-NEXT: "irrelevant": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "simple": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hasConstexprNonCopyMoveConstructor": true,
|
||||
// CHECK-NEXT: "isAggregate": true,
|
||||
// CHECK-NEXT: "isLiteral": true,
|
||||
// CHECK-NEXT: "isTriviallyCopyable": true,
|
||||
// CHECK-NEXT: "moveAssign": {
|
||||
// CHECK-NEXT: "exists": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "moveCtor": {
|
||||
// CHECK-NEXT: "exists": true,
|
||||
// CHECK-NEXT: "needsImplicit": true,
|
||||
// CHECK-NEXT: "simple": true,
|
||||
// CHECK-NEXT: "trivial": true
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXRecordDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
// CHECK-NEXT: "offset": 128,
|
||||
// CHECK-NEXT: "line": 7,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 121,
|
||||
// CHECK-NEXT: "col": 1,
|
||||
// CHECK-NEXT: "tokLen": 6
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 128,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "B",
|
||||
// CHECK-NEXT: "tagUsed": "struct"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "FieldDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
// CHECK-NEXT: "offset": 143,
|
||||
// CHECK-NEXT: "line": 8,
|
||||
// CHECK-NEXT: "col": 12,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 134,
|
||||
// CHECK-NEXT: "col": 3,
|
||||
// CHECK-NEXT: "tokLen": 5
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "name": "a",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A &"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "hasInClassInitializer": true,
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ExprWithCleanups",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 147,
|
||||
// CHECK-NEXT: "col": 16,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "lvalue",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "MaterializeTemporaryExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 147,
|
||||
// CHECK-NEXT: "col": 16,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "lvalue",
|
||||
// CHECK-NEXT: "extendingDecl": {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "FieldDecl",
|
||||
// CHECK-NEXT: "name": "a",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A &"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "storageDuration": "automatic",
|
||||
// CHECK-NEXT: "boundToLValueRef": true,
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ImplicitCastExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 147,
|
||||
// CHECK-NEXT: "col": 16,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "castKind": "NoOp",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXFunctionalCastExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 147,
|
||||
// CHECK-NEXT: "col": 16,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "castKind": "NoOp",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "InitListExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 148,
|
||||
// CHECK-NEXT: "col": 17,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "InitListExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 149,
|
||||
// CHECK-NEXT: "col": 18,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 151,
|
||||
// CHECK-NEXT: "col": 20,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "int[1]"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "IntegerLiteral",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 150,
|
||||
// CHECK-NEXT: "col": 19,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 150,
|
||||
// CHECK-NEXT: "col": 19,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "int"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "value": "0"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "FunctionDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
// CHECK-NEXT: "offset": 164,
|
||||
// CHECK-NEXT: "line": 11,
|
||||
// CHECK-NEXT: "col": 6,
|
||||
// CHECK-NEXT: "tokLen": 4
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 159,
|
||||
// CHECK-NEXT: "col": 1,
|
||||
// CHECK-NEXT: "tokLen": 4
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 182,
|
||||
// CHECK-NEXT: "line": 13,
|
||||
// CHECK-NEXT: "col": 1,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "name": "test",
|
||||
// CHECK-NEXT: "mangledName": "_Z4testv",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void ()"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CompoundStmt",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 171,
|
||||
// CHECK-NEXT: "line": 11,
|
||||
// CHECK-NEXT: "col": 13,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 182,
|
||||
// CHECK-NEXT: "line": 13,
|
||||
// CHECK-NEXT: "col": 1,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "DeclStmt",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 175,
|
||||
// CHECK-NEXT: "line": 12,
|
||||
// CHECK-NEXT: "col": 3,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 180,
|
||||
// CHECK-NEXT: "col": 8,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "VarDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
// CHECK-NEXT: "offset": 177,
|
||||
// CHECK-NEXT: "col": 5,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 175,
|
||||
// CHECK-NEXT: "col": 3,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 179,
|
||||
// CHECK-NEXT: "col": 7,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "name": "b",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "B"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "init": "list",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "InitListExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 178,
|
||||
// CHECK-NEXT: "col": 6,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 179,
|
||||
// CHECK-NEXT: "col": 7,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "B"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXDefaultInitExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 179,
|
||||
// CHECK-NEXT: "col": 7,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 179,
|
||||
// CHECK-NEXT: "col": 7,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "lvalue",
|
||||
// CHECK-NEXT: "hasRewrittenInit": true,
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ExprWithCleanups",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 147,
|
||||
// CHECK-NEXT: "line": 8,
|
||||
// CHECK-NEXT: "col": 16,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "lvalue",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "MaterializeTemporaryExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 147,
|
||||
// CHECK-NEXT: "col": 16,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "lvalue",
|
||||
// CHECK-NEXT: "extendingDecl": {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "FieldDecl",
|
||||
// CHECK-NEXT: "name": "a",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A &"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "storageDuration": "automatic",
|
||||
// CHECK-NEXT: "boundToLValueRef": true,
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ImplicitCastExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 147,
|
||||
// CHECK-NEXT: "col": 16,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "const A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "castKind": "NoOp",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "CXXFunctionalCastExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 147,
|
||||
// CHECK-NEXT: "col": 16,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "castKind": "NoOp",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "InitListExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 148,
|
||||
// CHECK-NEXT: "col": 17,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 152,
|
||||
// CHECK-NEXT: "col": 21,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "A"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "InitListExpr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 149,
|
||||
// CHECK-NEXT: "col": 18,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 151,
|
||||
// CHECK-NEXT: "col": 20,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "int[1]"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "IntegerLiteral",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {
|
||||
// CHECK-NEXT: "offset": 150,
|
||||
// CHECK-NEXT: "col": 19,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "end": {
|
||||
// CHECK-NEXT: "offset": 150,
|
||||
// CHECK-NEXT: "col": 19,
|
||||
// CHECK-NEXT: "tokLen": 1
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "int"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "valueCategory": "prvalue",
|
||||
// CHECK-NEXT: "value": "0"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
21
clang/test/AST/ast-dump-default-init.cpp
Normal file
21
clang/test/AST/ast-dump-default-init.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only -ast-dump %s | FileCheck %s
|
||||
|
||||
struct A {
|
||||
int arr[1];
|
||||
};
|
||||
|
||||
struct B {
|
||||
const A &a = A{{0}};
|
||||
};
|
||||
|
||||
void test() {
|
||||
B b{};
|
||||
}
|
||||
// CHECK: -CXXDefaultInitExpr 0x{{[^ ]*}} <{{.*}}> 'const A' lvalue has rewritten init
|
||||
// CHECK-NEXT: `-ExprWithCleanups 0x{{[^ ]*}} <{{.*}}> 'const A' lvalue
|
||||
// CHECK-NEXT: `-MaterializeTemporaryExpr 0x{{[^ ]*}} <{{.*}}> 'const A' lvalue extended by Field 0x{{[^ ]*}} 'a' 'const A &'
|
||||
// CHECK-NEXT: `-ImplicitCastExpr 0x{{[^ ]*}} <{{.*}}> 'const A' <NoOp>
|
||||
// CHECK-NEXT: `-CXXFunctionalCastExpr 0x{{[^ ]*}} <{{.*}}> 'A' functional cast to A <NoOp>
|
||||
// CHECK-NEXT: `-InitListExpr 0x{{[^ ]*}} <{{.*}}> 'A'
|
||||
// CHECK-NEXT: `-InitListExpr 0x{{[^ ]*}} <{{.*}}> 'int[1]'
|
||||
// CHECK-NEXT: `-IntegerLiteral 0x{{[^ ]*}} <{{.*}}> 'int' 0
|
@ -132,6 +132,9 @@ void test4() {
|
||||
// CHECK-NEXT: | | `-DeclRefExpr {{.*}} 'int (&(const A &))[3]' lvalue Function {{.*}} 'default_arg_fn' 'int (&(const A &))[3]'
|
||||
// CHECK-NEXT: | `-CXXDefaultArgExpr {{.*}} <<invalid sloc>> 'const A':'const P2718R0::A' lvalue has rewritten init
|
||||
// CHECK-NEXT: | `-MaterializeTemporaryExpr {{.*}} 'const A':'const P2718R0::A' lvalue extended by Var {{.*}} '__range1' 'int (&)[3]'
|
||||
// CHECK-NEXT: | `-ImplicitCastExpr {{.*}} 'const A':'const P2718R0::A' <NoOp>
|
||||
// CHECK-NEXT: | `-CXXBindTemporaryExpr {{.*}} 'A':'P2718R0::A' (CXXTemporary {{.*}})
|
||||
// CHECK-NEXT: | `-CXXTemporaryObjectExpr {{.*}} 'A':'P2718R0::A' 'void ()'
|
||||
for (auto e : default_arg_fn())
|
||||
bar(e);
|
||||
}
|
||||
@ -179,10 +182,19 @@ void test5() {
|
||||
// CHECK-NEXT: | | | | `-CXXTemporaryObjectExpr {{.*}} 'A':'P2718R0::A' 'void ()'
|
||||
// CHECK-NEXT: | | | `-CXXDefaultArgExpr {{.*}} <<invalid sloc>> 'const DefaultA':'const P2718R0::DefaultA' lvalue has rewritten init
|
||||
// CHECK-NEXT: | | | `-MaterializeTemporaryExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' lvalue extended by Var {{.*}} '__range1' 'int (&)[3]'
|
||||
// CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' <NoOp>
|
||||
// CHECK-NEXT: | | | `-CXXBindTemporaryExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' (CXXTemporary {{.*}})
|
||||
// CHECK-NEXT: | | | `-CXXTemporaryObjectExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' 'void ()'
|
||||
// CHECK-NEXT: | | `-CXXDefaultArgExpr {{.*}} <<invalid sloc>> 'const DefaultA':'const P2718R0::DefaultA' lvalue has rewritten init
|
||||
// CHECK-NEXT: | | `-MaterializeTemporaryExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' lvalue extended by Var {{.*}} '__range1' 'int (&)[3]'
|
||||
// CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' <NoOp>
|
||||
// CHECK-NEXT: | | `-CXXBindTemporaryExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' (CXXTemporary {{.*}})
|
||||
// CHECK-NEXT: | | `-CXXTemporaryObjectExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' 'void ()'
|
||||
// CHECK-NEXT: | `-CXXDefaultArgExpr {{.*}} <<invalid sloc>> 'const DefaultA':'const P2718R0::DefaultA' lvalue has rewritten init
|
||||
// CHECK-NEXT: | `-MaterializeTemporaryExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' lvalue extended by Var {{.*}} '__range1' 'int (&)[3]'
|
||||
// CHECK-NEXT: | `-ImplicitCastExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' <NoOp>
|
||||
// CHECK-NEXT: | `-CXXBindTemporaryExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' (CXXTemporary {{.*}})
|
||||
// CHECK-NEXT: | `-CXXTemporaryObjectExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' 'void ()'
|
||||
for (auto e : default_arg_fn(foo(foo(foo(A())))))
|
||||
bar(e);
|
||||
}
|
||||
@ -219,10 +231,19 @@ void test6() {
|
||||
// CHECK-NEXT: | | | | `-CXXTemporaryObjectExpr {{.*}} 'C':'P2718R0::C' 'void ()'
|
||||
// CHECK-NEXT: | | | `-CXXDefaultArgExpr {{.*}} <<invalid sloc>> 'const DefaultA':'const P2718R0::DefaultA' lvalue has rewritten init
|
||||
// CHECK-NEXT: | | | `-MaterializeTemporaryExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' lvalue extended by Var {{.*}} '__range1' 'C &&'
|
||||
// CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' <NoOp>
|
||||
// CHECK-NEXT: | | | `-CXXBindTemporaryExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' (CXXTemporary {{.*}})
|
||||
// CHECK-NEXT: | | | `-CXXTemporaryObjectExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' 'void ()'
|
||||
// CHECK-NEXT: | | `-CXXDefaultArgExpr {{.*}} <<invalid sloc>> 'const DefaultA':'const P2718R0::DefaultA' lvalue has rewritten init
|
||||
// CHECK-NEXT: | | `-MaterializeTemporaryExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' lvalue extended by Var {{.*}} '__range1' 'C &&'
|
||||
// CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' <NoOp>
|
||||
// CHECK-NEXT: | | `-CXXBindTemporaryExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' (CXXTemporary {{.*}})
|
||||
// CHECK-NEXT: | | `-CXXTemporaryObjectExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' 'void ()'
|
||||
// CHECK-NEXT: | `-CXXDefaultArgExpr {{.*}} <<invalid sloc>> 'const DefaultA':'const P2718R0::DefaultA' lvalue has rewritten init
|
||||
// CHECK-NEXT: | `-MaterializeTemporaryExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' lvalue extended by Var {{.*}} '__range1' 'C &&'
|
||||
// CHECK-NEXT: | `-ImplicitCastExpr {{.*}} 'const DefaultA':'const P2718R0::DefaultA' <NoOp>
|
||||
// CHECK-NEXT: | `-CXXBindTemporaryExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' (CXXTemporary {{.*}})
|
||||
// CHECK-NEXT: | `-CXXTemporaryObjectExpr {{.*}} 'DefaultA':'P2718R0::DefaultA' 'void ()'
|
||||
for (auto e : C(0, C(0, C(0, C()))))
|
||||
bar(e);
|
||||
}
|
||||
|
@ -368,6 +368,8 @@ FunctionDecl 'stringConstruct'
|
||||
| |-ImplicitCastExpr
|
||||
| | `-StringLiteral
|
||||
| `-CXXDefaultArgExpr
|
||||
| `-UnaryOperator
|
||||
| `-IntegerLiteral
|
||||
`-ExprWithCleanups
|
||||
`-CXXOperatorCallExpr
|
||||
|-ImplicitCastExpr
|
||||
@ -378,6 +380,8 @@ FunctionDecl 'stringConstruct'
|
||||
|-ImplicitCastExpr
|
||||
| `-StringLiteral
|
||||
`-CXXDefaultArgExpr
|
||||
`-UnaryOperator
|
||||
`-IntegerLiteral
|
||||
)cpp");
|
||||
|
||||
EXPECT_EQ(dumpASTString(TK_IgnoreUnlessSpelledInSource,
|
||||
@ -415,6 +419,8 @@ FunctionDecl 'overloadCall'
|
||||
| |-ImplicitCastExpr
|
||||
| | `-StringLiteral
|
||||
| `-CXXDefaultArgExpr
|
||||
| `-UnaryOperator
|
||||
| `-IntegerLiteral
|
||||
`-CXXMemberCallExpr
|
||||
`-MemberExpr
|
||||
`-ParenExpr
|
||||
@ -1219,6 +1225,7 @@ CXXRecordDecl 'Record'
|
||||
| | `-IntegerLiteral
|
||||
| |-CXXCtorInitializer 'm_i2'
|
||||
| | `-CXXDefaultInitExpr
|
||||
| | `-IntegerLiteral
|
||||
| |-CXXCtorInitializer 'm_s'
|
||||
| | `-CXXConstructExpr
|
||||
| `-CompoundStmt
|
||||
@ -1485,6 +1492,7 @@ CallExpr
|
||||
| `-DeclRefExpr 'hasDefaultArg'
|
||||
|-IntegerLiteral
|
||||
`-CXXDefaultArgExpr
|
||||
`-IntegerLiteral
|
||||
)cpp");
|
||||
EXPECT_EQ(dumpASTString(TK_IgnoreUnlessSpelledInSource,
|
||||
BN[0].getNodeAs<CallExpr>("funcCall")),
|
||||
|
Loading…
x
Reference in New Issue
Block a user