diff options
Diffstat (limited to 'test/SemaObjCXX/abstract-class-type-ivar.mm')
-rw-r--r-- | test/SemaObjCXX/abstract-class-type-ivar.mm | 29 |
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}} +}; |