summaryrefslogtreecommitdiff
path: root/test/SemaObjCXX/abstract-class-type-ivar.mm
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2012-08-16 22:38:41 +0000
committerFariborz Jahanian <fjahanian@apple.com>2012-08-16 22:38:41 +0000
commit7f90b531818ad772f6e407f88101dc618c738fa4 (patch)
treecebafeeaaa0a2a0d42c01a7f9fbc8f5e9b6d1749 /test/SemaObjCXX/abstract-class-type-ivar.mm
parenteeff8ce11d687429d545cb6ce9bdaa44319ca72f (diff)
downloadclang-7f90b531818ad772f6e407f88101dc618c738fa4.tar.gz
clang-7f90b531818ad772f6e407f88101dc618c738fa4.tar.bz2
clang-7f90b531818ad772f6e407f88101dc618c738fa4.tar.xz
objective-C++: issue diagnostic when ivar type is
an abstract c++ class. // rdar://12095239 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162052 91177308-0d34-0410-b5e6-96231b3b80d8
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 0000000000..823e9c197d
--- /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}}
+};