@interface Object
{
	Class		isa;
}
-(void)dealloc;
@end

@interface derived : Object
@end

@implementation Object
-(void) dealloc
{
	// this is the root of the hierarchy, so no super to call, thus
	// must not check for [super dealloc]
}
@end

void __obj_exec_class (struct obj_module *msg) = #0;
id obj_msgSend_super (Super *class, SEL op, ...) = #0;

@implementation derived
-(void) dealloc
{
	// as this is a derived class, failure to call [super dealloc] will
	// result in a memory leak (yes, there could be special allocators
	// involved, in which case something will be needed to inform the
	// compiler)
	[super dealloc];
}
@end

int main ()
{
	return 0;	// test passes if compile succeeds (with -Werror)
}