https://github.com/mizvekov created https://github.com/llvm/llvm-project/pull/133343
Fixes a regression introduced in https://github.com/llvm/llvm-project/pull/130537 and reported here https://github.com/llvm/llvm-project/issues/133144 This fixes a crash in ASTStructuralEquivalence where the non-null precondition for IsStructurallyEquivalent would be violated, when comparing member pointers with a dependent class. This also drive-by fixes the ast node traverser for member pointers so it doesn't traverse into the qualifier in case it's not a type, or the class declaration in case there is none. This avoids printing of `<<<NULL>>>` on the text node dumper, which is redundant. No release notes since the regression was never released. Fixes https://github.com/llvm/llvm-project/issues/133144 >From b679b6ef64e682808e7751eeba694e7a2f3e00f8 Mon Sep 17 00:00:00 2001 From: Matheus Izvekov <mizve...@gmail.com> Date: Thu, 27 Mar 2025 20:09:07 -0300 Subject: [PATCH] [clang] fix structural comparison dependent class member pointer Fixes a regression introduced in https://github.com/llvm/llvm-project/pull/130537 and reported here https://github.com/llvm/llvm-project/issues/133144 This fixes a crash in ASTStructuralEquivalence where the non-null precondition for IsStructurallyEquivalent would be violated, when comparing member pointers with a dependent class. This also drive-by fixes the ast node traverser for member pointers so it doesn't traverse into the qualifier in case it's not a type, or the class declaration in case there is none. This avoids printing of `<<<NULL>>>` on the text node dumper, which is redundant. No release notes since the regression was never released. Fixes https://github.com/llvm/llvm-project/issues/133144 --- clang/include/clang/AST/ASTNodeTraverser.h | 9 +- clang/lib/AST/ASTStructuralEquivalence.cpp | 8 +- ...dump-template-json-win32-mangler-crash.cpp | 3 - clang/test/AST/ast-dump-templates.cpp | 375 +++++++++++++++++- clang/test/AST/ast-dump-types-json.cpp | 304 -------------- 5 files changed, 381 insertions(+), 318 deletions(-) diff --git a/clang/include/clang/AST/ASTNodeTraverser.h b/clang/include/clang/AST/ASTNodeTraverser.h index f557555e96e59..83a6b77704f34 100644 --- a/clang/include/clang/AST/ASTNodeTraverser.h +++ b/clang/include/clang/AST/ASTNodeTraverser.h @@ -394,8 +394,13 @@ class ASTNodeTraverser } void VisitMemberPointerType(const MemberPointerType *T) { // FIXME: Provide a NestedNameSpecifier visitor. - Visit(T->getQualifier()->getAsType()); - Visit(T->getMostRecentCXXRecordDecl()); + NestedNameSpecifier *Qualifier = T->getQualifier(); + if (NestedNameSpecifier::SpecifierKind K = Qualifier->getKind(); + K == NestedNameSpecifier::TypeSpec || + K == NestedNameSpecifier::TypeSpecWithTemplate) + Visit(Qualifier->getAsType()); + if (T->isSugared()) + Visit(T->getMostRecentCXXRecordDecl()->getTypeForDecl()); Visit(T->getPointeeType()); } void VisitArrayType(const ArrayType *T) { Visit(T->getElementType()); } diff --git a/clang/lib/AST/ASTStructuralEquivalence.cpp b/clang/lib/AST/ASTStructuralEquivalence.cpp index 2c2c8fd677500..a4349bdaaf682 100644 --- a/clang/lib/AST/ASTStructuralEquivalence.cpp +++ b/clang/lib/AST/ASTStructuralEquivalence.cpp @@ -897,9 +897,11 @@ static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, if (!IsStructurallyEquivalent(Context, MemPtr1->getQualifier(), MemPtr2->getQualifier())) return false; - if (!IsStructurallyEquivalent(Context, - MemPtr1->getMostRecentCXXRecordDecl(), - MemPtr2->getMostRecentCXXRecordDecl())) + CXXRecordDecl *D1 = MemPtr1->getMostRecentCXXRecordDecl(), + *D2 = MemPtr2->getMostRecentCXXRecordDecl(); + if (D1 == D2) + break; + if (!D1 || !D2 || !IsStructurallyEquivalent(Context, D1, D2)) return false; break; } diff --git a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp index 9f0d3efb6277e..b80c1e1d77140 100644 --- a/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp +++ b/clang/test/AST/ast-dump-template-json-win32-mangler-crash.cpp @@ -2452,9 +2452,6 @@ int main() // CHECK-NEXT: } // CHECK-NEXT: }, // CHECK-NEXT: { -// CHECK-NEXT: "id": "0x0" -// CHECK-NEXT: }, -// CHECK-NEXT: { // CHECK-NEXT: "id": "0x{{.*}}", // CHECK-NEXT: "kind": "TemplateTypeParmType", // CHECK-NEXT: "type": { diff --git a/clang/test/AST/ast-dump-templates.cpp b/clang/test/AST/ast-dump-templates.cpp index 0e0fa73871bb7..79572f5103bde 100644 --- a/clang/test/AST/ast-dump-templates.cpp +++ b/clang/test/AST/ast-dump-templates.cpp @@ -154,10 +154,30 @@ namespace TestMemberPointerPartialSpec { // DUMP-NEXT: |-TemplateArgument type 'type-parameter-0-0 type-parameter-0-1::*' // DUMP-NEXT: | `-MemberPointerType {{.+}} 'type-parameter-0-0 type-parameter-0-1::*' dependent // DUMP-NEXT: | |-TemplateTypeParmType {{.+}} 'type-parameter-0-1' dependent depth 0 index 1 -// DUMP-NEXT: | |-<<<NULL>>> // DUMP-NEXT: | `-TemplateTypeParmType {{.+}} 'type-parameter-0-0' dependent depth 0 index 0 } // namespace TestMemberPointerPartialSpec +namespace TestDependentMemberPointer { + template <class U> struct A { + using X = int U::*; + using Y = int U::test::*; + using Z = int U::template V<int>::*; + }; +// DUMP-LABEL: NamespaceDecl {{.+}} TestDependentMemberPointer{{$}} +// DUMP: |-TypeAliasDecl {{.+}} X 'int U::*'{{$}} +// DUMP-NEXT: | `-MemberPointerType {{.+}} 'int U::*' dependent +// DUMP-NEXT: | |-TemplateTypeParmType {{.+}} 'U' dependent depth 0 index 0 +// DUMP-NEXT: | | `-TemplateTypeParm {{.+}} 'U' +// DUMP-NEXT: | `-BuiltinType {{.+}} 'int' +// DUMP-NEXT: |-TypeAliasDecl {{.+}} Y 'int U::test::*'{{$}} +// DUMP-NEXT: | `-MemberPointerType {{.+}} 'int U::test::*' dependent +// DUMP-NEXT: | `-BuiltinType {{.+}} 'int' +// DUMP-NEXT: `-TypeAliasDecl {{.+}} Z 'int U::template V<int>::*'{{$}} +// DUMP-NEXT: `-MemberPointerType {{.+}} 'int U::template V<int>::*' dependent +// DUMP-NEXT: |-DependentTemplateSpecializationType {{.+}} 'U::template V<int>' dependent +// DUMP-NEXT: `-BuiltinType {{.+}} 'int' +} // namespoace TestDependentMemberPointer + // NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py @@ -6345,8 +6365,8 @@ namespace TestMemberPointerPartialSpec { // JSON-NEXT: "tokLen": 9 // JSON-NEXT: }, // JSON-NEXT: "end": { -// JSON-NEXT: "offset": 5335, -// JSON-NEXT: "line": 159, +// JSON-NEXT: "offset": 5303, +// JSON-NEXT: "line": 158, // JSON-NEXT: "col": 1, // JSON-NEXT: "tokLen": 1 // JSON-NEXT: } @@ -6480,9 +6500,6 @@ namespace TestMemberPointerPartialSpec { // JSON-NEXT: } // JSON-NEXT: }, // JSON-NEXT: { -// JSON-NEXT: "id": "0x0" -// JSON-NEXT: }, -// JSON-NEXT: { // JSON-NEXT: "id": "0x{{.*}}", // JSON-NEXT: "kind": "TemplateTypeParmType", // JSON-NEXT: "type": { @@ -6554,6 +6571,352 @@ namespace TestMemberPointerPartialSpec { // JSON-NEXT: ] // JSON-NEXT: } // JSON-NEXT: ] +// JSON-NEXT: }, +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "NamespaceDecl", +// JSON-NEXT: "loc": { +// JSON-NEXT: "offset": 5358, +// JSON-NEXT: "line": 160, +// JSON-NEXT: "col": 11, +// JSON-NEXT: "tokLen": 26 +// JSON-NEXT: }, +// JSON-NEXT: "range": { +// JSON-NEXT: "begin": { +// JSON-NEXT: "offset": 5348, +// JSON-NEXT: "col": 1, +// JSON-NEXT: "tokLen": 9 +// JSON-NEXT: }, +// JSON-NEXT: "end": { +// JSON-NEXT: "offset": 6359, +// JSON-NEXT: "line": 179, +// JSON-NEXT: "col": 1, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: "name": "TestDependentMemberPointer", +// JSON-NEXT: "inner": [ +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "ClassTemplateDecl", +// JSON-NEXT: "loc": { +// JSON-NEXT: "offset": 5415, +// JSON-NEXT: "line": 161, +// JSON-NEXT: "col": 29, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: }, +// JSON-NEXT: "range": { +// JSON-NEXT: "begin": { +// JSON-NEXT: "offset": 5389, +// JSON-NEXT: "col": 3, +// JSON-NEXT: "tokLen": 8 +// JSON-NEXT: }, +// JSON-NEXT: "end": { +// JSON-NEXT: "offset": 5516, +// JSON-NEXT: "line": 165, +// JSON-NEXT: "col": 3, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: "name": "A", +// JSON-NEXT: "inner": [ +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "TemplateTypeParmDecl", +// JSON-NEXT: "loc": { +// JSON-NEXT: "offset": 5405, +// JSON-NEXT: "line": 161, +// JSON-NEXT: "col": 19, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: }, +// JSON-NEXT: "range": { +// JSON-NEXT: "begin": { +// JSON-NEXT: "offset": 5399, +// JSON-NEXT: "col": 13, +// JSON-NEXT: "tokLen": 5 +// JSON-NEXT: }, +// JSON-NEXT: "end": { +// JSON-NEXT: "offset": 5405, +// JSON-NEXT: "col": 19, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: "name": "U", +// JSON-NEXT: "tagUsed": "class", +// JSON-NEXT: "depth": 0, +// JSON-NEXT: "index": 0 +// JSON-NEXT: }, +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "CXXRecordDecl", +// JSON-NEXT: "loc": { +// JSON-NEXT: "offset": 5415, +// JSON-NEXT: "col": 29, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: }, +// JSON-NEXT: "range": { +// JSON-NEXT: "begin": { +// JSON-NEXT: "offset": 5408, +// JSON-NEXT: "col": 22, +// JSON-NEXT: "tokLen": 6 +// JSON-NEXT: }, +// JSON-NEXT: "end": { +// JSON-NEXT: "offset": 5516, +// JSON-NEXT: "line": 165, +// JSON-NEXT: "col": 3, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: "name": "A", +// JSON-NEXT: "tagUsed": "struct", +// JSON-NEXT: "completeDefinition": true, +// JSON-NEXT: "definitionData": { +// JSON-NEXT: "canConstDefaultInit": true, +// JSON-NEXT: "copyAssign": { +// JSON-NEXT: "hasConstParam": true, +// JSON-NEXT: "implicitHasConstParam": true, +// JSON-NEXT: "needsImplicit": true, +// JSON-NEXT: "simple": true, +// JSON-NEXT: "trivial": true +// JSON-NEXT: }, +// JSON-NEXT: "copyCtor": { +// JSON-NEXT: "hasConstParam": true, +// JSON-NEXT: "implicitHasConstParam": true, +// JSON-NEXT: "needsImplicit": true, +// JSON-NEXT: "simple": true, +// JSON-NEXT: "trivial": true +// JSON-NEXT: }, +// JSON-NEXT: "defaultCtor": { +// JSON-NEXT: "defaultedIsConstexpr": true, +// JSON-NEXT: "exists": true, +// JSON-NEXT: "isConstexpr": true, +// JSON-NEXT: "needsImplicit": true, +// JSON-NEXT: "trivial": true +// JSON-NEXT: }, +// JSON-NEXT: "dtor": { +// JSON-NEXT: "irrelevant": true, +// JSON-NEXT: "needsImplicit": true, +// JSON-NEXT: "simple": true, +// JSON-NEXT: "trivial": true +// JSON-NEXT: }, +// JSON-NEXT: "hasConstexprNonCopyMoveConstructor": true, +// JSON-NEXT: "isAggregate": true, +// JSON-NEXT: "isEmpty": true, +// JSON-NEXT: "isLiteral": true, +// JSON-NEXT: "isPOD": true, +// JSON-NEXT: "isStandardLayout": true, +// JSON-NEXT: "isTrivial": true, +// JSON-NEXT: "isTriviallyCopyable": true, +// JSON-NEXT: "moveAssign": { +// JSON-NEXT: "exists": true, +// JSON-NEXT: "needsImplicit": true, +// JSON-NEXT: "simple": true, +// JSON-NEXT: "trivial": true +// JSON-NEXT: }, +// JSON-NEXT: "moveCtor": { +// JSON-NEXT: "exists": true, +// JSON-NEXT: "needsImplicit": true, +// JSON-NEXT: "simple": true, +// JSON-NEXT: "trivial": true +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: "inner": [ +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "CXXRecordDecl", +// JSON-NEXT: "loc": { +// JSON-NEXT: "offset": 5415, +// JSON-NEXT: "line": 161, +// JSON-NEXT: "col": 29, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: }, +// JSON-NEXT: "range": { +// JSON-NEXT: "begin": { +// JSON-NEXT: "offset": 5408, +// JSON-NEXT: "col": 22, +// JSON-NEXT: "tokLen": 6 +// JSON-NEXT: }, +// JSON-NEXT: "end": { +// JSON-NEXT: "offset": 5415, +// JSON-NEXT: "col": 29, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: "isImplicit": true, +// JSON-NEXT: "name": "A", +// JSON-NEXT: "tagUsed": "struct" +// JSON-NEXT: }, +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "TypeAliasDecl", +// JSON-NEXT: "loc": { +// JSON-NEXT: "offset": 5429, +// JSON-NEXT: "line": 162, +// JSON-NEXT: "col": 11, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: }, +// JSON-NEXT: "range": { +// JSON-NEXT: "begin": { +// JSON-NEXT: "offset": 5423, +// JSON-NEXT: "col": 5, +// JSON-NEXT: "tokLen": 5 +// JSON-NEXT: }, +// JSON-NEXT: "end": { +// JSON-NEXT: "offset": 5440, +// JSON-NEXT: "col": 22, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: "name": "X", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "int U::*" +// JSON-NEXT: }, +// JSON-NEXT: "inner": [ +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "MemberPointerType", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "int U::*" +// JSON-NEXT: }, +// JSON-NEXT: "isDependent": true, +// JSON-NEXT: "isInstantiationDependent": true, +// JSON-NEXT: "isData": true, +// JSON-NEXT: "inner": [ +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "TemplateTypeParmType", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "U" +// JSON-NEXT: }, +// JSON-NEXT: "isDependent": true, +// JSON-NEXT: "isInstantiationDependent": true, +// JSON-NEXT: "depth": 0, +// JSON-NEXT: "index": 0, +// JSON-NEXT: "decl": { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "TemplateTypeParmDecl", +// JSON-NEXT: "name": "U" +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "BuiltinType", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "int" +// JSON-NEXT: } +// JSON-NEXT: } +// JSON-NEXT: ] +// JSON-NEXT: } +// JSON-NEXT: ] +// JSON-NEXT: }, +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "TypeAliasDecl", +// JSON-NEXT: "loc": { +// JSON-NEXT: "offset": 5453, +// JSON-NEXT: "line": 163, +// JSON-NEXT: "col": 11, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: }, +// JSON-NEXT: "range": { +// JSON-NEXT: "begin": { +// JSON-NEXT: "offset": 5447, +// JSON-NEXT: "col": 5, +// JSON-NEXT: "tokLen": 5 +// JSON-NEXT: }, +// JSON-NEXT: "end": { +// JSON-NEXT: "offset": 5470, +// JSON-NEXT: "col": 28, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: "name": "Y", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "int U::test::*" +// JSON-NEXT: }, +// JSON-NEXT: "inner": [ +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "MemberPointerType", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "int U::test::*" +// JSON-NEXT: }, +// JSON-NEXT: "isDependent": true, +// JSON-NEXT: "isInstantiationDependent": true, +// JSON-NEXT: "isData": true, +// JSON-NEXT: "inner": [ +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "BuiltinType", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "int" +// JSON-NEXT: } +// JSON-NEXT: } +// JSON-NEXT: ] +// JSON-NEXT: } +// JSON-NEXT: ] +// JSON-NEXT: }, +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "TypeAliasDecl", +// JSON-NEXT: "loc": { +// JSON-NEXT: "offset": 5483, +// JSON-NEXT: "line": 164, +// JSON-NEXT: "col": 11, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: }, +// JSON-NEXT: "range": { +// JSON-NEXT: "begin": { +// JSON-NEXT: "offset": 5477, +// JSON-NEXT: "col": 5, +// JSON-NEXT: "tokLen": 5 +// JSON-NEXT: }, +// JSON-NEXT: "end": { +// JSON-NEXT: "offset": 5511, +// JSON-NEXT: "col": 39, +// JSON-NEXT: "tokLen": 1 +// JSON-NEXT: } +// JSON-NEXT: }, +// JSON-NEXT: "name": "Z", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "int U::template V<int>::*" +// JSON-NEXT: }, +// JSON-NEXT: "inner": [ +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "MemberPointerType", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "int U::template V<int>::*" +// JSON-NEXT: }, +// JSON-NEXT: "isDependent": true, +// JSON-NEXT: "isInstantiationDependent": true, +// JSON-NEXT: "isData": true, +// JSON-NEXT: "inner": [ +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "DependentTemplateSpecializationType", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "U::template V<int>" +// JSON-NEXT: }, +// JSON-NEXT: "isDependent": true, +// JSON-NEXT: "isInstantiationDependent": true +// JSON-NEXT: }, +// JSON-NEXT: { +// JSON-NEXT: "id": "0x{{.*}}", +// JSON-NEXT: "kind": "BuiltinType", +// JSON-NEXT: "type": { +// JSON-NEXT: "qualType": "int" +// JSON-NEXT: } +// JSON-NEXT: } +// JSON-NEXT: ] +// JSON-NEXT: } +// JSON-NEXT: ] +// JSON-NEXT: } +// JSON-NEXT: ] +// JSON-NEXT: } +// JSON-NEXT: ] +// JSON-NEXT: } +// JSON-NEXT: ] // JSON-NEXT: } // JSON-NEXT: ] // JSON-NEXT: } diff --git a/clang/test/AST/ast-dump-types-json.cpp b/clang/test/AST/ast-dump-types-json.cpp index 67379ac318e05..cc4d4d9a64872 100644 --- a/clang/test/AST/ast-dump-types-json.cpp +++ b/clang/test/AST/ast-dump-types-json.cpp @@ -264,158 +264,6 @@ using ::TestUsingShadowDeclType; // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "CXXRecordDecl", -// CHECK-NEXT: "loc": { -// CHECK-NEXT: "offset": 158, -// CHECK-NEXT: "line": 7, -// CHECK-NEXT: "col": 8, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 151, -// CHECK-NEXT: "col": 1, -// CHECK-NEXT: "tokLen": 6 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 183, -// CHECK-NEXT: "line": 10, -// CHECK-NEXT: "col": 1, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "name": "T", -// 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: "needsImplicit": 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": 158, -// CHECK-NEXT: "line": 7, -// CHECK-NEXT: "col": 8, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 151, -// CHECK-NEXT: "col": 1, -// CHECK-NEXT: "tokLen": 6 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 158, -// CHECK-NEXT: "col": 8, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "isImplicit": true, -// CHECK-NEXT: "name": "T", -// CHECK-NEXT: "tagUsed": "struct" -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "FieldDecl", -// CHECK-NEXT: "loc": { -// CHECK-NEXT: "offset": 168, -// CHECK-NEXT: "line": 8, -// CHECK-NEXT: "col": 7, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 164, -// CHECK-NEXT: "col": 3, -// CHECK-NEXT: "tokLen": 3 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 168, -// CHECK-NEXT: "col": 7, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "name": "I", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "int" -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "CXXMethodDecl", -// CHECK-NEXT: "loc": { -// CHECK-NEXT: "offset": 178, -// CHECK-NEXT: "line": 9, -// CHECK-NEXT: "col": 8, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 173, -// CHECK-NEXT: "col": 3, -// CHECK-NEXT: "tokLen": 4 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 180, -// CHECK-NEXT: "col": 10, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "name": "F", -// CHECK-NEXT: "mangledName": "_ZN1T1FEv", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "void ()" -// 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 ()" @@ -494,158 +342,6 @@ using ::TestUsingShadowDeclType; // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "CXXRecordDecl", -// CHECK-NEXT: "loc": { -// CHECK-NEXT: "offset": 158, -// CHECK-NEXT: "line": 7, -// CHECK-NEXT: "col": 8, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 151, -// CHECK-NEXT: "col": 1, -// CHECK-NEXT: "tokLen": 6 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 183, -// CHECK-NEXT: "line": 10, -// CHECK-NEXT: "col": 1, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "name": "T", -// 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: "needsImplicit": 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": 158, -// CHECK-NEXT: "line": 7, -// CHECK-NEXT: "col": 8, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 151, -// CHECK-NEXT: "col": 1, -// CHECK-NEXT: "tokLen": 6 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 158, -// CHECK-NEXT: "col": 8, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "isImplicit": true, -// CHECK-NEXT: "name": "T", -// CHECK-NEXT: "tagUsed": "struct" -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "FieldDecl", -// CHECK-NEXT: "loc": { -// CHECK-NEXT: "offset": 168, -// CHECK-NEXT: "line": 8, -// CHECK-NEXT: "col": 7, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 164, -// CHECK-NEXT: "col": 3, -// CHECK-NEXT: "tokLen": 3 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 168, -// CHECK-NEXT: "col": 7, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "name": "I", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "int" -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "CXXMethodDecl", -// CHECK-NEXT: "loc": { -// CHECK-NEXT: "offset": 178, -// CHECK-NEXT: "line": 9, -// CHECK-NEXT: "col": 8, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 173, -// CHECK-NEXT: "col": 3, -// CHECK-NEXT: "tokLen": 4 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 180, -// CHECK-NEXT: "col": 10, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "name": "F", -// CHECK-NEXT: "mangledName": "_ZN1T1FEv", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "void ()" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", // CHECK-NEXT: "kind": "BuiltinType", // CHECK-NEXT: "type": { // CHECK-NEXT: "qualType": "int" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits