55 lines
1.2 KiB
Plaintext
55 lines
1.2 KiB
Plaintext
/* Test that all pending instantiations have taken place before meta-data
|
|
generation. */
|
|
/* Author: Fariborz Jahanian <fjahanian@apple.com> */
|
|
/* Adapted by Nicola Pero <nicola.pero@meta-innovation.com> */
|
|
/* { dg-do run } */
|
|
/* { dg-skip-if "No API#2 pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
|
|
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
|
// { dg-additional-options "-Wno-objc-root-class" }
|
|
|
|
#include <objc/objc.h>
|
|
#include <objc/runtime.h>
|
|
|
|
@interface MyRootClass
|
|
{ Class isa; }
|
|
+ (id) initialize;
|
|
+ alloc;
|
|
- init;
|
|
- doSomething;
|
|
@end
|
|
|
|
@implementation MyRootClass
|
|
+ (id) initialize { return self; }
|
|
+ alloc { return class_createInstance (self, 0); }
|
|
- init { return self; }
|
|
- doSomething { return self; }
|
|
@end
|
|
|
|
class Base
|
|
{
|
|
public:
|
|
Base() { }
|
|
virtual ~Base() { }
|
|
|
|
void destroy() { delete this; }
|
|
};
|
|
|
|
template<class T>
|
|
class Subclass : public T
|
|
{
|
|
public:
|
|
Subclass() { }
|
|
|
|
virtual ~Subclass()
|
|
{
|
|
[[[MyRootClass alloc] init] doSomething];
|
|
}
|
|
};
|
|
|
|
int main(int argc, const char * argv[])
|
|
{
|
|
Subclass<Base>* theSubclass = new Subclass<Base>();
|
|
theSubclass->destroy();
|
|
return 0;
|
|
}
|