summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Lexer/has_feature_type_traits.cpp5
-rw-r--r--clang/test/SemaCXX/type-traits.cpp31
2 files changed, 36 insertions, 0 deletions
diff --git a/clang/test/Lexer/has_feature_type_traits.cpp b/clang/test/Lexer/has_feature_type_traits.cpp
index 53056a02b72..0c2cfa56c4a 100644
--- a/clang/test/Lexer/has_feature_type_traits.cpp
+++ b/clang/test/Lexer/has_feature_type_traits.cpp
@@ -70,6 +70,11 @@ int is_enum();
#endif
// CHECK: int is_enum();
+#if __has_feature(is_final)
+int is_final();
+#endif
+// CHECK: int is_final();
+
#if __has_feature(is_pod)
int is_pod();
#endif
diff --git a/clang/test/SemaCXX/type-traits.cpp b/clang/test/SemaCXX/type-traits.cpp
index 0914c7cf94e..2b8714b5e05 100644
--- a/clang/test/SemaCXX/type-traits.cpp
+++ b/clang/test/SemaCXX/type-traits.cpp
@@ -235,6 +235,37 @@ void is_enum()
{ int arr[F(__is_enum(HasAnonymousUnion))]; }
}
+struct FinalClass final {
+};
+
+template<typename T>
+struct PotentiallyFinal { };
+
+template<typename T>
+struct PotentiallyFinal<T*> final { };
+
+template<>
+struct PotentiallyFinal<int> final { };
+
+void is_final()
+{
+ { int arr[T(__is_final(FinalClass))]; }
+ { int arr[T(__is_final(PotentiallyFinal<float*>))]; }
+ { int arr[T(__is_final(PotentiallyFinal<int>))]; }
+
+ { int arr[F(__is_final(int))]; }
+ { int arr[F(__is_final(Union))]; }
+ { int arr[F(__is_final(Int))]; }
+ { int arr[F(__is_final(IntAr))]; }
+ { int arr[F(__is_final(UnionAr))]; }
+ { int arr[F(__is_final(Derives))]; }
+ { int arr[F(__is_final(ClassType))]; }
+ { int arr[F(__is_final(cvoid))]; }
+ { int arr[F(__is_final(IntArNB))]; }
+ { int arr[F(__is_final(HasAnonymousUnion))]; }
+ { int arr[F(__is_final(PotentiallyFinal<float>))]; }
+}
+
typedef HasVirt Polymorph;
struct InheritPolymorph : Polymorph {};
OpenPOWER on IntegriCloud