forked from OSchip/llvm-project
Extend -ast-dump for CXXRecordDecl to dump the flags from the DefinitionData.
llvm-svn: 313943
This commit is contained in:
parent
cc10e633d9
commit
dfc4bff19b
|
@ -1376,6 +1376,128 @@ void ASTDumper::VisitCXXRecordDecl(const CXXRecordDecl *D) {
|
|||
if (!D->isCompleteDefinition())
|
||||
return;
|
||||
|
||||
dumpChild([=] {
|
||||
{
|
||||
ColorScope Color(*this, DeclKindNameColor);
|
||||
OS << "DefinitionData";
|
||||
}
|
||||
#define FLAG(fn, name) if (D->fn()) OS << " " #name;
|
||||
FLAG(isParsingBaseSpecifiers, parsing_base_specifiers);
|
||||
|
||||
FLAG(isGenericLambda, generic);
|
||||
FLAG(isLambda, lambda);
|
||||
|
||||
FLAG(canPassInRegisters, pass_in_registers);
|
||||
FLAG(isEmpty, empty);
|
||||
FLAG(isAggregate, aggregate);
|
||||
FLAG(isStandardLayout, standard_layout);
|
||||
FLAG(isTriviallyCopyable, trivially_copyable);
|
||||
FLAG(isPOD, pod);
|
||||
FLAG(isTrivial, trivial);
|
||||
FLAG(isPolymorphic, polymorphic);
|
||||
FLAG(isAbstract, abstract);
|
||||
FLAG(isLiteral, literal);
|
||||
|
||||
FLAG(hasUserDeclaredConstructor, has_user_declared_ctor);
|
||||
FLAG(hasConstexprNonCopyMoveConstructor, has_constexpr_non_copy_move_ctor);
|
||||
FLAG(hasMutableFields, has_mutable_fields);
|
||||
FLAG(hasVariantMembers, has_variant_members);
|
||||
FLAG(allowConstDefaultInit, can_const_default_init);
|
||||
|
||||
dumpChild([=] {
|
||||
{
|
||||
ColorScope Color(*this, DeclKindNameColor);
|
||||
OS << "DefaultConstructor";
|
||||
}
|
||||
FLAG(hasDefaultConstructor, exists);
|
||||
FLAG(hasTrivialDefaultConstructor, trivial);
|
||||
FLAG(hasNonTrivialDefaultConstructor, non_trivial);
|
||||
FLAG(hasUserProvidedDefaultConstructor, user_provided);
|
||||
FLAG(hasConstexprDefaultConstructor, constexpr);
|
||||
FLAG(needsImplicitDefaultConstructor, needs_implicit);
|
||||
FLAG(defaultedDefaultConstructorIsConstexpr, defaulted_is_constexpr);
|
||||
});
|
||||
|
||||
dumpChild([=] {
|
||||
{
|
||||
ColorScope Color(*this, DeclKindNameColor);
|
||||
OS << "CopyConstructor";
|
||||
}
|
||||
FLAG(hasSimpleCopyConstructor, simple);
|
||||
FLAG(hasTrivialCopyConstructor, trivial);
|
||||
FLAG(hasNonTrivialCopyConstructor, non_trivial);
|
||||
FLAG(hasUserDeclaredCopyConstructor, user_declared);
|
||||
FLAG(hasCopyConstructorWithConstParam, has_const_param);
|
||||
FLAG(needsImplicitCopyConstructor, needs_implicit);
|
||||
FLAG(needsOverloadResolutionForCopyConstructor,
|
||||
needs_overload_resolution);
|
||||
if (!D->needsOverloadResolutionForCopyConstructor())
|
||||
FLAG(defaultedCopyConstructorIsDeleted, defaulted_is_deleted);
|
||||
FLAG(implicitCopyConstructorHasConstParam, implicit_has_const_param);
|
||||
});
|
||||
|
||||
dumpChild([=] {
|
||||
{
|
||||
ColorScope Color(*this, DeclKindNameColor);
|
||||
OS << "MoveConstructor";
|
||||
}
|
||||
FLAG(hasMoveConstructor, exists);
|
||||
FLAG(hasSimpleMoveConstructor, simple);
|
||||
FLAG(hasTrivialMoveConstructor, trivial);
|
||||
FLAG(hasNonTrivialMoveConstructor, non_trivial);
|
||||
FLAG(hasUserDeclaredMoveConstructor, user_declared);
|
||||
FLAG(needsImplicitMoveConstructor, needs_implicit);
|
||||
FLAG(needsOverloadResolutionForMoveConstructor,
|
||||
needs_overload_resolution);
|
||||
if (!D->needsOverloadResolutionForMoveConstructor())
|
||||
FLAG(defaultedMoveConstructorIsDeleted, defaulted_is_deleted);
|
||||
});
|
||||
|
||||
dumpChild([=] {
|
||||
{
|
||||
ColorScope Color(*this, DeclKindNameColor);
|
||||
OS << "CopyAssignment";
|
||||
}
|
||||
FLAG(hasTrivialCopyAssignment, trivial);
|
||||
FLAG(hasNonTrivialCopyAssignment, non_trivial);
|
||||
FLAG(hasCopyAssignmentWithConstParam, has_const_param);
|
||||
FLAG(hasUserDeclaredCopyAssignment, user_declared);
|
||||
FLAG(needsImplicitCopyAssignment, needs_implicit);
|
||||
FLAG(needsOverloadResolutionForCopyAssignment, needs_overload_resolution);
|
||||
FLAG(implicitCopyAssignmentHasConstParam, implicit_has_const_param);
|
||||
});
|
||||
|
||||
dumpChild([=] {
|
||||
{
|
||||
ColorScope Color(*this, DeclKindNameColor);
|
||||
OS << "MoveAssignment";
|
||||
}
|
||||
FLAG(hasMoveAssignment, exists);
|
||||
FLAG(hasSimpleMoveAssignment, simple);
|
||||
FLAG(hasTrivialMoveAssignment, trivial);
|
||||
FLAG(hasNonTrivialMoveAssignment, non_trivial);
|
||||
FLAG(hasUserDeclaredMoveAssignment, user_declared);
|
||||
FLAG(needsImplicitMoveAssignment, needs_implicit);
|
||||
FLAG(needsOverloadResolutionForMoveAssignment, needs_overload_resolution);
|
||||
});
|
||||
|
||||
dumpChild([=] {
|
||||
{
|
||||
ColorScope Color(*this, DeclKindNameColor);
|
||||
OS << "Destructor";
|
||||
}
|
||||
FLAG(hasSimpleDestructor, simple);
|
||||
FLAG(hasIrrelevantDestructor, irrelevant);
|
||||
FLAG(hasTrivialDestructor, trivial);
|
||||
FLAG(hasNonTrivialDestructor, non_trivial);
|
||||
FLAG(hasUserDeclaredDestructor, user_declared);
|
||||
FLAG(needsImplicitDestructor, needs_implicit);
|
||||
FLAG(needsOverloadResolutionForDestructor, needs_overload_resolution);
|
||||
if (!D->needsOverloadResolutionForDestructor())
|
||||
FLAG(defaultedDestructorIsDeleted, defaulted_is_deleted);
|
||||
});
|
||||
});
|
||||
|
||||
for (const auto &I : D->bases()) {
|
||||
dumpChild([=] {
|
||||
if (I.isVirtual())
|
||||
|
|
|
@ -111,7 +111,7 @@ public:
|
|||
};
|
||||
|
||||
//CHECK: |-CXXRecordDecl {{.*}} referenced class C1 definition
|
||||
//CHECK-NEXT: | |-CXXRecordDecl {{.*}} implicit referenced class C1
|
||||
//CHECK: | |-CXXRecordDecl {{.*}} implicit referenced class C1
|
||||
//CHECK-NEXT: | |-FieldDecl {{.*}} referenced f1c '_Float16'
|
||||
//CHECK-NEXT: | |-VarDecl {{.*}} used f2c 'const _Float16' static
|
||||
//CHECK-NEXT: | |-FieldDecl {{.*}} f3c 'volatile _Float16'
|
||||
|
@ -179,7 +179,7 @@ template <class C> struct S1 {
|
|||
//CHECK: |-ClassTemplateDecl {{.*}} S1
|
||||
//CHECK-NEXT: | |-TemplateTypeParmDecl {{.*}} referenced class depth 0 index 0 C
|
||||
//CHECK-NEXT: | |-CXXRecordDecl {{.*}} struct S1 definition
|
||||
//CHECK-NEXT: | | |-CXXRecordDecl {{.*}} implicit struct S1
|
||||
//CHECK: | | |-CXXRecordDecl {{.*}} implicit struct S1
|
||||
//CHECK-NEXT: | | `-FieldDecl {{.*}} mem1 'C'
|
||||
//CHECK-NEXT: | `-ClassTemplateSpecialization {{.*}} 'S1'
|
||||
|
||||
|
|
|
@ -73,6 +73,16 @@ namespace testTypeAliasTemplateDecl {
|
|||
// CHECK-NEXT: TypeAliasDecl{{.*}} TestTypeAliasTemplateDecl 'A<T>'
|
||||
|
||||
namespace testCXXRecordDecl {
|
||||
class TestEmpty {};
|
||||
// CHECK: CXXRecordDecl{{.*}} class TestEmpty
|
||||
// CHECK-NEXT: DefinitionData pass_in_registers empty aggregate standard_layout trivially_copyable pod trivial literal has_constexpr_non_copy_move_ctor can_const_default_init
|
||||
// CHECK-NEXT: DefaultConstructor exists trivial constexpr
|
||||
// CHECK-NEXT: CopyConstructor simple trivial has_const_param
|
||||
// CHECK-NEXT: MoveConstructor exists simple trivial
|
||||
// CHECK-NEXT: CopyAssignment trivial has_const_param
|
||||
// CHECK-NEXT: MoveAssignment exists simple trivial
|
||||
// CHECK-NEXT: Destructor simple irrelevant trivial
|
||||
|
||||
class A { };
|
||||
class B { };
|
||||
class TestCXXRecordDecl : virtual A, public B {
|
||||
|
@ -80,6 +90,13 @@ namespace testCXXRecordDecl {
|
|||
};
|
||||
}
|
||||
// CHECK: CXXRecordDecl{{.*}} class TestCXXRecordDecl
|
||||
// CHECK-NEXT: DefinitionData{{$}}
|
||||
// CHECK-NEXT: DefaultConstructor exists non_trivial
|
||||
// CHECK-NEXT: CopyConstructor simple non_trivial has_const_param
|
||||
// CHECK-NEXT: MoveConstructor exists simple non_trivial
|
||||
// CHECK-NEXT: CopyAssignment non_trivial has_const_param
|
||||
// CHECK-NEXT: MoveAssignment exists simple non_trivial
|
||||
// CHECK-NEXT: Destructor simple irrelevant trivial
|
||||
// CHECK-NEXT: virtual private 'class testCXXRecordDecl::A'
|
||||
// CHECK-NEXT: public 'class testCXXRecordDecl::B'
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestCXXRecordDecl
|
||||
|
@ -89,7 +106,7 @@ template<class...T>
|
|||
class TestCXXRecordDeclPack : public T... {
|
||||
};
|
||||
// CHECK: CXXRecordDecl{{.*}} class TestCXXRecordDeclPack
|
||||
// CHECK-NEXT: public 'T'...
|
||||
// CHECK: public 'T'...
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestCXXRecordDeclPack
|
||||
|
||||
thread_local int TestThreadLocalInt;
|
||||
|
@ -250,14 +267,14 @@ namespace testClassTemplateDecl {
|
|||
// CHECK: ClassTemplateDecl{{.*}} TestClassTemplate
|
||||
// CHECK-NEXT: TemplateTypeParmDecl
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: AccessSpecDecl{{.*}} public
|
||||
// CHECK-NEXT: CXXConstructorDecl{{.*}} <line:{{.*}}:5, col:23>
|
||||
// CHECK-NEXT: CXXDestructorDecl{{.*}} <line:{{.*}}:5, col:24>
|
||||
// CHECK-NEXT: CXXMethodDecl{{.*}} <line:{{.*}}:5, col:11>
|
||||
// CHECK-NEXT: FieldDecl{{.*}} i
|
||||
// CHECK-NEXT: ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: TemplateArgument{{.*}}A
|
||||
// CHECK: TemplateArgument{{.*}}A
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: AccessSpecDecl{{.*}} public
|
||||
// CHECK-NEXT: CXXConstructorDecl{{.*}} <line:{{.*}}:5, col:23>
|
||||
|
@ -269,12 +286,13 @@ namespace testClassTemplateDecl {
|
|||
// CHECK-NEXT: ClassTemplateSpecialization{{.*}} 'TestClassTemplate'
|
||||
|
||||
// CHECK: ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: TemplateArgument{{.*}}B
|
||||
// CHECK-NEXT: DefinitionData
|
||||
// CHECK: TemplateArgument{{.*}}B
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: FieldDecl{{.*}} j
|
||||
|
||||
// CHECK: ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: TemplateArgument{{.*}}C
|
||||
// CHECK: TemplateArgument{{.*}}C
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: AccessSpecDecl{{.*}} public
|
||||
// CHECK-NEXT: CXXConstructorDecl{{.*}} <line:{{.*}}:5, col:23>
|
||||
|
@ -283,7 +301,7 @@ namespace testClassTemplateDecl {
|
|||
// CHECK-NEXT: FieldDecl{{.*}} i
|
||||
|
||||
// CHECK: ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: TemplateArgument{{.*}}D
|
||||
// CHECK: TemplateArgument{{.*}}D
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: AccessSpecDecl{{.*}} public
|
||||
// CHECK-NEXT: CXXConstructorDecl{{.*}} <line:{{.*}}:5, col:23>
|
||||
|
@ -292,7 +310,7 @@ namespace testClassTemplateDecl {
|
|||
// CHECK-NEXT: FieldDecl{{.*}} i
|
||||
|
||||
// CHECK: ClassTemplatePartialSpecializationDecl{{.*}} class TestClassTemplatePartial
|
||||
// CHECK-NEXT: TemplateArgument
|
||||
// CHECK: TemplateArgument
|
||||
// CHECK-NEXT: TemplateArgument{{.*}}A
|
||||
// CHECK-NEXT: TemplateTypeParmDecl
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplatePartial
|
||||
|
@ -326,13 +344,13 @@ namespace testCanonicalTemplate {
|
|||
// CHECK: ClassTemplateDecl{{.*}} TestClassTemplate
|
||||
// CHECK-NEXT: TemplateTypeParmDecl
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: FriendDecl
|
||||
// CHECK-NEXT: ClassTemplateDecl{{.*}} TestClassTemplate
|
||||
// CHECK-NEXT: TemplateTypeParmDecl
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
|
||||
// CHECK-NEXT: TemplateArgument{{.*}}A
|
||||
// CHECK: TemplateArgument{{.*}}A
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate
|
||||
}
|
||||
|
||||
|
@ -384,27 +402,27 @@ namespace TestTemplateArgument {
|
|||
template<typename> class testType { };
|
||||
template class testType<int>;
|
||||
// CHECK: ClassTemplateSpecializationDecl{{.*}} class testType
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} type 'int'
|
||||
// CHECK: TemplateArgument{{.*}} type 'int'
|
||||
|
||||
template<int fp(void)> class testDecl { };
|
||||
template class testDecl<foo>;
|
||||
// CHECK: ClassTemplateSpecializationDecl{{.*}} class testDecl
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} decl
|
||||
// CHECK: TemplateArgument{{.*}} decl
|
||||
// CHECK-NEXT: Function{{.*}}foo
|
||||
|
||||
template class testDecl<nullptr>;
|
||||
// CHECK: ClassTemplateSpecializationDecl{{.*}} class testDecl
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} nullptr
|
||||
// CHECK: TemplateArgument{{.*}} nullptr
|
||||
|
||||
template<int> class testIntegral { };
|
||||
template class testIntegral<1>;
|
||||
// CHECK: ClassTemplateSpecializationDecl{{.*}} class testIntegral
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} integral 1
|
||||
// CHECK: TemplateArgument{{.*}} integral 1
|
||||
|
||||
template<template<typename> class> class testTemplate { };
|
||||
template class testTemplate<A>;
|
||||
// CHECK: ClassTemplateSpecializationDecl{{.*}} class testTemplate
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} A
|
||||
// CHECK: TemplateArgument{{.*}} A
|
||||
|
||||
template<template<typename> class ...T> class C {
|
||||
B<T...> testTemplateExpansion;
|
||||
|
@ -414,13 +432,13 @@ namespace TestTemplateArgument {
|
|||
template<int, int = 0> class testExpr;
|
||||
template<int I> class testExpr<I> { };
|
||||
// CHECK: ClassTemplatePartialSpecializationDecl{{.*}} class testExpr
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} expr
|
||||
// CHECK: TemplateArgument{{.*}} expr
|
||||
// CHECK-NEXT: DeclRefExpr{{.*}}I
|
||||
|
||||
template<int, int ...> class testPack { };
|
||||
template class testPack<0, 1, 2>;
|
||||
// CHECK: ClassTemplateSpecializationDecl{{.*}} class testPack
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} integral 0
|
||||
// CHECK: TemplateArgument{{.*}} integral 0
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} pack
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} integral 1
|
||||
// CHECK-NEXT: TemplateArgument{{.*}} integral 2
|
||||
|
@ -467,7 +485,7 @@ private:
|
|||
protected:
|
||||
};
|
||||
// CHECK: CXXRecordDecl{{.*}} class TestAccessSpecDecl
|
||||
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestAccessSpecDecl
|
||||
// CHECK: CXXRecordDecl{{.*}} class TestAccessSpecDecl
|
||||
// CHECK-NEXT: AccessSpecDecl{{.*}} public
|
||||
// CHECK-NEXT: AccessSpecDecl{{.*}} private
|
||||
// CHECK-NEXT: AccessSpecDecl{{.*}} protected
|
||||
|
@ -478,7 +496,7 @@ template<typename T> class TestFriendDecl {
|
|||
friend T;
|
||||
};
|
||||
// CHECK: CXXRecord{{.*}} TestFriendDecl
|
||||
// CHECK-NEXT: CXXRecord{{.*}} TestFriendDecl
|
||||
// CHECK: CXXRecord{{.*}} TestFriendDecl
|
||||
// CHECK-NEXT: FriendDecl
|
||||
// CHECK-NEXT: FunctionDecl{{.*}} foo
|
||||
// CHECK-NEXT: FriendDecl{{.*}} 'class A':'class A'
|
||||
|
|
|
@ -51,7 +51,7 @@ double Str::foo1(double, invalid_type)
|
|||
}
|
||||
// CHECK: NamespaceDecl {{.*}} <{{.*}}> {{.*}} TestInvalidFunctionDecl
|
||||
// CHECK-NEXT: |-CXXRecordDecl {{.*}} <line:46:1, line:48:1> line:46:8 struct Str definition
|
||||
// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:1, col:8> col:8 implicit struct Str
|
||||
// CHECK: | |-CXXRecordDecl {{.*}} <col:1, col:8> col:8 implicit struct Str
|
||||
// CHECK-NEXT: | `-CXXMethodDecl {{.*}} <line:47:4, col:36> col:11 invalid foo1 'double (double, int)'
|
||||
// CHECK-NEXT: | |-ParmVarDecl {{.*}} <col:16> col:22 'double'
|
||||
// CHECK-NEXT: | `-ParmVarDecl {{.*}} <col:24, <invalid sloc>> col:36 invalid 'int'
|
||||
|
|
|
@ -44,9 +44,9 @@ struct testStructRecord {
|
|||
int testStructRecordField;
|
||||
};
|
||||
// CHECK-RECORD: CXXRecordDecl{{.*}} testStructRecord
|
||||
// CHECK-RECORD-NEXT: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-RECORD: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-RECORD_UNLESS_IS_UNION-LABEL: CXXRecordDecl{{.*}} testStructRecord
|
||||
// CHECK-RECORD_UNLESS_IS_UNION-NEXT: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-RECORD_UNLESS_IS_UNION: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-FIELD: FieldDecl{{.*}} testStructRecordField
|
||||
// CHECK-FIELD-NEXT: AnnotateAttr{{.*}} "test"
|
||||
|
||||
|
@ -54,9 +54,9 @@ class testClassRecord {
|
|||
int testClassRecordField;
|
||||
};
|
||||
// CHECK-RECORD: CXXRecordDecl{{.*}} testClassRecord
|
||||
// CHECK-RECORD-NEXT: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-RECORD: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-RECORD_UNLESS_IS_UNION-LABEL: CXXRecordDecl{{.*}} testClassRecord
|
||||
// CHECK-RECORD_UNLESS_IS_UNION-NEXT: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-RECORD_UNLESS_IS_UNION: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-FIELD: FieldDecl{{.*}} testClassRecordField
|
||||
// CHECK-FIELD-NEXT: AnnotateAttr{{.*}} "test"
|
||||
|
||||
|
@ -64,7 +64,7 @@ union testUnionRecord {
|
|||
int testUnionRecordField;
|
||||
};
|
||||
// CHECK-RECORD: CXXRecordDecl{{.*}} testUnionRecord
|
||||
// CHECK-RECORD-NEXT: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-RECORD: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-RECORD_UNLESS_IS_UNION-LABEL: CXXRecordDecl{{.*}} testUnionRecord
|
||||
// CHECK-RECORD_UNLESS_IS_UNION-NOT: AnnotateAttr{{.*}} "test"
|
||||
// CHECK-FIELD: FieldDecl{{.*}} testUnionRecordField
|
||||
|
|
|
@ -17,7 +17,7 @@ class testClass2 {
|
|||
testClass2 *operator -> ();
|
||||
};
|
||||
// CHECK-LABEL: CXXRecordDecl{{.*}} testClass2
|
||||
// CHECK-NEXT: AnnotateAttr{{.*}} "test"
|
||||
// CHECK: AnnotateAttr{{.*}} "test"
|
||||
// CHECK: CXXMethodDecl{{.*}} testMethod1
|
||||
// CHECK-NEXT: ParmVarDecl{{.*}} param
|
||||
// CHECK-NEXT: AnnotateAttr{{.*}} "test"
|
||||
|
@ -76,7 +76,7 @@ void testLambdaMethod() {
|
|||
// CHECK-LABEL: FunctionDecl{{.*}} testLambdaMethod
|
||||
// CHECK: LambdaExpr
|
||||
// CHECK-NEXT: CXXRecordDecl
|
||||
// CHECK-NEXT: CXXMethodDecl{{.*}} operator()
|
||||
// CHECK: CXXMethodDecl{{.*}} operator()
|
||||
// CHECK-NEXT: CompoundStmt
|
||||
// CHECK-NEXT: AnnotateAttr{{.*}} "test"
|
||||
|
||||
|
|
|
@ -251,8 +251,22 @@ namespace Std {
|
|||
// CHECK-DUMP: ClassTemplateSpecializationDecl {{.*}} prev {{.*}} SomeTemplate
|
||||
// CHECK-DUMP-NEXT: TemplateArgument type 'char [2]'
|
||||
// CHECK-DUMP: ClassTemplateSpecializationDecl {{.*}} SomeTemplate definition
|
||||
// CHECK-DUMP-NEXT: DefinitionData
|
||||
// CHECK-DUMP-NEXT: DefaultConstructor
|
||||
// CHECK-DUMP-NEXT: CopyConstructor
|
||||
// CHECK-DUMP-NEXT: MoveConstructor
|
||||
// CHECK-DUMP-NEXT: CopyAssignment
|
||||
// CHECK-DUMP-NEXT: MoveAssignment
|
||||
// CHECK-DUMP-NEXT: Destructor
|
||||
// CHECK-DUMP-NEXT: TemplateArgument type 'char [2]'
|
||||
// CHECK-DUMP: ClassTemplateSpecializationDecl {{.*}} prev {{.*}} SomeTemplate
|
||||
// CHECK-DUMP-NEXT: TemplateArgument type 'char [1]'
|
||||
// CHECK-DUMP: ClassTemplateSpecializationDecl {{.*}} SomeTemplate definition
|
||||
// CHECK-DUMP-NEXT: DefinitionData
|
||||
// CHECK-DUMP-NEXT: DefaultConstructor
|
||||
// CHECK-DUMP-NEXT: CopyConstructor
|
||||
// CHECK-DUMP-NEXT: MoveConstructor
|
||||
// CHECK-DUMP-NEXT: CopyAssignment
|
||||
// CHECK-DUMP-NEXT: MoveAssignment
|
||||
// CHECK-DUMP-NEXT: Destructor
|
||||
// CHECK-DUMP-NEXT: TemplateArgument type 'char [1]'
|
||||
|
|
|
@ -21,7 +21,7 @@ namespace PR28795 {
|
|||
}
|
||||
|
||||
// CHECK: ClassTemplateSpecializationDecl {{.*}} struct class2 definition
|
||||
// CHECK-NEXT: TemplateArgument type 'int'
|
||||
// CHECK: TemplateArgument type 'int'
|
||||
// CHECK: LambdaExpr {{.*}} 'class (lambda at
|
||||
// CHECK: ParmVarDecl {{.*}} used f 'enum foo' cinit
|
||||
// CHECK-NEXT: DeclRefExpr {{.*}} 'enum foo' EnumConstant {{.*}} 'a' 'enum foo'
|
||||
|
|
Loading…
Reference in New Issue