/* APPLE LOCAL begin radar 4301047 */
#include <stdio.h>
#include <string.h>
#include <objc/Protocol.h>
#ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h>
#endif

extern void abort();


@protocol CommonProtocol

-(oneway void)methodCall_On:(in bycopy id)someValue_On;
-(oneway void)methodCall_nO:(bycopy in id)someValue_nO;

-(oneway void)methodCall_Oo:(out bycopy id)someValue_Oo;
-(oneway void)methodCall_oO:(bycopy out id)someValue_oO;

-(oneway void)methodCall_rn:(in const id)someValue_rn;

-(oneway void)methodCall_oOn:(in bycopy out id)someValue_oOn;

@end

@interface ObjCClass <CommonProtocol>
{

}

@end

@implementation ObjCClass
-(oneway void)methodCall_On:(in bycopy id)someValue_On { }
-(oneway void)methodCall_nO:(bycopy in id)someValue_nO { }

-(oneway void)methodCall_Oo:(out bycopy id)someValue_Oo { }
-(oneway void)methodCall_oO:(bycopy out id)someValue_oO { }

-(oneway void)methodCall_rn:(in const id)someValue_rn { }
-(oneway void)methodCall_oOn:(in bycopy out id)someValue_oOn { }
@end

/* APPLE LOCAL radar 4894756 */
/* declaration moved */
struct objc_method_description *meth;

int main()
{
	/* APPLE LOCAL radar 4894756 */
        Protocol *proto = @protocol(CommonProtocol);
        meth = [proto descriptionForInstanceMethod: @selector(methodCall_On:)];
	if (strcmp (meth->types, "Vv12@0:4On@8"))
	  abort();
        meth = [proto descriptionForInstanceMethod: @selector(methodCall_nO:)];
	if (strcmp (meth->types, "Vv12@0:4nO@8"))
	  abort();
        meth = [proto descriptionForInstanceMethod: @selector(methodCall_Oo:)];
	if (strcmp (meth->types, "Vv12@0:4Oo@8"))
	  abort();
        meth = [proto descriptionForInstanceMethod: @selector(methodCall_oO:)];
	if (strcmp (meth->types, "Vv12@0:4oO@8"))
	  abort();
        meth = [proto descriptionForInstanceMethod: @selector(methodCall_rn:)];
	if (strcmp (meth->types, "Vv12@0:4rn@8"))
	  abort();
        meth = [proto descriptionForInstanceMethod: @selector(methodCall_oOn:)];
	if (strcmp (meth->types, "Vv12@0:4oOn@8"))
	  abort();
	return 0;
}
/* APPLE LOCAL end radar 4301047 */
