brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 2f4e814 Raw
93 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=gnu++11 -fblocks -Wno-deprecated-builtins -fms-extensions -Wno-microsoft %s -Wno-c++17-extensions2// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=gnu++14 -fblocks -Wno-deprecated-builtins -fms-extensions -Wno-microsoft %s -Wno-c++17-extensions3// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=gnu++1z -fblocks -Wno-deprecated-builtins -fms-extensions -Wno-microsoft %s4// RUN: %clang_cc1 -x c -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=gnu11 -fblocks -Wno-deprecated-builtins -fms-extensions -Wno-microsoft %s5 6#ifdef __cplusplus7 8// expected-no-diagnostics9 10using Int = int;11 12struct NonPOD { NonPOD(int); };13enum Enum { EV };14struct POD { Enum e; int i; float f; NonPOD* p; };15struct Derives : POD {};16using ClassType = Derives;17 18union Union { int i; float f; };19 20struct HasAnonymousUnion {21  union {22    int i;23    float f;24  };25};26 27struct FinalClass final {28};29 30template<typename T>31struct PotentiallyFinal { };32 33template<typename T>34struct PotentiallyFinal<T*> final { };35 36template<>37struct PotentiallyFinal<int> final { };38 39struct SealedClass sealed {40};41 42template<typename T>43struct PotentiallySealed { };44 45template<typename T>46struct PotentiallySealed<T*> sealed { };47 48template<>49struct PotentiallySealed<int> sealed { };50 51void is_final() {52  static_assert(__is_final(SealedClass));53  static_assert(__is_final(PotentiallySealed<float*>));54  static_assert(__is_final(PotentiallySealed<int>));55 56  static_assert(!__is_final(PotentiallyFinal<float>));57  static_assert(!__is_final(PotentiallySealed<float>));58}59 60void is_sealed()61{62  static_assert(__is_sealed(SealedClass));63  static_assert(__is_sealed(PotentiallySealed<float*>));64  static_assert(__is_sealed(PotentiallySealed<int>));65  static_assert(__is_sealed(FinalClass));66  static_assert(__is_sealed(PotentiallyFinal<float*>));67  static_assert(__is_sealed(PotentiallyFinal<int>));68 69  static_assert(!__is_sealed(int));70  static_assert(!__is_sealed(Union));71  static_assert(!__is_sealed(Int));72  static_assert(!__is_sealed(Int[10]));73  static_assert(!__is_sealed(Union[10]));74  static_assert(!__is_sealed(Derives));75  static_assert(!__is_sealed(ClassType));76  static_assert(!__is_sealed(const void));77  static_assert(!__is_sealed(Int[]));78  static_assert(!__is_sealed(HasAnonymousUnion));79  static_assert(!__is_sealed(PotentiallyFinal<float>));80  static_assert(!__is_sealed(PotentiallySealed<float>));81}82#else83struct s1 {};84 85void is_destructible()86{87  (void)__is_destructible(int);88  (void)__is_destructible(struct s1);89  (void)__is_destructible(struct s2); // expected-error{{incomplete type 'struct s2' used in type trait expression}}90  // expected-note@-1{{}}91}92#endif93