diff options
Diffstat (limited to 'test/AST/ast-dump-record-definition-data.cpp')
-rw-r--r-- | test/AST/ast-dump-record-definition-data.cpp | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/test/AST/ast-dump-record-definition-data.cpp b/test/AST/ast-dump-record-definition-data.cpp new file mode 100644 index 0000000000..37ed54b1de --- /dev/null +++ b/test/AST/ast-dump-record-definition-data.cpp @@ -0,0 +1,190 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++17 -ast-dump %s | FileCheck -strict-whitespace %s + +void f() { + auto IsNotGenericLambda = [](){}; + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <col:29> col:29 implicit class definition + // CHECK-NOT: DefinitionData {{.*}}generic{{.*}} + // CHECK-NEXT: DefinitionData {{.*}}lambda{{.*}} + auto IsGenericLambda = [](auto){}; + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <col:26> col:26 implicit class definition + // CHECK-NEXT: DefinitionData {{.*}}generic{{.*}}lambda{{.*}} +} + +struct CanPassInRegisters { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct CanPassInRegisters definition + // CHECK-NEXT: DefinitionData {{.*}}pass_in_registers{{.*}} + CanPassInRegisters(const CanPassInRegisters&) = default; +}; + +struct CantPassInRegisters { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct CantPassInRegisters definition + // CHECK-NOT: DefinitionData {{.*}}pass_in_registers{{.*}} + CantPassInRegisters(const CantPassInRegisters&) = delete; +}; + +struct IsEmpty { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct IsEmpty definition + // CHECK-NEXT: DefinitionData {{.*}}empty{{.*}} +}; + +struct IsNotEmpty { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotEmpty definition + // CHECK-NOT: DefinitionData {{.*}}empty{{.*}} + int a; +}; + +struct IsAggregate { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsAggregate definition + // CHECK-NEXT: DefinitionData {{.*}}aggregate{{.*}} + int a; +}; + +struct IsNotAggregate { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+4]]:1> line:[[@LINE-1]]:8 struct IsNotAggregate definition + // CHECK-NOT: DefinitionData {{.*}}aggregate{{.*}} +private: + int a; +}; + +struct IsStandardLayout { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsStandardLayout definition + // CHECK-NEXT: DefinitionData {{.*}}standard_layout{{.*}} + void f(); +}; + +struct IsNotStandardLayout { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotStandardLayout definition + // CHECK-NOT: DefinitionData {{.*}}standard_layout{{.*}} + virtual void f(); +}; + +struct IsTriviallyCopyable { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct IsTriviallyCopyable definition + // CHECK-NEXT: DefinitionData {{.*}}trivially_copyable{{.*}} +}; + +struct IsNotTriviallyCopyable { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotTriviallyCopyable definition + // CHECK-NOT: DefinitionData {{.*}}trivially_copyable{{.*}} + IsNotTriviallyCopyable(const IsNotTriviallyCopyable&) {} +}; + +struct IsPOD { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsPOD definition + // CHECK-NEXT: DefinitionData {{.*}}pod{{.*}} + int a; +}; + +struct IsNotPOD { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotPOD definition + // CHECK-NOT: DefinitionData {{.*}}pod{{.*}} + int &a; +}; + +struct IsTrivial { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsTrivial definition + // CHECK-NEXT: DefinitionData {{.*}}trivial {{.*}} + IsTrivial() = default; +}; + +struct IsNotTrivial { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotTrivial definition + // CHECK-NOT: DefinitionData {{.*}}trivial {{.*}} + IsNotTrivial() {} +}; + +struct IsPolymorphic { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsPolymorphic definition + // CHECK-NEXT: DefinitionData {{.*}}polymorphic{{.*}} + virtual void f(); +}; + +struct IsNotPolymorphic { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotPolymorphic definition + // CHECK-NOT: DefinitionData {{.*}}polymorphic{{.*}} + void f(); +}; + +struct IsAbstract { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsAbstract definition + // CHECK-NEXT: DefinitionData {{.*}}abstract{{.*}} + virtual void f() = 0; +}; + +struct IsNotAbstract { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotAbstract definition + // CHECK-NOT: DefinitionData {{.*}}abstract{{.*}} + virtual void f(); +}; + +struct IsLiteral { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsLiteral definition + // CHECK-NEXT: DefinitionData {{.*}}literal{{.*}} + ~IsLiteral() = default; +}; + +struct IsNotLiteral { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotLiteral definition + // CHECK-NOT: DefinitionData {{.*}}literal{{.*}} + ~IsNotLiteral() {} +}; + +struct HasUserDeclaredConstructor { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasUserDeclaredConstructor definition + // CHECK-NEXT: DefinitionData {{.*}}has_user_declared_ctor{{.*}} + HasUserDeclaredConstructor() {} +}; + +struct HasNoUserDeclaredConstructor { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct HasNoUserDeclaredConstructor definition + // CHECK-NOT: DefinitionData {{.*}}has_user_declared_ctor{{.*}} +}; + +struct HasConstexprNonCopyMoveConstructor { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasConstexprNonCopyMoveConstructor definition + // CHECK-NEXT: DefinitionData {{.*}}has_constexpr_non_copy_move_ctor{{.*}} + constexpr HasConstexprNonCopyMoveConstructor() {} +}; + +struct HasNoConstexprNonCopyMoveConstructor { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasNoConstexprNonCopyMoveConstructor definition + // CHECK-NOT: DefinitionData {{.*}}has_constexpr_non_copy_move_ctor{{.*}} + HasNoConstexprNonCopyMoveConstructor() {} +}; + +struct HasMutableFields { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasMutableFields definition + // CHECK-NEXT: DefinitionData {{.*}}has_mutable_fields{{.*}} + mutable int i; +}; + +struct HasNoMutableFields { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasNoMutableFields definition + // CHECK-NOT: DefinitionData {{.*}}has_mutable_fields{{.*}} + int i; +}; + +struct HasVariantMembers { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+5]]:1> line:[[@LINE-1]]:8 struct HasVariantMembers definition + // CHECK-NEXT: DefinitionData {{.*}}has_variant_members{{.*}} + union { + int i; + }; +}; + +struct HasNoVariantMembers { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct HasNoVariantMembers definition + // CHECK-NOT: DefinitionData {{.*}}has_variant_members{{.*}} +}; + +struct AllowsConstDefaultInit { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct AllowsConstDefaultInit definition + // CHECK-NEXT: DefinitionData {{.*}}can_const_default_init{{.*}} + int i = 12; +}; + +struct DoesNotAllowConstDefaultInit { + // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct DoesNotAllowConstDefaultInit definition + // CHECK-NOT: DefinitionData {{.*}}can_const_default_init{{.*}} + int i; +}; |