brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 9f91597 Raw
199 lines · cpp
1// Test without serialization:2// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++17 -ast-dump %s \3// RUN: | FileCheck -strict-whitespace %s4//5// Test with serialization:6// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++17 -emit-pch -o %t %s7// RUN: %clang_cc1 -x c++ -triple x86_64-unknown-unknown -std=c++17 -include-pch %t -ast-dump-all /dev/null \8// RUN: | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" \9// RUN: | FileCheck -strict-whitespace %s10 11void f() {12  auto IsNotGenericLambda = [](){};13  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <col:29> col:29 implicit class definition14  // CHECK-NOT: DefinitionData {{.*}}generic{{.*}}15  // CHECK-NEXT: DefinitionData {{.*}}lambda{{.*}}16  auto IsGenericLambda = [](auto){};17  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <col:26> col:26 implicit class definition18  // CHECK-NEXT: DefinitionData {{.*}}generic{{.*}}lambda{{.*}}19}20 21struct CanPassInRegisters {22  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct CanPassInRegisters definition23  // CHECK-NEXT: DefinitionData {{.*}}pass_in_registers{{.*}}24  CanPassInRegisters(const CanPassInRegisters&) = default;25};26 27struct CantPassInRegisters {28  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct CantPassInRegisters definition29  // CHECK-NOT: DefinitionData {{.*}}pass_in_registers{{.*}}30  CantPassInRegisters(const CantPassInRegisters&) = delete;31};32 33struct IsEmpty {34  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct IsEmpty definition35  // CHECK-NEXT: DefinitionData {{.*}}empty{{.*}}36};37 38struct IsNotEmpty {39  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotEmpty definition40  // CHECK-NOT: DefinitionData {{.*}}empty{{.*}}41  int a;42};43 44struct IsAggregate {45  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsAggregate definition46  // CHECK-NEXT: DefinitionData {{.*}}aggregate{{.*}}47  int a;48};49 50struct IsNotAggregate {51  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+4]]:1> line:[[@LINE-1]]:8 struct IsNotAggregate definition52  // CHECK-NOT: DefinitionData {{.*}}aggregate{{.*}}53private:54  int a;55};56 57struct IsStandardLayout {58  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsStandardLayout definition59  // CHECK-NEXT: DefinitionData {{.*}}standard_layout{{.*}}60  void f();61};62 63struct IsNotStandardLayout {64  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotStandardLayout definition65  // CHECK-NOT: DefinitionData {{.*}}standard_layout{{.*}}66  virtual void f();67};68 69struct IsTriviallyCopyable {70  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct IsTriviallyCopyable definition71  // CHECK-NEXT: DefinitionData {{.*}}trivially_copyable{{.*}}72};73 74struct IsNotTriviallyCopyable {75  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotTriviallyCopyable definition76  // CHECK-NOT: DefinitionData {{.*}}trivially_copyable{{.*}}77  IsNotTriviallyCopyable(const IsNotTriviallyCopyable&) {}78};79 80struct IsPOD {81  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsPOD definition82  // CHECK-NEXT: DefinitionData {{.*}}pod{{.*}}83  int a;84};85 86struct IsNotPOD {87  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotPOD definition88  // CHECK-NOT: DefinitionData {{.*}}pod{{.*}}89  int &a;90};91 92struct IsTrivial {93  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsTrivial definition94  // CHECK-NEXT: DefinitionData {{.*}}trivial {{.*}}95  IsTrivial() = default;96};97 98struct IsNotTrivial {99  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotTrivial definition100  // CHECK-NOT: DefinitionData {{.*}}trivial {{.*}}101  IsNotTrivial() {}102};103 104struct IsPolymorphic {105  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsPolymorphic definition106  // CHECK-NEXT: DefinitionData {{.*}}polymorphic{{.*}}107  virtual void f();108};109 110struct IsNotPolymorphic {111  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotPolymorphic definition112  // CHECK-NOT: DefinitionData {{.*}}polymorphic{{.*}}113  void f();114};115 116struct IsAbstract {117  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsAbstract definition118  // CHECK-NEXT: DefinitionData {{.*}}abstract{{.*}}119  virtual void f() = 0;120};121 122struct IsNotAbstract {123  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotAbstract definition124  // CHECK-NOT: DefinitionData {{.*}}abstract{{.*}}125  virtual void f();126};127 128struct IsLiteral {129  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsLiteral definition130  // CHECK-NEXT: DefinitionData {{.*}}literal{{.*}}131  ~IsLiteral() = default;132};133 134struct IsNotLiteral {135  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotLiteral definition136  // CHECK-NOT: DefinitionData {{.*}}literal{{.*}}137  ~IsNotLiteral() {}138};139 140struct HasUserDeclaredConstructor {141  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasUserDeclaredConstructor definition142  // CHECK-NEXT: DefinitionData {{.*}}has_user_declared_ctor{{.*}}143  HasUserDeclaredConstructor() {}144};145 146struct HasNoUserDeclaredConstructor {147  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct HasNoUserDeclaredConstructor definition148  // CHECK-NOT: DefinitionData {{.*}}has_user_declared_ctor{{.*}}149};150 151struct HasConstexprNonCopyMoveConstructor {152  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasConstexprNonCopyMoveConstructor definition153  // CHECK-NEXT: DefinitionData {{.*}}has_constexpr_non_copy_move_ctor{{.*}}154  constexpr HasConstexprNonCopyMoveConstructor() {}155};156 157struct HasNoConstexprNonCopyMoveConstructor {158  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasNoConstexprNonCopyMoveConstructor definition159  // CHECK-NOT: DefinitionData {{.*}}has_constexpr_non_copy_move_ctor{{.*}}160  HasNoConstexprNonCopyMoveConstructor() {}161};162 163struct HasMutableFields {164  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasMutableFields definition165  // CHECK-NEXT: DefinitionData {{.*}}has_mutable_fields{{.*}}166  mutable int i;167};168 169struct HasNoMutableFields {170  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasNoMutableFields definition171  // CHECK-NOT: DefinitionData {{.*}}has_mutable_fields{{.*}}172  int i;173};174 175struct HasVariantMembers {176  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+5]]:1> line:[[@LINE-1]]:8 struct HasVariantMembers definition177  // CHECK-NEXT: DefinitionData {{.*}}has_variant_members{{.*}}178  union {179    int i;180  };181};182 183struct HasNoVariantMembers {184  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct HasNoVariantMembers definition185  // CHECK-NOT: DefinitionData {{.*}}has_variant_members{{.*}}186};187 188struct AllowsConstDefaultInit {189  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct AllowsConstDefaultInit definition190  // CHECK-NEXT: DefinitionData {{.*}}can_const_default_init{{.*}}191  int i = 12;192};193 194struct DoesNotAllowConstDefaultInit {195  // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct DoesNotAllowConstDefaultInit definition196  // CHECK-NOT: DefinitionData {{.*}}can_const_default_init{{.*}}197  int i;198};199