aboutsummaryrefslogtreecommitdiff
path: root/test/SemaObjCXX/abstract-class-type-ivar.mm
diff options
context:
space:
mode:
Diffstat (limited to 'test/SemaObjCXX/abstract-class-type-ivar.mm')
-rw-r--r--test/SemaObjCXX/abstract-class-type-ivar.mm29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/SemaObjCXX/abstract-class-type-ivar.mm b/test/SemaObjCXX/abstract-class-type-ivar.mm
new file mode 100644
index 000000000000..823e9c197d35
--- /dev/null
+++ b/test/SemaObjCXX/abstract-class-type-ivar.mm
@@ -0,0 +1,29 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
+// rdar://12095239
+
+class CppAbstractBase {
+public:
+ virtual void testA() = 0;
+ virtual void testB() = 0; // expected-note {{unimplemented pure virtual method 'testB' in 'CppConcreteSub}}
+ int a;
+};
+
+class CppConcreteSub : public CppAbstractBase {
+ virtual void testA() { }
+};
+
+@interface Objc {
+ CppConcreteSub _concrete; // expected-error{{ivar type 'CppConcreteSub' is an abstract class}}
+}
+- (CppAbstractBase*)abstract;
+@end
+@implementation Objc
+- (CppAbstractBase*)abstract {
+ return &_concrete;
+}
+@end
+
+class Cpp {
+public:
+ CppConcreteSub sub; // expected-error {{field type 'CppConcreteSub' is an abstract class}}
+};