| /* This file tests that things are encoded using the gcc-3.3 ABI which is only |
| used by the NeXT runtime. */ |
| /* { dg-do run { target *-*-darwin* } } */ |
| /* { dg-require-effective-target ilp32 } */ |
| /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ |
| // { dg-additional-options "-Wno-objc-root-class" } |
| |
| #include <stdio.h> |
| #include <string.h> |
| #include "../objc-obj-c++-shared/runtime.h" |
| |
| extern "C" 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 |
| |
| Protocol *proto = @protocol(CommonProtocol); |
| struct objc_method_description *meth; |
| struct objc_method_description meth_object; |
| |
| int main() |
| { |
| meth_object = protocol_getMethodDescription (proto, @selector(methodCall_On:), YES, YES); |
| meth = &meth_object; |
| if (strcmp (meth->types, "Vv12@0:4On@8")) |
| abort(); |
| meth_object = protocol_getMethodDescription (proto, @selector(methodCall_nO:), YES, YES); |
| meth = &meth_object; |
| if (strcmp (meth->types, "Vv12@0:4nO@8")) |
| abort(); |
| meth_object = protocol_getMethodDescription (proto, @selector(methodCall_Oo:), YES, YES); |
| meth = &meth_object; |
| if (strcmp (meth->types, "Vv12@0:4Oo@8")) |
| abort(); |
| meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oO:), YES, YES); |
| meth = &meth_object; |
| if (strcmp (meth->types, "Vv12@0:4oO@8")) |
| abort(); |
| meth_object = protocol_getMethodDescription (proto, @selector(methodCall_rn:), YES, YES); |
| meth = &meth_object; |
| if (strcmp (meth->types, "Vv12@0:4rn@8")) |
| abort(); |
| meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oOn:), YES, YES); |
| meth = &meth_object; |
| if (strcmp (meth->types, "Vv12@0:4oOn@8")) |
| abort(); |
| return 0; |
| } |