diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/SemaCXX/abstract.cpp | 4 | ||||
-rw-r--r-- | clang/test/SemaCXX/ms-interface.cpp | 4 | ||||
-rw-r--r-- | clang/test/SemaCXX/type-traits.cpp | 35 |
3 files changed, 30 insertions, 13 deletions
diff --git a/clang/test/SemaCXX/abstract.cpp b/clang/test/SemaCXX/abstract.cpp index b521196c23b..ffd36be5b79 100644 --- a/clang/test/SemaCXX/abstract.cpp +++ b/clang/test/SemaCXX/abstract.cpp @@ -8,6 +8,10 @@ typedef int __CONCAT(__sa, __LINE__)[__b ? 1 : -1] #endif +union IncompleteUnion; + +static_assert(!__is_abstract(IncompleteUnion), "unions are never abstract"); + class C { virtual void f() = 0; // expected-note {{unimplemented pure virtual method 'f'}} }; diff --git a/clang/test/SemaCXX/ms-interface.cpp b/clang/test/SemaCXX/ms-interface.cpp index e7386ce5b8e..4a1c13ddcbb 100644 --- a/clang/test/SemaCXX/ms-interface.cpp +++ b/clang/test/SemaCXX/ms-interface.cpp @@ -58,10 +58,12 @@ __interface I6 : X { struct S { }; class C { }; __interface I { }; +union U; static_assert(!__is_interface_class(S), "oops"); static_assert(!__is_interface_class(C), "oops"); -static_assert(__is_interface_class(I), "oops"); +static_assert(!__is_interface_class(I), "oops"); +static_assert(!__is_interface_class(U), "oops"); // expected-error@55 {{interface type cannot inherit from 'struct S'}} // expected-note@+1 {{in instantiation of template class 'I6<S>' requested here}} diff --git a/clang/test/SemaCXX/type-traits.cpp b/clang/test/SemaCXX/type-traits.cpp index 7c64aec9cb4..69760fd6bd0 100644 --- a/clang/test/SemaCXX/type-traits.cpp +++ b/clang/test/SemaCXX/type-traits.cpp @@ -14,6 +14,7 @@ typedef Int IntAr[10]; typedef Int IntArNB[]; class Statics { static int priv; static NonPOD np; }; union EmptyUnion {}; +union IncompleteUnion; union Union { int i; float f; }; struct HasFunc { void f (); }; struct HasOp { void operator *(); }; @@ -235,6 +236,7 @@ void is_empty() { int arr[F(__is_empty(Int))]; } { int arr[F(__is_empty(POD))]; } { int arr[F(__is_empty(EmptyUnion))]; } + { int arr[F(__is_empty(IncompleteUnion))]; } { int arr[F(__is_empty(EmptyAr))]; } { int arr[F(__is_empty(HasRef))]; } { int arr[F(__is_empty(HasVirt))]; } @@ -313,8 +315,23 @@ struct PotentiallyFinal<T*> final { }; template<> struct PotentiallyFinal<int> final { }; +struct SealedClass sealed { +}; + +template<typename T> +struct PotentiallySealed { }; + +template<typename T> +struct PotentiallySealed<T*> sealed { }; + +template<> +struct PotentiallySealed<int> sealed { }; + void is_final() { + { int arr[T(__is_final(SealedClass))]; } + { int arr[T(__is_final(PotentiallySealed<float*>))]; } + { int arr[T(__is_final(PotentiallySealed<int>))]; } { int arr[T(__is_final(FinalClass))]; } { int arr[T(__is_final(PotentiallyFinal<float*>))]; } { int arr[T(__is_final(PotentiallyFinal<int>))]; } @@ -330,25 +347,17 @@ void is_final() { int arr[F(__is_final(IntArNB))]; } { int arr[F(__is_final(HasAnonymousUnion))]; } { int arr[F(__is_final(PotentiallyFinal<float>))]; } + { int arr[F(__is_final(PotentiallySealed<float>))]; } } -struct SealedClass sealed { -}; - -template<typename T> -struct PotentiallySealed { }; - -template<typename T> -struct PotentiallySealed<T*> sealed { }; - -template<> -struct PotentiallySealed<int> sealed { }; - void is_sealed() { { int arr[T(__is_sealed(SealedClass))]; } { int arr[T(__is_sealed(PotentiallySealed<float*>))]; } { int arr[T(__is_sealed(PotentiallySealed<int>))]; } + { int arr[T(__is_sealed(FinalClass))]; } + { int arr[T(__is_sealed(PotentiallyFinal<float*>))]; } + { int arr[T(__is_sealed(PotentiallyFinal<int>))]; } { int arr[F(__is_sealed(int))]; } { int arr[F(__is_sealed(Union))]; } @@ -361,6 +370,7 @@ void is_sealed() { int arr[F(__is_sealed(IntArNB))]; } { int arr[F(__is_sealed(HasAnonymousUnion))]; } { int arr[F(__is_sealed(PotentiallyFinal<float>))]; } + { int arr[F(__is_sealed(PotentiallySealed<float>))]; } } typedef HasVirt Polymorph; @@ -373,6 +383,7 @@ void is_polymorphic() { int arr[F(__is_polymorphic(int))]; } { int arr[F(__is_polymorphic(Union))]; } + { int arr[F(__is_polymorphic(IncompleteUnion))]; } { int arr[F(__is_polymorphic(Int))]; } { int arr[F(__is_polymorphic(IntAr))]; } { int arr[F(__is_polymorphic(UnionAr))]; } |