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