re PR objc/35165 (Massive failures of objc on i686-apple-darwin9)
2010-03-25 Iain Sandoe <iain.sandoe@sandoe-acoustics.co.uk> PR objc/35165 PR testsuite/43512 * objc-obj-c++-shared: New directory. * objc-obj-c++-shared/Object1-implementation.h: New file. * objc-obj-c++-shared/Object1.h: New file. * objc-obj-c++-shared/Protocol1.h: New file. * objc-obj-c++-shared/next-abi.h: New file. * objc-obj-c++-shared/next-mapping.h: New file. * objc/execute/next_mapping.h: Delete. * objc.dg/special/special.exp: For all targets run the tests with -fgnu-runtime, for darwin targets also run the tests with -fnext-runtime. * objc.dg/dg.exp: Ditto. * obj-c++.dg/dg.exp: Ditto. * objc/execute/forward-1.m: Use shared wrapper headers (Object1.h, Protocol1.h) and next-mapping.h as required. Amend testcase to include use of updated NeXT interface. * objc/execute/formal_protocol-5.m: Ditto. * objc/execute/protocol-isEqual-2.m: Ditto. * objc/execute/protocol-isEqual-4.m: Ditto. * objc/execute/class-11.m: Use shared wrapper headers (Object1.h, Protocol1.h) and next-mapping.h as required. * objc/execute/object_is_class.m: Ditto. * objc/execute/enumeration-1.m: Ditto. * objc/execute/class-13.m: Ditto. * objc/execute/formal_protocol-2.m: Ditto. * objc/execute/formal_protocol-4.m: Ditto. * objc/execute/class-1.m: Ditto. * objc/execute/bycopy-1.m: Ditto. * objc/execute/formal_protocol-6.m: Ditto. * objc/execute/bycopy-3.m: Ditto. * objc/execute/class-3.m: Ditto. * objc/execute/bf-11.m: Ditto. * objc/execute/class-5.m: Ditto. * objc/execute/bf-13.m: Ditto. * objc/execute/class-7.m: Ditto. * objc/execute/bf-15.m: Ditto. * objc/execute/class-9.m: Ditto. * objc/execute/bf-17.m: Ditto. * objc/execute/bf-19.m: Ditto. * objc/execute/IMP.m: Ditto. * objc/execute/exceptions/catchall-1.m: Ditto. * objc/execute/exceptions/trivial.m: Ditto. * objc/execute/exceptions/finally-1.m: Ditto. * objc/execute/exceptions/local-variables-1.m: Ditto. * objc/execute/exceptions/foward-1.m: Ditto. * objc/execute/bf-2.m: Ditto. * objc/execute/string1.m: Ditto. * objc/execute/bf-4.m: Ditto. * objc/execute/informal_protocol.m: Ditto. * objc/execute/string3.m: Ditto. * objc/execute/bf-6.m: Ditto. * objc/execute/bf-8.m: Ditto. * objc/execute/class-tests-1.h: Ditto. * objc/execute/protocol-isEqual-1.m: Ditto. * objc/execute/protocol-isEqual-3.m: Ditto. * objc/execute/_cmd.m: Ditto. * objc/execute/function-message-1.m: Ditto. * objc/execute/bf-20.m: Ditto. * objc/execute/bf-common.h: Ditto. * objc/execute/np-2.m: Ditto. * objc/execute/class-10.m: Ditto. * objc/execute/class-12.m: Ditto. * objc/execute/enumeration-2.m: Ditto. * objc/execute/class-14.m: Ditto. * objc/execute/encode-1.m: Ditto. * objc/execute/formal_protocol-1.m: Ditto. * objc/execute/formal_protocol-3.m: Ditto. * objc/execute/accessing_ivars.m: Ditto. * objc/execute/bycopy-2.m: Ditto. * objc/execute/class-2.m: Ditto. * objc/execute/bf-10.m: Ditto. * objc/execute/formal_protocol-7.m: Ditto. * objc/execute/root_methods.m: Ditto. * objc/execute/class-4.m: Ditto. * objc/execute/bf-12.m: Ditto. * objc/execute/class-6.m: Ditto. * objc/execute/bf-14.m: Ditto. * objc/execute/nested-func-1.m: Ditto. * objc/execute/class-8.m: Ditto. * objc/execute/private.m: Ditto. * objc/execute/bf-16.m: Ditto. * objc/execute/bf-18.m: Ditto. * objc/execute/load-3.m: Ditto. * objc/execute/compatibility_alias.m: Ditto. * objc/execute/bf-1.m: Ditto. * objc/execute/no_clash.m: Ditto. * objc/execute/bf-3.m: Ditto. * objc/execute/string2.m: Ditto. * objc/execute/bf-5.m: Ditto. * objc/execute/string4.m: Ditto. * objc/execute/bf-7.m: Ditto. * objc/execute/object_is_meta_class.m: Ditto. * objc/execute/bf-9.m: Ditto. * objc/execute/bf-21.m: Ditto. * objc/execute/cascading-1.m: Ditto. * objc/execute/trivial.m: Ditto. * objc/execute/np-1.m: Ditto. * objc/compile/trivial.m: Ditto. * objc/execute/class_self-2.m: Include <stdlib.h>. * objc/execute/forward-1.x: Do not XFAIL for 32bit powerpc-darwin. * objc.dg/desig-init-1.m: Use shared wrapper headers (Object1.h, Protocol1.h) and next-mapping.h as required. XFAIL run if NeXT and 64bit. Use new NeXT interface as required. * objc.dg/special/unclaimed-category-1.m: Ditto. * objc.dg/special/unclaimed-category-1.h: Ditto. * objc.dg/special/unclaimed-category-1a.m: Ditto. * objc.dg/func-ptr-1.m: Ditto. * objc.dg/stret-1.m: Ditto. * objc.dg/encode-2.m: Ditto. * objc.dg/category-1.m: Ditto. * objc.dg/encode-3.m: Ditto. * objc.dg/call-super-3.m: Ditto. * objc.dg/method-3.m: Ditto. * objc.dg/func-ptr-2.m: Ditto. * objc.dg/lookup-1.m: Ditto. * objc.dg/encode-4.m: Ditto. * objc.dg/fix-and-continue-1.m: Ditto. * objc.dg/proto-lossage-3.m: Ditto. * objc.dg/method-13.m: Ditto. * objc.dg/proto-qual-1.m: Ditto. * objc.dg/zero-link-3.m: Ditto. * objc.dg/bitfield-1.m: Ditto. * objc.dg/va-meth-1.m: Ditto. * objc.dg/super-class-3.m: Ditto. * objc.dg/call-super-1.m: Ditto. * objc.dg/type-size-2.m: Ditto. * objc.dg/method-10.m: Ditto. * objc.dg/defs.m: Ditto. * objc.dg/const-str-3.m: Ditto. * objc.dg/try-catch-6.m: Use shared wrapper headers (Object1.h, Protocol1.h) and next-mapping.h as required. Use new NeXT interface as required. * objc.dg/super-class-4.m: Ditto. * objc.dg/comp-types-8.m: Ditto. * objc.dg/call-super-2.m: Ditto. * objc.dg/objc-fast-4.m: Ditto. * objc.dg/method-6.m: Ditto. * objc.dg/const-str-3.m: Ditto. * objc.dg/const-str-7.m: Ditto. * objc.dg/method-15.m: Ditto. * objc.dg/method-19.m: Ditto. * objc.dg/sync-1.m: Ditto. * objc.dg/layout-1.m: Ditto. * objc.dg/bitfield-3.m: Ditto. * objc.dg/try-catch-3.m: Ditto. * objc.dg/try-catch-7.m: Ditto. * objc.dg/comp-types-10.m: Ditto. * objc.dg/selector-2.: Ditto. * objc.dg/method-7.m: Ditto. * objc.dg/typedef-alias-1.m: Ditto. * objc.dg/proto-lossage-2.m: Ditto. * objc.dg/comp-types-11.m: Ditto. * objc.dg/sizeof-1.m: Ditto. * objc.dg/method-17.m: Ditto. * objc.dg/bitfield-5.m: Ditto. * objc.dg/try-catch-1.m: Ditto. * objc.dg/encode-5.m: Ditto. * objc.dg/fix-and-continue-2.m: Ditto. * objc.dg/method-9.m: Ditto. * objc.dg/isa-field-1.m: Ditto. * objc.dg/local-decl-2.m: Ditto. * objc.dg/objc-gc-4.m: Ditto. * objc.dg/type-stream-1.m: Skip for NeXT runtime. * objc.dg/gnu-runtime-3.m: Ditto. * objc.dg/encode-7.m: Ditto. * objc.dg/encode-8.m: Ditto. * objc.dg/selector-3.m: Ditto. * objc.dg/gnu-runtime-1.m: Ditto. * objc.dg/const-str-12.m: Ditto. * objc.dg/gnu-runtime-2.m: Ditto. * objc.dg/no-extra-load.m: Skip for gnu-runtime. * objc.dg/selector-1.m: Ditto. * objc.dg/stubify-2.m: Ditto. * objc.dg/zero-link-1.m: Ditto. * objc.dg/stret-2.m: Ditto. * objc.dg/zero-link-2.m: Ditto. * objc.dg/next-runtime-1.m: Ditto. * objc.dg/symtab-1.m: Ditto. * objc.dg/stubify-1.m: Ditto. * objc.dg/bitfield-2.m: Ditto. * objc.dg/try-catch-10.m: Apply to both runtimes. * objc.dg/const-str-1.m: Ditto. * objc.dg/image-info.m: Ditto. * objc.dg/encode-9.m: Ditto. * objc.dg/pragma-1.m: Apply test to all targets. * objc.dg/const-str-4.m: Ditto. * objc.dg/const-str-8.m: Ditto. * objc.dg/super-class-2.m: Ditto. * objc.dg/try-catch-5.m: Ditto. * objc.dg/const-str-10.m: Use shared wrapper headers (Object1.h, Protocol1.h) and next-mapping.h as required. Use new NeXT interface as required. Skip for gnu-runtime. Test for .quad at m64. * objc.dg/const-str-11.m: Ditto. * objc.dg/const-str-9.m: Ditto. * objc.dg/method-4.m: Skip for 64Bit NeXT. * objc.dg/encode-1.m: Remove redundant -lobjc. * objc.dg/try-catch-9.m: Tidy space. * obj-c++.dg/method-19.mm: Use shared wrapper headers (Object1.h, Protocol1.h) and next-mapping.h as required. XFAIL run if NeXT and 64bit. Use new NeXT interface as required. * obj-c++.dg/template-4.mm: Ditto. * obj-c++.dg/defs.mm: Ditto. * obj-c++.dg/basic.mm: Ditto. * obj-c++.dg/encode-4.mm: Ditto. * obj-c++.dg/method-17.mm: Ditto. * obj-c++.dg/proto-lossage-3.mm: Ditto. * obj-c++.dg/cxx-class-1.mm: Ditto. * obj-c++.dg/method-10.mm: Ditto. * obj-c++.dg/va-meth-1.mm: Ditto. * obj-c++.dg/encode-5.mm: Ditto. * obj-c++.dg/lookup-2.mm: Ditto. * obj-c++.dg/template-3.mm: Ditto. * obj-c++.dg/proto-qual-1.mm: Ditto. * obj-c++.dg/qual-types-1.m: Ditto. * obj-c++.dg/cxx-scope-1.mm: Ditto. * obj-c++.dg/template-1.mm: Ditto. * obj-c++.dg/encode-6.mm: Ditto. * obj-c++.dg/bitfield-2.mm: Use shared wrapper headers (Object1.h, Protocol1.h) and next-mapping.h as required. Use new NeXT interface as required. * obj-c++.dg/except-1.mm: Ditto. * obj-c++.dg/const-str-7.mm: Ditto. * obj-c++.dg/ivar-list-semi.mm: Ditto. * obj-c++.dg/cxx-scope-2.mm: Ditto. * obj-c++.dg/selector-2.mm: Ditto. * obj-c++.dg/isa-field-1.mm: Ditto. * obj-c++.dg/try-catch-1.mm: Ditto. * obj-c++.dg/local-decl-1.mm: Ditto. * obj-c++.dg/try-catch-9.mm: Ditto. * obj-c++.dg/no-extra-load.mm: Ditto. * obj-c++.dg/selector-5.mm: Ditto. * obj-c++.dg/method-12.mm: Ditto. * obj-c++.dg/try-catch-11.mm: Ditto. * obj-c++.dg/comp-types-11.mm: Ditto. * obj-c++.dg/bitfield-3.mm: Ditto. * obj-c++.dg/method-6.mm: Ditto. * obj-c++.dg/super-class-2.mm: Ditto. * obj-c++.dg/method-21.mm: Ditto. * obj-c++.dg/const-str-8.mm: Ditto. * obj-c++.dg/try-catch-7.mm: Ditto. * obj-c++.dg/method-15.mm: Ditto. * obj-c++.dg/layout-1.mm: Ditto. * obj-c++.dg/cxx-ivars-1.mm: Ditto. * obj-c++.dg/const-str-3.mm: Ditto. * obj-c++.dg/try-catch-2.mm: Ditto. * obj-c++.dg/objc-gc-3.mm: Ditto. * obj-c++.dg/fix-and-continue-2.mm: Ditto. * obj-c++.dg/bitfield-1.mm: Ditto. * obj-c++.dg/selector-6.mm: Ditto. * obj-c++.dg/method-13.mm: Ditto. * obj-c++.dg/comp-types-12.mm: Ditto. * obj-c++.dg/bitfield-4.mm: Ditto. * obj-c++.dg/try-catch-8.mm: Ditto. * obj-c++.dg/method-2.mm: Ditto. * obj-c++.dg/cxx-ivars-2.mm: Ditto. * obj-c++.dg/typedef-alias-1.mm: Ditto. * obj-c++.dg/const-str-4.mm: Ditto. * obj-c++.dg/proto-lossage-2.mm: Ditto. * obj-c++.dg/try-catch-3.mm: Ditto. * obj-c++.dg/comp-types-9.mm: Ditto. * obj-c++.dg/gnu-runtime-2.mm: Skip if NeXT runtime. * obj-c++.dg/gnu-runtime-3.mm: Ditto. * obj-c++.dg/gnu-runtime-1.mm: Ditto. * objc.dg/zero-link-2.m: Skip if gnu runtime. Use shared wrapper headers (Object1.h, Protocol1.h) and next-mapping.h as required. Use new NeXT interface as required. * obj-c++.dg/const-str-10.mm: Ditto. * obj-c++.dg/const-str-11.mm: Ditto. * obj-c++.dg/const-str-9.mm: Ditto. * obj-c++.dg/method-11.mm: Ditto. * obj-c++.dg/cxx-ivars-3.mm: Skip if gnu runtime. Use shared wrapper headers (Object1.h, Protocol1.h) and next-mapping.h as required. Use new NeXT interface as required. XFAIL run if NeXT and 64bit. * obj-c++.dg/encode-8.mm: Remove redundant -lobjc. * obj-c++.dg/const-str-1.mm: Run for NeXT as well as gnu. From-SVN: r157731
This commit is contained in:
parent
58f5f6b430
commit
812398e4cf
@ -1,3 +1,283 @@
|
||||
2010-03-25 Iain Sandoe <iain.sandoe@sandoe-acoustics.co.uk>
|
||||
|
||||
PR objc/35165
|
||||
PR testsuite/43512
|
||||
* objc-obj-c++-shared: New directory.
|
||||
* objc-obj-c++-shared/Object1-implementation.h: New file.
|
||||
* objc-obj-c++-shared/Object1.h: New file.
|
||||
* objc-obj-c++-shared/Protocol1.h: New file.
|
||||
* objc-obj-c++-shared/next-abi.h: New file.
|
||||
* objc-obj-c++-shared/next-mapping.h: New file.
|
||||
* objc/execute/next_mapping.h: Delete.
|
||||
* objc.dg/special/special.exp: For all targets run the tests with
|
||||
-fgnu-runtime, for darwin targets also run the tests with
|
||||
-fnext-runtime.
|
||||
* objc.dg/dg.exp: Ditto.
|
||||
* obj-c++.dg/dg.exp: Ditto.
|
||||
* objc/execute/forward-1.m: Use shared wrapper headers (Object1.h,
|
||||
Protocol1.h) and next-mapping.h as required. Amend testcase to
|
||||
include use of updated NeXT interface.
|
||||
* objc/execute/formal_protocol-5.m: Ditto.
|
||||
* objc/execute/protocol-isEqual-2.m: Ditto.
|
||||
* objc/execute/protocol-isEqual-4.m: Ditto.
|
||||
* objc/execute/class-11.m: Use shared wrapper headers (Object1.h,
|
||||
Protocol1.h) and next-mapping.h as required.
|
||||
* objc/execute/object_is_class.m: Ditto.
|
||||
* objc/execute/enumeration-1.m: Ditto.
|
||||
* objc/execute/class-13.m: Ditto.
|
||||
* objc/execute/formal_protocol-2.m: Ditto.
|
||||
* objc/execute/formal_protocol-4.m: Ditto.
|
||||
* objc/execute/class-1.m: Ditto.
|
||||
* objc/execute/bycopy-1.m: Ditto.
|
||||
* objc/execute/formal_protocol-6.m: Ditto.
|
||||
* objc/execute/bycopy-3.m: Ditto.
|
||||
* objc/execute/class-3.m: Ditto.
|
||||
* objc/execute/bf-11.m: Ditto.
|
||||
* objc/execute/class-5.m: Ditto.
|
||||
* objc/execute/bf-13.m: Ditto.
|
||||
* objc/execute/class-7.m: Ditto.
|
||||
* objc/execute/bf-15.m: Ditto.
|
||||
* objc/execute/class-9.m: Ditto.
|
||||
* objc/execute/bf-17.m: Ditto.
|
||||
* objc/execute/bf-19.m: Ditto.
|
||||
* objc/execute/IMP.m: Ditto.
|
||||
* objc/execute/exceptions/catchall-1.m: Ditto.
|
||||
* objc/execute/exceptions/trivial.m: Ditto.
|
||||
* objc/execute/exceptions/finally-1.m: Ditto.
|
||||
* objc/execute/exceptions/local-variables-1.m: Ditto.
|
||||
* objc/execute/exceptions/foward-1.m: Ditto.
|
||||
* objc/execute/bf-2.m: Ditto.
|
||||
* objc/execute/string1.m: Ditto.
|
||||
* objc/execute/bf-4.m: Ditto.
|
||||
* objc/execute/informal_protocol.m: Ditto.
|
||||
* objc/execute/string3.m: Ditto.
|
||||
* objc/execute/bf-6.m: Ditto.
|
||||
* objc/execute/bf-8.m: Ditto.
|
||||
* objc/execute/class-tests-1.h: Ditto.
|
||||
* objc/execute/protocol-isEqual-1.m: Ditto.
|
||||
* objc/execute/protocol-isEqual-3.m: Ditto.
|
||||
* objc/execute/_cmd.m: Ditto.
|
||||
* objc/execute/function-message-1.m: Ditto.
|
||||
* objc/execute/bf-20.m: Ditto.
|
||||
* objc/execute/bf-common.h: Ditto.
|
||||
* objc/execute/np-2.m: Ditto.
|
||||
* objc/execute/class-10.m: Ditto.
|
||||
* objc/execute/class-12.m: Ditto.
|
||||
* objc/execute/enumeration-2.m: Ditto.
|
||||
* objc/execute/class-14.m: Ditto.
|
||||
* objc/execute/encode-1.m: Ditto.
|
||||
* objc/execute/formal_protocol-1.m: Ditto.
|
||||
* objc/execute/formal_protocol-3.m: Ditto.
|
||||
* objc/execute/accessing_ivars.m: Ditto.
|
||||
* objc/execute/bycopy-2.m: Ditto.
|
||||
* objc/execute/class-2.m: Ditto.
|
||||
* objc/execute/bf-10.m: Ditto.
|
||||
* objc/execute/formal_protocol-7.m: Ditto.
|
||||
* objc/execute/root_methods.m: Ditto.
|
||||
* objc/execute/class-4.m: Ditto.
|
||||
* objc/execute/bf-12.m: Ditto.
|
||||
* objc/execute/class-6.m: Ditto.
|
||||
* objc/execute/bf-14.m: Ditto.
|
||||
* objc/execute/nested-func-1.m: Ditto.
|
||||
* objc/execute/class-8.m: Ditto.
|
||||
* objc/execute/private.m: Ditto.
|
||||
* objc/execute/bf-16.m: Ditto.
|
||||
* objc/execute/bf-18.m: Ditto.
|
||||
* objc/execute/load-3.m: Ditto.
|
||||
* objc/execute/compatibility_alias.m: Ditto.
|
||||
* objc/execute/bf-1.m: Ditto.
|
||||
* objc/execute/no_clash.m: Ditto.
|
||||
* objc/execute/bf-3.m: Ditto.
|
||||
* objc/execute/string2.m: Ditto.
|
||||
* objc/execute/bf-5.m: Ditto.
|
||||
* objc/execute/string4.m: Ditto.
|
||||
* objc/execute/bf-7.m: Ditto.
|
||||
* objc/execute/object_is_meta_class.m: Ditto.
|
||||
* objc/execute/bf-9.m: Ditto.
|
||||
* objc/execute/bf-21.m: Ditto.
|
||||
* objc/execute/cascading-1.m: Ditto.
|
||||
* objc/execute/trivial.m: Ditto.
|
||||
* objc/execute/np-1.m: Ditto.
|
||||
* objc/compile/trivial.m: Ditto.
|
||||
* objc/execute/class_self-2.m: Include <stdlib.h>.
|
||||
* objc/execute/forward-1.x: Do not XFAIL for 32bit powerpc-darwin.
|
||||
* objc.dg/desig-init-1.m: Use shared wrapper headers (Object1.h,
|
||||
Protocol1.h) and next-mapping.h as required. XFAIL run if NeXT
|
||||
and 64bit. Use new NeXT interface as required.
|
||||
* objc.dg/special/unclaimed-category-1.m: Ditto.
|
||||
* objc.dg/special/unclaimed-category-1.h: Ditto.
|
||||
* objc.dg/special/unclaimed-category-1a.m: Ditto.
|
||||
* objc.dg/func-ptr-1.m: Ditto.
|
||||
* objc.dg/stret-1.m: Ditto.
|
||||
* objc.dg/encode-2.m: Ditto.
|
||||
* objc.dg/category-1.m: Ditto.
|
||||
* objc.dg/encode-3.m: Ditto.
|
||||
* objc.dg/call-super-3.m: Ditto.
|
||||
* objc.dg/method-3.m: Ditto.
|
||||
* objc.dg/func-ptr-2.m: Ditto.
|
||||
* objc.dg/lookup-1.m: Ditto.
|
||||
* objc.dg/encode-4.m: Ditto.
|
||||
* objc.dg/fix-and-continue-1.m: Ditto.
|
||||
* objc.dg/proto-lossage-3.m: Ditto.
|
||||
* objc.dg/method-13.m: Ditto.
|
||||
* objc.dg/proto-qual-1.m: Ditto.
|
||||
* objc.dg/zero-link-3.m: Ditto.
|
||||
* objc.dg/bitfield-1.m: Ditto.
|
||||
* objc.dg/va-meth-1.m: Ditto.
|
||||
* objc.dg/super-class-3.m: Ditto.
|
||||
* objc.dg/call-super-1.m: Ditto.
|
||||
* objc.dg/type-size-2.m: Ditto.
|
||||
* objc.dg/method-10.m: Ditto.
|
||||
* objc.dg/defs.m: Ditto.
|
||||
* objc.dg/const-str-3.m: Ditto.
|
||||
* objc.dg/try-catch-6.m: Use shared wrapper headers (Object1.h,
|
||||
Protocol1.h) and next-mapping.h as required. Use new NeXT
|
||||
interface as required.
|
||||
* objc.dg/super-class-4.m: Ditto.
|
||||
* objc.dg/comp-types-8.m: Ditto.
|
||||
* objc.dg/call-super-2.m: Ditto.
|
||||
* objc.dg/objc-fast-4.m: Ditto.
|
||||
* objc.dg/method-6.m: Ditto.
|
||||
* objc.dg/const-str-3.m: Ditto.
|
||||
* objc.dg/const-str-7.m: Ditto.
|
||||
* objc.dg/method-15.m: Ditto.
|
||||
* objc.dg/method-19.m: Ditto.
|
||||
* objc.dg/sync-1.m: Ditto.
|
||||
* objc.dg/layout-1.m: Ditto.
|
||||
* objc.dg/bitfield-3.m: Ditto.
|
||||
* objc.dg/try-catch-3.m: Ditto.
|
||||
* objc.dg/try-catch-7.m: Ditto.
|
||||
* objc.dg/comp-types-10.m: Ditto.
|
||||
* objc.dg/selector-2.: Ditto.
|
||||
* objc.dg/method-7.m: Ditto.
|
||||
* objc.dg/typedef-alias-1.m: Ditto.
|
||||
* objc.dg/proto-lossage-2.m: Ditto.
|
||||
* objc.dg/comp-types-11.m: Ditto.
|
||||
* objc.dg/sizeof-1.m: Ditto.
|
||||
* objc.dg/method-17.m: Ditto.
|
||||
* objc.dg/bitfield-5.m: Ditto.
|
||||
* objc.dg/try-catch-1.m: Ditto.
|
||||
* objc.dg/encode-5.m: Ditto.
|
||||
* objc.dg/fix-and-continue-2.m: Ditto.
|
||||
* objc.dg/method-9.m: Ditto.
|
||||
* objc.dg/isa-field-1.m: Ditto.
|
||||
* objc.dg/local-decl-2.m: Ditto.
|
||||
* objc.dg/objc-gc-4.m: Ditto.
|
||||
* objc.dg/type-stream-1.m: Skip for NeXT runtime.
|
||||
* objc.dg/gnu-runtime-3.m: Ditto.
|
||||
* objc.dg/encode-7.m: Ditto.
|
||||
* objc.dg/encode-8.m: Ditto.
|
||||
* objc.dg/selector-3.m: Ditto.
|
||||
* objc.dg/gnu-runtime-1.m: Ditto.
|
||||
* objc.dg/const-str-12.m: Ditto.
|
||||
* objc.dg/gnu-runtime-2.m: Ditto.
|
||||
* objc.dg/no-extra-load.m: Skip for gnu-runtime.
|
||||
* objc.dg/selector-1.m: Ditto.
|
||||
* objc.dg/stubify-2.m: Ditto.
|
||||
* objc.dg/zero-link-1.m: Ditto.
|
||||
* objc.dg/stret-2.m: Ditto.
|
||||
* objc.dg/zero-link-2.m: Ditto.
|
||||
* objc.dg/next-runtime-1.m: Ditto.
|
||||
* objc.dg/symtab-1.m: Ditto.
|
||||
* objc.dg/stubify-1.m: Ditto.
|
||||
* objc.dg/bitfield-2.m: Ditto.
|
||||
* objc.dg/try-catch-10.m: Apply to both runtimes.
|
||||
* objc.dg/const-str-1.m: Ditto.
|
||||
* objc.dg/image-info.m: Ditto.
|
||||
* objc.dg/encode-9.m: Ditto.
|
||||
* objc.dg/pragma-1.m: Apply test to all targets.
|
||||
* objc.dg/const-str-4.m: Ditto.
|
||||
* objc.dg/const-str-8.m: Ditto.
|
||||
* objc.dg/super-class-2.m: Ditto.
|
||||
* objc.dg/try-catch-5.m: Ditto.
|
||||
* objc.dg/const-str-10.m: Use shared wrapper headers (Object1.h,
|
||||
Protocol1.h) and next-mapping.h as required. Use new NeXT
|
||||
interface as required. Skip for gnu-runtime. Test for .quad
|
||||
at m64.
|
||||
* objc.dg/const-str-11.m: Ditto.
|
||||
* objc.dg/const-str-9.m: Ditto.
|
||||
* objc.dg/method-4.m: Skip for 64Bit NeXT.
|
||||
* objc.dg/encode-1.m: Remove redundant -lobjc.
|
||||
* objc.dg/try-catch-9.m: Tidy space.
|
||||
* obj-c++.dg/method-19.mm: Use shared wrapper headers (Object1.h,
|
||||
Protocol1.h) and next-mapping.h as required. XFAIL run if NeXT
|
||||
and 64bit. Use new NeXT interface as required.
|
||||
* obj-c++.dg/template-4.mm: Ditto.
|
||||
* obj-c++.dg/defs.mm: Ditto.
|
||||
* obj-c++.dg/basic.mm: Ditto.
|
||||
* obj-c++.dg/encode-4.mm: Ditto.
|
||||
* obj-c++.dg/method-17.mm: Ditto.
|
||||
* obj-c++.dg/proto-lossage-3.mm: Ditto.
|
||||
* obj-c++.dg/cxx-class-1.mm: Ditto.
|
||||
* obj-c++.dg/method-10.mm: Ditto.
|
||||
* obj-c++.dg/va-meth-1.mm: Ditto.
|
||||
* obj-c++.dg/encode-5.mm: Ditto.
|
||||
* obj-c++.dg/lookup-2.mm: Ditto.
|
||||
* obj-c++.dg/template-3.mm: Ditto.
|
||||
* obj-c++.dg/proto-qual-1.mm: Ditto.
|
||||
* obj-c++.dg/qual-types-1.m: Ditto.
|
||||
* obj-c++.dg/cxx-scope-1.mm: Ditto.
|
||||
* obj-c++.dg/template-1.mm: Ditto.
|
||||
* obj-c++.dg/encode-6.mm: Ditto.
|
||||
* obj-c++.dg/bitfield-2.mm: Use shared wrapper headers (Object1.h,
|
||||
Protocol1.h) and next-mapping.h as required. Use new NeXT
|
||||
interface as required.
|
||||
* obj-c++.dg/except-1.mm: Ditto.
|
||||
* obj-c++.dg/const-str-7.mm: Ditto.
|
||||
* obj-c++.dg/ivar-list-semi.mm: Ditto.
|
||||
* obj-c++.dg/cxx-scope-2.mm: Ditto.
|
||||
* obj-c++.dg/selector-2.mm: Ditto.
|
||||
* obj-c++.dg/isa-field-1.mm: Ditto.
|
||||
* obj-c++.dg/try-catch-1.mm: Ditto.
|
||||
* obj-c++.dg/local-decl-1.mm: Ditto.
|
||||
* obj-c++.dg/try-catch-9.mm: Ditto.
|
||||
* obj-c++.dg/no-extra-load.mm: Ditto.
|
||||
* obj-c++.dg/selector-5.mm: Ditto.
|
||||
* obj-c++.dg/method-12.mm: Ditto.
|
||||
* obj-c++.dg/try-catch-11.mm: Ditto.
|
||||
* obj-c++.dg/comp-types-11.mm: Ditto.
|
||||
* obj-c++.dg/bitfield-3.mm: Ditto.
|
||||
* obj-c++.dg/method-6.mm: Ditto.
|
||||
* obj-c++.dg/super-class-2.mm: Ditto.
|
||||
* obj-c++.dg/method-21.mm: Ditto.
|
||||
* obj-c++.dg/const-str-8.mm: Ditto.
|
||||
* obj-c++.dg/try-catch-7.mm: Ditto.
|
||||
* obj-c++.dg/method-15.mm: Ditto.
|
||||
* obj-c++.dg/layout-1.mm: Ditto.
|
||||
* obj-c++.dg/cxx-ivars-1.mm: Ditto.
|
||||
* obj-c++.dg/const-str-3.mm: Ditto.
|
||||
* obj-c++.dg/try-catch-2.mm: Ditto.
|
||||
* obj-c++.dg/objc-gc-3.mm: Ditto.
|
||||
* obj-c++.dg/fix-and-continue-2.mm: Ditto.
|
||||
* obj-c++.dg/bitfield-1.mm: Ditto.
|
||||
* obj-c++.dg/selector-6.mm: Ditto.
|
||||
* obj-c++.dg/method-13.mm: Ditto.
|
||||
* obj-c++.dg/comp-types-12.mm: Ditto.
|
||||
* obj-c++.dg/bitfield-4.mm: Ditto.
|
||||
* obj-c++.dg/try-catch-8.mm: Ditto.
|
||||
* obj-c++.dg/method-2.mm: Ditto.
|
||||
* obj-c++.dg/cxx-ivars-2.mm: Ditto.
|
||||
* obj-c++.dg/typedef-alias-1.mm: Ditto.
|
||||
* obj-c++.dg/const-str-4.mm: Ditto.
|
||||
* obj-c++.dg/proto-lossage-2.mm: Ditto.
|
||||
* obj-c++.dg/try-catch-3.mm: Ditto.
|
||||
* obj-c++.dg/comp-types-9.mm: Ditto.
|
||||
* obj-c++.dg/gnu-runtime-2.mm: Skip if NeXT runtime.
|
||||
* obj-c++.dg/gnu-runtime-3.mm: Ditto.
|
||||
* obj-c++.dg/gnu-runtime-1.mm: Ditto.
|
||||
* objc.dg/zero-link-2.m: Skip if gnu runtime. Use shared wrapper
|
||||
headers (Object1.h, Protocol1.h) and next-mapping.h as required.
|
||||
Use new NeXT interface as required.
|
||||
* obj-c++.dg/const-str-10.mm: Ditto.
|
||||
* obj-c++.dg/const-str-11.mm: Ditto.
|
||||
* obj-c++.dg/const-str-9.mm: Ditto.
|
||||
* obj-c++.dg/method-11.mm: Ditto.
|
||||
* obj-c++.dg/cxx-ivars-3.mm: Skip if gnu runtime. Use shared wrapper
|
||||
headers (Object1.h, Protocol1.h) and next-mapping.h as required.
|
||||
Use new NeXT interface as required. XFAIL run if NeXT and 64bit.
|
||||
* obj-c++.dg/encode-8.mm: Remove redundant -lobjc.
|
||||
* obj-c++.dg/const-str-1.mm: Run for NeXT as well as gnu.
|
||||
|
||||
2010-03-25 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/43206
|
||||
|
@ -1,7 +1,7 @@
|
||||
// A basic sanity check for Objective-C++.
|
||||
// { dg-do run }
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <iostream>
|
||||
|
||||
@interface Greeter : Object
|
||||
@ -19,3 +19,4 @@ main ()
|
||||
Greeter *obj = [Greeter new];
|
||||
[obj greet: "Hello from Objective-C\n"];
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -9,8 +9,8 @@
|
||||
|
||||
/* Leave blank lines here to keep warnings on the same lines. */
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
|
@ -3,7 +3,7 @@
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CHECK_IF(expr) if(!(expr)) abort();
|
||||
@ -76,3 +76,4 @@ int main(void) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* Check if bitfield ivars are correctly @encode'd when
|
||||
the NeXT runtime is used. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-fnext-runtime -fsigned-char" } */
|
||||
/* { dg-options "-fsigned-char" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
|
||||
typedef struct objc_object { struct objc_class *class_pointer; } *id;
|
||||
|
@ -2,9 +2,9 @@
|
||||
layout of bitfields. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-lobjc -Wpadded" } */
|
||||
/* { dg-options "-Wpadded" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Yet another mysterious gimplifier crasher. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-xfail-if "PR23716" { *-*-* } { "*" } { "" } } */
|
||||
/* { dg-xfail-if "PR23716" { ! *-*-darwin* } { "*" } { "" } } */
|
||||
/* { dg-prune-output ".*internal compiler error.*" } */
|
||||
/* { dg-options "-O3" } */
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@protocol Foo
|
||||
- (id)meth1;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Derived: Object
|
||||
@end
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
/* Another gimplifier ICE... */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface MyView: Object {
|
||||
int _frame;
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* Test errors for constant strings. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fgnu-runtime" } */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern void baz(...);
|
||||
|
@ -2,10 +2,10 @@
|
||||
constant string classes get derived. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com> */
|
||||
|
||||
/* { dg-options "-fnext-runtime" } */
|
||||
/* { dg-do compile { target *-*-darwin* } } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface NSString: Object
|
||||
@end
|
||||
@ -20,7 +20,11 @@
|
||||
@interface NSConstantString : NSSimpleCString
|
||||
@end
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
Class _NSConstantStringClassReference;
|
||||
#else
|
||||
extern struct objc_class _NSConstantStringClassReference;
|
||||
#endif
|
||||
|
||||
const NSConstantString *appKey = @"MyApp";
|
||||
|
||||
|
@ -2,10 +2,11 @@
|
||||
constant string classes get derived. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com> */
|
||||
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=XStr" } */
|
||||
/* { dg-do compile { target *-*-darwin* } } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
|
||||
/* { dg-options "-fconstant-string-class=XStr" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface XString: Object {
|
||||
@protected
|
||||
@ -19,7 +20,11 @@
|
||||
}
|
||||
@end
|
||||
|
||||
#ifndef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
extern struct objc_class _XStrClassReference;
|
||||
#else
|
||||
extern Class _XStrClassReference;
|
||||
#endif
|
||||
|
||||
const XStr *appKey = @"MyApp";
|
||||
|
||||
|
@ -2,14 +2,18 @@
|
||||
runtime. */
|
||||
/* Developed by Markus Hitter <mah@jump-ing.de>. */
|
||||
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=Foo -lobjc" } */
|
||||
/* { dg-options "-fconstant-string-class=Foo" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
|
||||
#import "../objc-obj-c++-shared/Object1.h"
|
||||
#import "../objc-obj-c++-shared/next-mapping.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
#ifndef __NEXT_RUNTIME__
|
||||
#include <objc/objc-api.h>
|
||||
#endif
|
||||
|
||||
@interface Foo: Object {
|
||||
char *cString;
|
||||
@ -18,7 +22,11 @@
|
||||
- (char *)customString;
|
||||
@end
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
struct fudge_objc_class _FooClassReference;
|
||||
#else
|
||||
struct objc_class _FooClassReference;
|
||||
#endif
|
||||
|
||||
@implementation Foo : Object
|
||||
- (char *)customString {
|
||||
@ -38,7 +46,7 @@ int main () {
|
||||
constant string object. Can't be moved to +initialize since _that_
|
||||
is already a message. */
|
||||
|
||||
memcpy(&_FooClassReference, objc_getClass("Foo"), sizeof(_FooClassReference));
|
||||
memcpy(&_FooClassReference, objc_get_class("Foo"), sizeof(_FooClassReference));
|
||||
if (strcmp ([string customString], "bla")) {
|
||||
abort ();
|
||||
}
|
||||
@ -46,3 +54,4 @@ int main () {
|
||||
printf([@"This is a working constant string object\n" customString]);
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* Ensure that the preprocessor handles ObjC string constants gracefully. */
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com> */
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=MyString -lobjc" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
/* { dg-options "-fconstant-string-class=MyString" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
|
@ -2,17 +2,15 @@
|
||||
scopes. */
|
||||
/* Developed by Andrew Pinski <pinskia@physics.uc.edu> */
|
||||
|
||||
/* { dg-options "-fconstant-string-class=Foo" } */
|
||||
/* { dg-do run } */
|
||||
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=Foo -lobjc" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include "../objc-obj-c++-shared/next-mapping.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
|
||||
|
||||
@interface Foo: Object {
|
||||
char *cString;
|
||||
@ -21,8 +19,11 @@
|
||||
- (char *)customString;
|
||||
@end
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
struct fudge_objc_class _FooClassReference;
|
||||
#else
|
||||
struct objc_class _FooClassReference;
|
||||
|
||||
#endif
|
||||
|
||||
@implementation Foo : Object
|
||||
- (char *)customString {
|
||||
@ -36,11 +37,10 @@ int main () {
|
||||
{
|
||||
Foo *string2 = @"bla";
|
||||
|
||||
|
||||
if(string != string2)
|
||||
abort();
|
||||
printf("Strings are being uniqued properly\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,12 +1,11 @@
|
||||
/* Test for assigning compile-time constant-string objects to static variables. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com> */
|
||||
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=Foo -lobjc" } */
|
||||
/* { dg-options "-fconstant-string-class=Foo" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
#include <objc/Object.h>
|
||||
|
||||
@interface Foo: Object {
|
||||
char *cString;
|
||||
@ -14,7 +13,11 @@
|
||||
}
|
||||
@end
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
Class _FooClassReference;
|
||||
#else
|
||||
struct objc_class _FooClassReference;
|
||||
#endif
|
||||
|
||||
@implementation Foo : Object
|
||||
- (char *)customString {
|
||||
@ -37,3 +40,5 @@ int main () {
|
||||
PrefsSynchronize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,11 +1,10 @@
|
||||
/* Test if ObjC constant strings get placed in the correct section. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com> */
|
||||
|
||||
/* { dg-options "-fnext-runtime" } */
|
||||
/* { dg-do compile { target *-*-darwin* } } */
|
||||
/* { dg-skip-if "" { *-*-darwin* } { "-m64" } { "" } } */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface NSConstantString: Object {
|
||||
char *cString;
|
||||
@ -13,7 +12,11 @@
|
||||
}
|
||||
@end
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
Class _NSConstantStringClassReference;
|
||||
#else
|
||||
extern struct objc_class _NSConstantStringClassReference;
|
||||
#endif
|
||||
|
||||
const NSConstantString *appKey = @"MyApp";
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Test that Objective-C++ is able to chew through a simple C++ class hierarchy.
|
||||
This was broken in earlier ObjC++ incarnations. */
|
||||
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
struct foo
|
||||
{
|
||||
foo(void *a) {};
|
||||
|
@ -3,7 +3,7 @@
|
||||
// { dg-do run }
|
||||
// { dg-options "-fno-objc-call-cxx-cdtors" }
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
|
||||
@ -40,3 +40,4 @@ int main (void)
|
||||
[obj manipulate_ivars];
|
||||
[obj free];
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -4,7 +4,7 @@
|
||||
// { dg-do run { xfail { "*-*-*" } } } PR27247/PR23681
|
||||
// { dg-options "-fobjc-call-cxx-cdtors" }
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
|
||||
@ -74,3 +74,4 @@ int main (void)
|
||||
[foo free];
|
||||
CHECK_IF(!ctor1_called && !ctor2_called && dtor1_called);
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,9 +1,12 @@
|
||||
// Check if ObjC classes with non-POD C++ ivars are specially marked in the metadata.
|
||||
|
||||
// { dg-do run { target *-*-darwin* } }
|
||||
// { dg-options "-fobjc-call-cxx-cdtors -fnext-runtime" }
|
||||
// { dg-options "-fobjc-call-cxx-cdtors" }
|
||||
// { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } }
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include "../objc-obj-c++-shared/next-mapping.h"
|
||||
|
||||
#include <objc/objc-runtime.h>
|
||||
#include <stdlib.h>
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
|
||||
@ -37,10 +40,16 @@ int main (void)
|
||||
{
|
||||
Class cls;
|
||||
|
||||
cls = objc_getClass("Foo");
|
||||
cls = objc_get_class("Foo");
|
||||
#if NEXT_OBJC_USE_NEW_INTERFACE
|
||||
CHECK_IF(class_isMetaClass(cls) & CLS_HAS_CXX_STRUCTORS);
|
||||
cls = objc_getClass("Bar");
|
||||
CHECK_IF(!(class_isMetaClass(cls) & CLS_HAS_CXX_STRUCTORS));
|
||||
#else
|
||||
CHECK_IF(cls->info & CLS_HAS_CXX_STRUCTORS);
|
||||
cls = objc_getClass("Bar");
|
||||
CHECK_IF(!(cls->info & CLS_HAS_CXX_STRUCTORS));
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -2,8 +2,8 @@
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com> */
|
||||
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
@class Derived;
|
||||
@ -51,3 +51,4 @@ int main(void) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
|
@ -1,12 +1,11 @@
|
||||
/* Check @defs() in Objective-C++ */
|
||||
/* Contributed by Devang Patel <dpatel@apple.com> */
|
||||
|
||||
/* { dg-options "-lobjc" } */
|
||||
/* { dg-options "" } */
|
||||
/* { dg-do run } */
|
||||
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
|
||||
extern "C" void abort(void);
|
||||
|
||||
@ -41,3 +40,4 @@ int main()
|
||||
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -31,7 +31,12 @@ dg-init
|
||||
set tests [lsort [find $srcdir/$subdir *.mm]]
|
||||
|
||||
# Main loop.
|
||||
dg-runtest $tests "" $DEFAULT_OBJCXXFLAGS
|
||||
dg-runtest $tests "-fgnu-runtime" $DEFAULT_OBJCXXFLAGS
|
||||
|
||||
# darwin targets can also run code with the NeXT runtime.
|
||||
if [istarget "*-*-darwin*" ] {
|
||||
dg-runtest $tests "-fnext-runtime" $DEFAULT_OBJCXXFLAGS
|
||||
}
|
||||
|
||||
# All done.
|
||||
dg-finish
|
||||
|
@ -15,20 +15,16 @@
|
||||
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-do run } */
|
||||
|
||||
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include "../objc-obj-c++-shared/next-mapping.h"
|
||||
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
#define METHOD Method
|
||||
#define OBJC_GETCLASS objc_getClass
|
||||
#define CLASS_GETINSTANCEMETHOD class_getInstanceMethod
|
||||
#else
|
||||
#include <objc/objc-api.h>
|
||||
#define METHOD Method_t
|
||||
#define OBJC_GETCLASS objc_get_class
|
||||
#define CLASS_GETINSTANCEMETHOD class_get_instance_method
|
||||
#define method_get_types(M) (M)->method_types
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@ -78,27 +74,28 @@ unsigned offs1, offs2, offs3, offs4, offs5, offs6, offs7;
|
||||
|
||||
int main(void) {
|
||||
Foo *foo = [[Foo alloc] init];
|
||||
Class fooClass = OBJC_GETCLASS("Foo");
|
||||
Class fooClass = objc_get_class("Foo");
|
||||
METHOD meth;
|
||||
const char *string;
|
||||
|
||||
meth = CLASS_GETINSTANCEMETHOD(fooClass, @selector(setRect:withInt:));
|
||||
meth = class_get_instance_method(fooClass, @selector(setRect:withInt:));
|
||||
offs2 = 9999;
|
||||
sscanf(meth->method_types, "@%u@%u:%u{_XXRect={?=ff}{?=ff}}%ui%u", &offs1, &offs2, &offs3,
|
||||
sscanf(method_get_types(meth), "@%u@%u:%u{_XXRect={?=ff}{?=ff}}%ui%u", &offs1, &offs2, &offs3,
|
||||
&offs4, &offs5);
|
||||
CHECK_IF(!offs2);
|
||||
[foo setRect:my_rect withInt:123];
|
||||
|
||||
meth = CLASS_GETINSTANCEMETHOD(fooClass, @selector(char:float:double:long:));
|
||||
meth = class_get_instance_method(fooClass, @selector(char:float:double:long:));
|
||||
offs2 = 9999;
|
||||
if (sizeof (long) == 8)
|
||||
string = "v%u@%u:%uc%uf%ud%uq%u";
|
||||
else
|
||||
string = "v%u@%u:%uc%uf%ud%ul%u";
|
||||
sscanf(meth->method_types, string, &offs1, &offs2, &offs3,
|
||||
sscanf(method_get_types(meth), string, &offs1, &offs2, &offs3,
|
||||
&offs4, &offs5, &offs6, &offs7);
|
||||
CHECK_IF(!offs2);
|
||||
[foo char:'c' float:2.3 double:3.5 long:2345L];
|
||||
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,16 +1,22 @@
|
||||
/* Method encoding tests for stand-alone @protocol declarations. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Protocol.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include "../objc-obj-c++-shared/next-mapping.h"
|
||||
#include "../objc-obj-c++-shared/Protocol1.h"
|
||||
#ifdef __cplusplus
|
||||
#define ProtoBool bool
|
||||
#else
|
||||
#define ProtoBool _Bool
|
||||
#endif
|
||||
|
||||
#ifndef __NEXT_RUNTIME__
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
#define METHOD Method
|
||||
#else
|
||||
#include <objc/objc-api.h>
|
||||
#define METHOD Method_t
|
||||
#define method_get_types(M) (M)->method_types
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@ -37,6 +43,7 @@ typedef struct _XXRect { XXPoint origin; XXSize size; struct _XXRect *next; } XX
|
||||
|
||||
Protocol *proto = @protocol(Proto);
|
||||
struct objc_method_description *meth;
|
||||
|
||||
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
|
||||
|
||||
static void scan_initial(const char *pattern) {
|
||||
@ -71,3 +78,4 @@ int main(void) {
|
||||
CHECK_IF(totsize == offs2 + sizeof(ObjCBool **));
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,15 +1,12 @@
|
||||
/* Encoding tests for ObjC class layouts. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-lobjc" } */
|
||||
/* { dg-options "" } */
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
#include <objc/objc-class.h>
|
||||
#define OBJC_GETCLASS objc_getClass
|
||||
#else
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include "../objc-obj-c++-shared/next-mapping.h"
|
||||
#ifndef __NEXT_RUNTIME__
|
||||
#include <objc/objc-api.h>
|
||||
#define OBJC_GETCLASS objc_get_class
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -50,25 +47,43 @@ struct Nested {
|
||||
@implementation Int2
|
||||
@end
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
Ivar *ivar;
|
||||
#else
|
||||
struct objc_ivar *ivar;
|
||||
#endif
|
||||
|
||||
static void check_ivar(const char *name, const char *type) {
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
CHECK_IF(!strcmp(ivar_getName(*ivar), name));
|
||||
CHECK_IF(!strcmp(ivar_getTypeEncoding(*ivar), type));
|
||||
#else
|
||||
CHECK_IF(!strcmp(ivar->ivar_name, name));
|
||||
CHECK_IF(!strcmp(ivar->ivar_type, type));
|
||||
#endif
|
||||
ivar++;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
ivar = ((Class)OBJC_GETCLASS("Int1"))->ivars->ivar_list;
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
ivar = class_copyIvarList ((Class)objc_get_class("Int1"), NULL);
|
||||
#else
|
||||
ivar = ((Class)objc_get_class("Int1"))->ivars->ivar_list;
|
||||
#endif
|
||||
check_ivar("a", "c");
|
||||
check_ivar("b", "c");
|
||||
check_ivar("int2", "@\"Int2\"");
|
||||
check_ivar("nested",
|
||||
"{Nested=\"a\"f\"b\"f\"next\"@\"Int1\"\"innermost\"{Innermost=\"a\"C\"b\"C\"encl\"^{Nested}}}");
|
||||
|
||||
ivar = ((Class)OBJC_GETCLASS("Int2"))->ivars->ivar_list;
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
ivar = class_copyIvarList ((Class)objc_get_class("Int2"), NULL);
|
||||
#else
|
||||
ivar = ((Class)objc_get_class("Int2"))->ivars->ivar_list;
|
||||
#endif
|
||||
check_ivar("innermost", "^{Innermost=CC^{Nested}}");
|
||||
check_ivar("base", "@\"Int1\"");
|
||||
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -9,20 +9,18 @@
|
||||
|
||||
/* Contributed by Alexander Malmberg <alexander@malmberg.org> */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include "../objc-obj-c++-shared/next-mapping.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
#define METHOD Method
|
||||
#define OBJC_GETCLASS objc_getClass
|
||||
#define CLASS_GETINSTANCEMETHOD class_getInstanceMethod
|
||||
#else
|
||||
#include <objc/objc-api.h>
|
||||
#define METHOD Method_t
|
||||
#define OBJC_GETCLASS objc_get_class
|
||||
#define CLASS_GETINSTANCEMETHOD class_get_instance_method
|
||||
#define method_get_types(M) (M)->method_types
|
||||
#endif
|
||||
|
||||
@interface Test : Object
|
||||
@ -49,7 +47,7 @@ int offs1, offs2, offs3, offs4, offs5, offs6;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
Class testClass = OBJC_GETCLASS("Test");
|
||||
Class testClass = objc_get_class("Test");
|
||||
METHOD meth;
|
||||
|
||||
cc[0] = [Test new];
|
||||
@ -60,16 +58,16 @@ int main(int argc, char **argv)
|
||||
[*c test2: bb with: bb + 5];
|
||||
CHECK_IF (bb[3] == 5);
|
||||
|
||||
meth = CLASS_GETINSTANCEMETHOD(testClass, @selector(test2:with:));
|
||||
meth = class_get_instance_method(testClass, @selector(test2:with:));
|
||||
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
|
||||
sscanf(meth->method_types, "v%d@%d:%d[%di]%d^i%d", &offs1, &offs2, &offs3,
|
||||
sscanf(method_get_types(meth), "v%d@%d:%d[%di]%d^i%d", &offs1, &offs2, &offs3,
|
||||
&offs4, &offs5, &offs6);
|
||||
CHECK_IF (!offs2 && offs4 == 5 && offs3 > 0);
|
||||
CHECK_IF (offs5 == 2 * offs3 && offs6 == 3 * offs3 && offs1 == 4 * offs3);
|
||||
|
||||
meth = CLASS_GETINSTANCEMETHOD(testClass, @selector(test3:));
|
||||
meth = class_get_instance_method(testClass, @selector(test3:));
|
||||
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
|
||||
sscanf(meth->method_types, "v%d@%d:%d[%d[%d{Test=#f}]]%d", &offs1, &offs2, &offs3,
|
||||
sscanf(method_get_types(meth), "v%d@%d:%d[%d[%d{Test=#f}]]%d", &offs1, &offs2, &offs3,
|
||||
&offs4, &offs5, &offs6);
|
||||
CHECK_IF (!offs2 && offs4 == 3 && offs5 == 4 && offs3 > 0);
|
||||
CHECK_IF (offs6 == 2 * offs3 && offs1 == 3 * offs3);
|
||||
|
@ -3,7 +3,6 @@
|
||||
should be encoded as '*'). */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-do run { xfail { "*-*-*" } } } PR27249 */
|
||||
/* { dg-options "-lobjc" } */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -8,14 +8,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
@interface Object {
|
||||
Class isa;
|
||||
}
|
||||
+ alloc;
|
||||
- init;
|
||||
@end
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
// ObjectiveC class header
|
||||
@interface ObjCclass : Object {
|
||||
@ -69,3 +62,5 @@ void CPPclass::function1()
|
||||
/* Shouldn't be here because we threw. */
|
||||
abort ();
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* { dg-do assemble { target *-*-darwin* } } */
|
||||
/* { dg-options "-mfix-and-continue" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Foo: Object
|
||||
+ (Object *)indexableFileTypes;
|
||||
|
@ -2,7 +2,7 @@
|
||||
the system runtime used). */
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com> */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fgnu-runtime" } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
regardless of runtime used on target system. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fgnu-runtime" } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include <string.h>
|
||||
|
@ -2,7 +2,7 @@
|
||||
the system runtime used). */
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com> */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-fgnu-runtime" } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-xfail-if "PR23613" { "*-*-*" } { "*" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Object (Test)
|
||||
- (Class) test1: (id)object;
|
||||
@ -42,3 +42,4 @@ Class test3(id object) {
|
||||
Class cls = object->isa;
|
||||
return cls;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* Allow for an optional semicolon following the ivar block. */
|
||||
/* Contributed by: Ziemowit Laski <zlaski@apple.com>. */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Tink : Object {
|
||||
@private
|
||||
|
@ -3,7 +3,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wpadded -Wpacked -Wabi" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Derived1: Object
|
||||
{ }
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Sprite: Object {
|
||||
int sprite, spree;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-xfail-if "PR23614" { "*-*-*" } { "*" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
class MyWidget {
|
||||
@ -55,3 +55,5 @@ int main(void) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,9 +1,9 @@
|
||||
/* Test for sending messages to aliased classes (and instances thereof). */
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-lobjc" } */
|
||||
/* { dg-options "" } */
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
@ -43,3 +43,4 @@ int main(void) {
|
||||
CHECK_IF([(Int1Alias *)int2typedef instanceMeth] == 1697);
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,10 +1,11 @@
|
||||
/* Check if class references (generated for the NeXT runtime) are appropriately
|
||||
folded. This test is safe to run on all targets. */
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-fnext-runtime" } */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
typedef Object ObjectTypedef1;
|
||||
typedef ObjectTypedef1 ObjectTypedef2;
|
||||
|
@ -3,7 +3,7 @@
|
||||
/* { dg-options "-Wstrict-selector-match" } */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Protocol.h>
|
||||
#include "../objc-obj-c++-shared/Protocol1.h"
|
||||
|
||||
@interface Base
|
||||
- (unsigned)port;
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* { dg-options "-Wstrict-selector-match" } */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Class1
|
||||
- (void)setWindow:(Object *)wdw;
|
||||
|
@ -3,7 +3,7 @@
|
||||
/* { dg-options "-Wstrict-selector-match" } */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@protocol MyObject
|
||||
- (id)initWithData:(Object *)data;
|
||||
|
@ -3,8 +3,8 @@
|
||||
message sends (so that proper C/C++ argument conversions may
|
||||
take place). */
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
@ -30,3 +30,4 @@ int main(void)
|
||||
[foo brokenType: (int)d floatingPoint: d];
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -3,15 +3,12 @@
|
||||
root classes must be considered. */
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-do run } */
|
||||
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/next-mapping.h"
|
||||
#include <objc/objc.h>
|
||||
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
#include <objc/objc-runtime.h>
|
||||
#define OBJC_GETCLASS objc_getClass
|
||||
#else
|
||||
#ifndef __NEXT_RUNTIME__
|
||||
#include <objc/objc-api.h>
|
||||
#define OBJC_GETCLASS objc_get_class
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -59,7 +56,7 @@
|
||||
|
||||
int main(void)
|
||||
{
|
||||
Class obj = OBJC_GETCLASS("Derived");
|
||||
Class obj = objc_get_class("Derived");
|
||||
|
||||
/* None of the following should elicit compiler-time warnings. */
|
||||
|
||||
@ -78,3 +75,4 @@ int main(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@class NSString;
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wreturn-type -Wextra" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Foo: Object
|
||||
- (id) meth1;
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@class NotKnown;
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
// { dg-do compile }
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <iostream>
|
||||
|
||||
@interface Greeter : Object
|
||||
|
@ -5,7 +5,7 @@
|
||||
/* { dg-do compile { target *-*-darwin* } } */
|
||||
/* { dg-options "-fobjc-gc" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@class MyWindow;
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
provide a suitable method. */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@protocol Zot
|
||||
-(void) zot;
|
||||
|
@ -2,9 +2,10 @@
|
||||
a protocol with no instance/class methods respectively.
|
||||
Problem report and original fix by richard@brainstorm.co.uk. */
|
||||
/* { dg-do run } */
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Protocol1.h"
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
#include <objc/Protocol.h>
|
||||
|
||||
@protocol NoInstanceMethods
|
||||
+ testMethod;
|
||||
|
@ -2,8 +2,8 @@
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com> */
|
||||
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Protocol.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Protocol1.h"
|
||||
#ifndef __NEXT_RUNTIME__
|
||||
#include <objc/objc-api.h>
|
||||
#endif
|
||||
|
@ -3,8 +3,8 @@
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com>. */
|
||||
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
@ -66,3 +66,4 @@ int main (void) {
|
||||
CHECK_IF(FooHolder::counter == 0);
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* { dg-options "-Wselector" } */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Foo
|
||||
@end
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* { dg-options "" } */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* { dg-options "" } */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@class MyWpModule;
|
||||
|
||||
|
@ -2,8 +2,8 @@
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com>. */
|
||||
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
@ -47,3 +47,4 @@ int main (void) {
|
||||
CHECK_IF(count == 0);
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -3,8 +3,8 @@
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
@ -78,3 +78,4 @@ int main(void) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,17 +1,13 @@
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com>. */
|
||||
|
||||
/* { dg-do run } */
|
||||
/* { dg-skip-if "" { *-*-darwin* } { "-m64" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include "../objc-obj-c++-shared/next-mapping.h"
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
/* The following ain't pretty, but does allow us to have just one copy
|
||||
of next_mapping.h. */
|
||||
#include "../objc/execute/next_mapping.h"
|
||||
#else
|
||||
#ifndef __NEXT_RUNTIME__
|
||||
#include <objc/NXConstStr.h>
|
||||
#endif
|
||||
|
||||
@ -80,3 +76,4 @@ int main(void) {
|
||||
CHECK_IF(abc(a1, a2) * t.k == 35);
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -4,7 +4,7 @@
|
||||
/* { dg-options "-fobjc-exceptions" } */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdio.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
/* Ensure that @try/@catch blocks do not mess with types of
|
||||
local objects (other than their volatile bits). */
|
||||
|
||||
/* { dg-options "-fobjc-exceptions -fnext-runtime" } */
|
||||
/* { dg-options "-fobjc-exceptions" } */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@protocol Proto1
|
||||
- (int)meth1;
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* { dg-xfail-if "PR23616" { "*-*-*" } { "*" } { "" } } */
|
||||
/* { dg-options "-fobjc-exceptions" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@ -77,3 +77,4 @@ int main (void) {
|
||||
test((Object *)-1);
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -5,7 +5,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fobjc-exceptions" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
const char *foo(void)
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fobjc-exceptions" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
int main (int argc, const char * argv[]) {
|
||||
Object * pool = [Object new];
|
||||
|
@ -3,7 +3,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fobjc-exceptions" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Derived: Object
|
||||
- (id) meth;
|
||||
|
@ -7,7 +7,7 @@
|
||||
/* { dg-prune-output ".*internal compiler error.*" } */
|
||||
/* { dg-options "-fobjc-exceptions -O2" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@ -65,3 +65,4 @@ int main(void) {
|
||||
foo(15, &gf1);
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* Typedefs of ObjC types should work without any bogus warnings. */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
typedef Object MyObject;
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* Based on objc/execute/va_method.m, by Nicola Pero */
|
||||
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@ -72,3 +72,4 @@ int main (void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
62
gcc/testsuite/objc-obj-c++-shared/Object1-implementation.h
Executable file
62
gcc/testsuite/objc-obj-c++-shared/Object1-implementation.h
Executable file
@ -0,0 +1,62 @@
|
||||
/* This provides a minimal implementation of the Object root class.
|
||||
* It is split from the definition so that it can be placed
|
||||
* at the end of source files that require it. This reduces
|
||||
* clutter in .s and other internmediate code while debugging.
|
||||
*/
|
||||
#ifndef _OBJC_OBJECT1_IMPLEMENTATION_H_
|
||||
#define _OBJC_OBJECT1_IMPLEMENTATION_H_
|
||||
#ifdef DO_NEXT_M64_OBJECT_IMPLEMENTATION
|
||||
@implementation Object
|
||||
|
||||
+ initialize {
|
||||
return self;
|
||||
}
|
||||
- init {
|
||||
return self;
|
||||
}
|
||||
|
||||
+ class {
|
||||
return object_getClass(self);
|
||||
}
|
||||
|
||||
+ new {
|
||||
return [[self alloc] init];
|
||||
}
|
||||
|
||||
+ free {
|
||||
return nil;
|
||||
}
|
||||
|
||||
- free {
|
||||
return object_dispose(self);
|
||||
}
|
||||
|
||||
+ alloc {
|
||||
return class_createInstance(self, 0);
|
||||
}
|
||||
|
||||
|
||||
- class {
|
||||
return isa;
|
||||
}
|
||||
|
||||
|
||||
- superclass {
|
||||
return class_getSuperclass([self class]);
|
||||
}
|
||||
|
||||
- (const char *) name {
|
||||
return class_getName([self class]);
|
||||
}
|
||||
|
||||
-(BOOL)conformsTo:(Protocol *)protocol {
|
||||
Class cls;
|
||||
for (cls = [self class]; cls; cls = [cls superclass]) {
|
||||
if (class_conformsToProtocol(cls, protocol)) return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
#endif /* NEEDS_OBJECT_IMPLEMENTATION */
|
||||
#endif /* _OBJC_OBJECT1_IMPLEMENTATION_H_ */
|
1
gcc/testsuite/objc-obj-c++-shared/Object1.h
Executable file
1
gcc/testsuite/objc-obj-c++-shared/Object1.h
Executable file
@ -0,0 +1 @@
|
||||
/* Object definition taken from <objc/Object.h>
*/
#ifndef _OBJC_OBJECT1_H_
#define _OBJC_OBJECT1_H_
#undef DO_NEXT_M64_OBJECT_IMPLEMENTATION
#ifndef __NEXT_RUNTIME__
# include <objc/Object.h>
#else
# include "next-abi.h"
# ifndef NEXT_OBJC_USE_NEW_INTERFACE
/* We are on a next system, or version, that is happy to compile V0 ABI */
# include <objc/Object.h>
# else
# if (NEXT_OBJC_ABI_VERSION==0)
/* We are on a system that has V0 ABI implementation in libobjc.dylib.
* However, we need to use the new accessors and pretend that the
* structures are opaque to avoid 'deprecated' warnings
*/
# include <objc/Object.h>
# else
/* We are on a system that includes a V2 ABI Object in libobjc.dylib.
*/
# ifdef __OBJC2__
/* ... and we have a V2 ABI compiler .. */
# include <objc/Object.h>
# else
/* We can't access the Object definition in libobjc.dylib because
* we can't yet generate OBJC2 code.
*
* So we'll roll our own Object - purely for the sake of compile
* checks - the code is unlikely to run...
*/
# ifndef _OBJC_OBJECT_H_
# define _OBJC_OBJECT_H_
#include <stdarg.h>
#import <objc/objc-runtime.h>
/* This is a cut-down Object with only the methods currently required
by the testsuite declared.
For those executables that require an implementation (to link) this
can be provided in a given test by placing:
#include "path/to/objc-c++shared/Object1-implementation.h"
at the end of the source for the test.
*/
@interface Object
{
Class isa; /* A pointer to the instance's class structure */
}
+ initialize;
- init;
+ new;
+ free;
- free;
+ alloc;
//- copy;
//+ allocFromZone:(void *)zone;
//- copyFromZone:(void *)zone;
//- (void *)zone;
+ class;
//+ superclass;
//+ (const char *) name;
- class;
- superclass;
- (const char *) name;
//- self;
//- (unsigned int) hash;
//-(BOOL) isEqual:anObject;
/* Testing inheritance relationships */
//- (BOOL) isKindOf: aClassObject;
//- (BOOL) isMemberOf: aClassObject;
//- (BOOL) isKindOfClassNamed: (const char *)aClassName;
//- (BOOL) isMemberOfClassNamed: (const char *)aClassName;
/* Testing class functionality */
//+ (BOOL) instancesRespondTo:(SEL)aSelector;
//- (BOOL) respondsTo:(SEL)aSelector;
/* Testing protocol conformance */
- (BOOL) conformsTo: (Protocol *)aProtocolObject;
//+ (BOOL) conformsTo: (Protocol *)aProtocolObject;
/* Obtaining method descriptors from protocols */
//- (struct objc_method_description *) descriptionForMethod:(SEL)aSel;
//+ (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel;
/* Obtaining method handles */
//- (IMP) methodFor:(SEL)aSelector;
//+ (IMP) instanceMethodFor:(SEL)aSelector;
/* Sending messages determined at run time */
//- perform:(SEL)aSelector;
//- perform:(SEL)aSelector with:anObject;
//- perform:(SEL)aSelector with:object1 with:object2;
/* Posing */
//+ poseAs: aClassObject;
/* Enforcing intentions */
//- subclassResponsibility:(SEL)aSelector;
//- notImplemented:(SEL)aSelector;
/* Error handling */
//- doesNotRecognize:(SEL)aSelector;
//- error:(const char *)aString, ...;
/* Debugging */
//- (void) printForDebugger:(void *)stream;
/* Archiving */
//- awake;
//- write:(void *)stream;
//- read:(void *)stream;
//+ (int) version;
//+ setVersion: (int) aVersion;
/* Forwarding */
//- forward: (SEL)sel : (marg_list)args;
//- performv: (SEL)sel : (marg_list)args;
@end
#define DO_NEXT_M64_OBJECT_IMPLEMENTATION
# endif /* _OBJC_OBJECT_H_ */
# endif /* __OBJC2__ */
# endif /* ABI=0 */
# endif /* NEXT_OBJC_USE_NEW_INTERFACE */
# endif /* __NEXT_RUNTIME__ */
#endif /* _OBJC_OBJECT1_H_ */
|
52
gcc/testsuite/objc-obj-c++-shared/Protocol1.h
Executable file
52
gcc/testsuite/objc-obj-c++-shared/Protocol1.h
Executable file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Temporary work-around to avoid the need for method attributes in
|
||||
* the NeXT Runtime Protocol header.
|
||||
*/
|
||||
#ifndef _OBJC_PROTOCOL1_H_
|
||||
#define _OBJC_PROTOCOL1_H_
|
||||
|
||||
# ifndef __NEXT_RUNTIME__
|
||||
# include <objc/Protocol.h>
|
||||
# else
|
||||
# include "next-abi.h"
|
||||
# ifndef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
/* We are on a NeXT version without method __attributes__ */
|
||||
# import <objc/Protocol.h>
|
||||
# else
|
||||
/* We make our own interface without the deprecation messages
|
||||
* This is essentially <objc/Protocol.h> without the OBJC2
|
||||
* flags.
|
||||
*
|
||||
*/
|
||||
# ifndef _OBJC_PROTOCOL_H_
|
||||
# define _OBJC_PROTOCOL_H_
|
||||
# import "Object1.h"
|
||||
|
||||
@interface Protocol : Object
|
||||
{
|
||||
@private
|
||||
char *protocol_name ;
|
||||
struct objc_protocol_list *protocol_list ;
|
||||
struct objc_method_description_list *instance_methods ;
|
||||
struct objc_method_description_list *class_methods ;
|
||||
}
|
||||
|
||||
/* Obtaining attributes intrinsic to the protocol */
|
||||
#if (NEXT_OBJC_ABI_VERSION==0)
|
||||
- (const char *)name ; /* Not avail in v2, deprecated in prior */
|
||||
/* Testing protocol conformance */
|
||||
- (BOOL) conformsTo: (Protocol *)aProtocolObject ; /* Not avail in v2 */
|
||||
#endif
|
||||
|
||||
/* Looking up information specific to a protocol */
|
||||
/* Deprecated, but available */
|
||||
|
||||
- (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel ;
|
||||
- (struct objc_method_description *) descriptionForClassMethod:(SEL)aSel ;
|
||||
|
||||
@end
|
||||
|
||||
# endif /* __NEXT_RUNTIME__ */
|
||||
# endif /* _OBJC_PROTOCOL_H_ */
|
||||
# endif /* NEXT_OBJC_ABI_VERSION */
|
||||
#endif /* _OBJC_PROTOCOL1_H_ */
|
42
gcc/testsuite/objc-obj-c++-shared/next-abi.h
Executable file
42
gcc/testsuite/objc-obj-c++-shared/next-abi.h
Executable file
@ -0,0 +1,42 @@
|
||||
|
||||
#ifndef _OBJC_NEXT_ABI_H_
|
||||
#define _OBJC_NEXT_ABI_H_
|
||||
/* Produce a define that allows us to figure out what facilities are
|
||||
available for this gcc and OS combination.
|
||||
*/
|
||||
|
||||
/* By default we do nothing - therefore ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
* is reliable for detecting
|
||||
* (a) versions of the compiler that are transitional to the new next ABI
|
||||
* (b) versions of the target that require the new ABI.
|
||||
*
|
||||
* This applies for versions of OSX >= 10.5 (darwin9).
|
||||
*
|
||||
* A compiler capable of producing ObjC V2 ABI should define __OBJC2__
|
||||
*/
|
||||
|
||||
#undef NEXT_OBJC_ABI_VERSION
|
||||
#undef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
# if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 || __OBJC2__)
|
||||
/* We have to use an updated interface for 32bit NeXT to avoid
|
||||
* 'deprecated' warnings.
|
||||
* For 64bit NeXT the ABI is different (and the interfaces 'deprecated'
|
||||
* for 32bit have been removed).
|
||||
*/
|
||||
# define NEXT_OBJC_USE_NEW_INTERFACE 1
|
||||
# if __OBJC2__ || __LP64__
|
||||
/* We have OBJC v2 ABI compiler,
|
||||
(or, at least, the available NeXT runtime requires one) */
|
||||
# define NEXT_OBJC_ABI_VERSION 2
|
||||
# else
|
||||
/* We leave it open to define ABI 1 if and when we implement those
|
||||
* extensions.
|
||||
*/
|
||||
# define NEXT_OBJC_ABI_VERSION 0
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* _OBJC_NEXT_ABI_H_ */
|
976
gcc/testsuite/objc-obj-c++-shared/next-mapping.h
Executable file
976
gcc/testsuite/objc-obj-c++-shared/next-mapping.h
Executable file
@ -0,0 +1,976 @@
|
||||
/* This file "renames" various ObjC GNU runtime entry points
|
||||
(and fakes the existence of several others)
|
||||
if the NeXT runtime is being used. */
|
||||
/* Authors: Ziemowit Laski <zlaski@apple.com> */
|
||||
/* David Ayers <d.ayers@inode.at> */
|
||||
/* Darwin 64bit/OBJC2 modifications Iain Sandoe */
|
||||
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
/* Includes next-abi.h to set NEXT_OBJC_USE_NEW_INTERFACE etc.*/
|
||||
#ifndef _OBJC_OBJECT1_H_
|
||||
#include "Object1.h"
|
||||
#endif
|
||||
#include <objc/objc-class.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define objc_get_class(C) objc_getClass(C)
|
||||
#define objc_get_meta_class(C) objc_getMetaClass(C)
|
||||
#define class_get_class_method(C, S) class_getClassMethod(C, S)
|
||||
#define class_get_instance_method(C, S) class_getInstanceMethod(C, S)
|
||||
#define sel_get_name(S) sel_getName(S)
|
||||
#define class_create_instance(C) class_createInstance(C, 0)
|
||||
#define class_get_class_name(C) object_getClassName(C)
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
# define object_class_name(O) (object_getClassName(O))
|
||||
# define object_get_class(O) (object_getClass((id)O))
|
||||
# define object_get_super_class(O) class_get_super_class(object_get_class(O))
|
||||
# define object_is_class(O) class_is_meta_class(object_get_class(O))
|
||||
# define object_is_meta_class(O) (object_is_class(O) && class_is_meta_class(O) \
|
||||
&& class_is_meta_class(object_get_class(O)))
|
||||
|
||||
# define method_get_imp(M) (method_getImplementation((Method)M))
|
||||
# define method_get_types(M) (method_getTypeEncoding((Method)M))
|
||||
|
||||
# define class_get_super_class(C) (class_getSuperclass((Class)C))
|
||||
# define class_is_meta_class(C) (class_isMetaClass((Class)C) ? YES: NO)
|
||||
# define class_is_class(C) (class_is_meta_class(C) == NO)
|
||||
|
||||
#else
|
||||
# define object_class_name(O) (O->name)
|
||||
# define object_get_super_class(O) class_get_super_class(*(struct objc_class **)O)
|
||||
# define object_get_class(O) (*(struct objc_class **)O)
|
||||
# define object_is_class(O) class_is_meta_class(*(struct objc_class **)O)
|
||||
# define object_is_meta_class(O) (class_is_meta_class(O) && class_is_meta_class(*(struct objc_class **)O))
|
||||
|
||||
# define method_get_imp(M) (((Method)M)->method_imp)
|
||||
# define method_get_types(M) (((Method)M)->method_types)
|
||||
|
||||
# define class_get_super_class(C) (((struct objc_class *)C)->super_class)
|
||||
# define class_is_meta_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_META)? YES: NO)
|
||||
# define class_is_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_CLASS)? YES: NO)
|
||||
#endif
|
||||
|
||||
#define objc_lookup_class(N) objc_lookUpClass(N)
|
||||
|
||||
/* You need either an empty +initialize method or an empty -forward:: method.
|
||||
The NeXT runtime unconditionally sends +initialize to classes when they are
|
||||
first used, and unconditionally tries to forward methods that the class
|
||||
doesn't understand (including +initialize). If you have neither +initialize
|
||||
nor -forward::, the runtime complains.
|
||||
|
||||
The simplest workaround is to add
|
||||
|
||||
+ initialize { return self; }
|
||||
|
||||
to every root class @implementation. */
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
/* The following is necessary to "cover" the bf*.m test cases on NeXT. */
|
||||
|
||||
#undef MAX
|
||||
#undef MIN
|
||||
#undef ROUND
|
||||
|
||||
#ifdef __cplusplus
|
||||
# define MAX(X, Y) ((X > Y) ? X : Y)
|
||||
# define MIN(X, Y) ((X < Y) ? X : Y)
|
||||
# define ROUND(V, A) (A * ((V + A - 1) / A))
|
||||
#else
|
||||
# define MAX(X, Y) \
|
||||
({ typeof (X) __x = (X), __y = (Y); \
|
||||
(__x > __y ? __x : __y); })
|
||||
# define MIN(X, Y) \
|
||||
({ typeof (X) __x = (X), __y = (Y); \
|
||||
(__x < __y ? __x : __y); })
|
||||
# define ROUND(V, A) \
|
||||
({ typeof (V) __v = (V); typeof (A) __a = (A); \
|
||||
__a * ((__v+__a - 1)/__a); })
|
||||
#endif
|
||||
|
||||
#define BITS_PER_UNIT __CHAR_BIT__
|
||||
typedef struct{ char a; } __small_struct;
|
||||
#define STRUCTURE_SIZE_BOUNDARY (BITS_PER_UNIT * sizeof (__small_struct))
|
||||
|
||||
/* Not sure why the following are missing from NeXT objc headers... */
|
||||
|
||||
#ifndef _C_LNG_LNG
|
||||
#define _C_LNG_LNG 'q'
|
||||
#endif
|
||||
#ifndef _C_ULNG_LNG
|
||||
#define _C_ULNG_LNG 'Q'
|
||||
#endif
|
||||
#ifndef _C_ATOM
|
||||
#define _C_ATOM '%'
|
||||
#endif
|
||||
#ifndef _C_BOOL
|
||||
#define _C_BOOL 'B'
|
||||
#endif
|
||||
|
||||
#define _C_CONST 'r'
|
||||
#define _C_IN 'n'
|
||||
#define _C_INOUT 'N'
|
||||
#define _C_OUT 'o'
|
||||
#define _C_BYCOPY 'O'
|
||||
#define _C_BYREF 'R'
|
||||
#define _C_ONEWAY 'V'
|
||||
#define _C_GCINVISIBLE '!'
|
||||
|
||||
#define _F_CONST 0x01
|
||||
#define _F_IN 0x01
|
||||
#define _F_OUT 0x02
|
||||
#define _F_INOUT 0x03
|
||||
#define _F_BYCOPY 0x04
|
||||
#define _F_BYREF 0x08
|
||||
#define _F_ONEWAY 0x10
|
||||
#define _F_GCINVISIBLE 0x20
|
||||
|
||||
struct objc_struct_layout
|
||||
{
|
||||
const char *original_type;
|
||||
const char *type;
|
||||
const char *prev_type;
|
||||
unsigned int record_size;
|
||||
unsigned int record_align;
|
||||
};
|
||||
|
||||
typedef union arglist {
|
||||
char *arg_ptr;
|
||||
char arg_regs[sizeof (char*)];
|
||||
} *arglist_t; /* argument frame */
|
||||
|
||||
const char *objc_skip_typespec (const char *type);
|
||||
void objc_layout_structure_get_info (struct objc_struct_layout *layout,
|
||||
unsigned int *offset, unsigned int *align, const char **type);
|
||||
void objc_layout_structure (const char *type,
|
||||
struct objc_struct_layout *layout);
|
||||
BOOL objc_layout_structure_next_member (struct objc_struct_layout *layout);
|
||||
void objc_layout_finish_structure (struct objc_struct_layout *layout,
|
||||
unsigned int *size, unsigned int *align);
|
||||
int objc_aligned_size (const char *type);
|
||||
|
||||
/*
|
||||
return the size of an object specified by type
|
||||
*/
|
||||
|
||||
int
|
||||
objc_sizeof_type (const char *type)
|
||||
{
|
||||
/* Skip the variable name if any */
|
||||
if (*type == '"')
|
||||
{
|
||||
for (type++; *type++ != '"';)
|
||||
/* do nothing */;
|
||||
}
|
||||
|
||||
switch (*type) {
|
||||
case _C_ID:
|
||||
return sizeof (id);
|
||||
break;
|
||||
|
||||
case _C_CLASS:
|
||||
return sizeof (Class);
|
||||
break;
|
||||
|
||||
case _C_SEL:
|
||||
return sizeof (SEL);
|
||||
break;
|
||||
|
||||
case _C_CHR:
|
||||
return sizeof (char);
|
||||
break;
|
||||
|
||||
case _C_UCHR:
|
||||
return sizeof (unsigned char);
|
||||
break;
|
||||
|
||||
case _C_SHT:
|
||||
return sizeof (short);
|
||||
break;
|
||||
|
||||
case _C_USHT:
|
||||
return sizeof (unsigned short);
|
||||
break;
|
||||
|
||||
case _C_INT:
|
||||
return sizeof (int);
|
||||
break;
|
||||
|
||||
case _C_UINT:
|
||||
return sizeof (unsigned int);
|
||||
break;
|
||||
|
||||
case _C_LNG:
|
||||
return sizeof (long);
|
||||
break;
|
||||
|
||||
case _C_ULNG:
|
||||
return sizeof (unsigned long);
|
||||
break;
|
||||
|
||||
case _C_LNG_LNG:
|
||||
return sizeof (long long);
|
||||
break;
|
||||
|
||||
case _C_ULNG_LNG:
|
||||
return sizeof (unsigned long long);
|
||||
break;
|
||||
|
||||
case _C_FLT:
|
||||
return sizeof (float);
|
||||
break;
|
||||
|
||||
case _C_DBL:
|
||||
return sizeof (double);
|
||||
break;
|
||||
|
||||
case _C_PTR:
|
||||
case _C_ATOM:
|
||||
case _C_CHARPTR:
|
||||
return sizeof (char *);
|
||||
break;
|
||||
|
||||
case _C_ARY_B:
|
||||
{
|
||||
int len = atoi (type + 1);
|
||||
while (isdigit ((unsigned char)*++type))
|
||||
;
|
||||
return len * objc_aligned_size (type);
|
||||
}
|
||||
break;
|
||||
|
||||
case _C_BFLD:
|
||||
{
|
||||
/* The NeXT encoding of bitfields is _still_: b 'size' */
|
||||
int size = atoi (type + 1);
|
||||
/* Return an upper bound on byte size */
|
||||
return (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
|
||||
}
|
||||
|
||||
case _C_STRUCT_B:
|
||||
{
|
||||
struct objc_struct_layout layout;
|
||||
unsigned int size;
|
||||
|
||||
objc_layout_structure (type, &layout);
|
||||
while (objc_layout_structure_next_member (&layout))
|
||||
/* do nothing */ ;
|
||||
objc_layout_finish_structure (&layout, &size, NULL);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
case _C_UNION_B:
|
||||
{
|
||||
int max_size = 0;
|
||||
while (*type != _C_UNION_E && *type++ != '=')
|
||||
/* do nothing */;
|
||||
while (*type != _C_UNION_E)
|
||||
{
|
||||
/* Skip the variable name if any */
|
||||
if (*type == '"')
|
||||
{
|
||||
for (type++; *type++ != '"';)
|
||||
/* do nothing */;
|
||||
}
|
||||
max_size = MAX (max_size, objc_sizeof_type (type));
|
||||
type = objc_skip_typespec (type);
|
||||
}
|
||||
return max_size;
|
||||
}
|
||||
}
|
||||
return 0; /* error */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Return the alignment of an object specified by type
|
||||
*/
|
||||
|
||||
int
|
||||
objc_alignof_type (const char *type)
|
||||
{
|
||||
/* Skip the variable name if any */
|
||||
if (*type == '"')
|
||||
{
|
||||
for (type++; *type++ != '"';)
|
||||
/* do nothing */;
|
||||
}
|
||||
switch (*type) {
|
||||
case _C_ID:
|
||||
return __alignof__ (id);
|
||||
break;
|
||||
|
||||
case _C_CLASS:
|
||||
return __alignof__ (Class);
|
||||
break;
|
||||
|
||||
case _C_SEL:
|
||||
return __alignof__ (SEL);
|
||||
break;
|
||||
|
||||
case _C_CHR:
|
||||
return __alignof__ (char);
|
||||
break;
|
||||
|
||||
case _C_UCHR:
|
||||
return __alignof__ (unsigned char);
|
||||
break;
|
||||
|
||||
case _C_SHT:
|
||||
return __alignof__ (short);
|
||||
break;
|
||||
|
||||
case _C_USHT:
|
||||
return __alignof__ (unsigned short);
|
||||
break;
|
||||
|
||||
case _C_INT:
|
||||
case _C_BFLD: /* This is for the NeXT only */
|
||||
return __alignof__ (int);
|
||||
break;
|
||||
|
||||
case _C_UINT:
|
||||
return __alignof__ (unsigned int);
|
||||
break;
|
||||
|
||||
case _C_LNG:
|
||||
return __alignof__ (long);
|
||||
break;
|
||||
|
||||
case _C_ULNG:
|
||||
return __alignof__ (unsigned long);
|
||||
break;
|
||||
|
||||
case _C_LNG_LNG:
|
||||
return __alignof__ (long long);
|
||||
break;
|
||||
|
||||
case _C_ULNG_LNG:
|
||||
return __alignof__ (unsigned long long);
|
||||
break;
|
||||
|
||||
case _C_FLT:
|
||||
return __alignof__ (float);
|
||||
break;
|
||||
|
||||
case _C_DBL:
|
||||
return __alignof__ (double);
|
||||
break;
|
||||
|
||||
case _C_PTR:
|
||||
case _C_ATOM:
|
||||
case _C_CHARPTR:
|
||||
return __alignof__ (char *);
|
||||
break;
|
||||
|
||||
case _C_ARY_B:
|
||||
while (isdigit ((unsigned char)*++type))
|
||||
/* do nothing */;
|
||||
return objc_alignof_type (type);
|
||||
|
||||
case _C_STRUCT_B:
|
||||
{
|
||||
struct objc_struct_layout layout;
|
||||
unsigned int align;
|
||||
|
||||
objc_layout_structure (type, &layout);
|
||||
while (objc_layout_structure_next_member (&layout))
|
||||
/* do nothing */;
|
||||
objc_layout_finish_structure (&layout, NULL, &align);
|
||||
|
||||
return align;
|
||||
}
|
||||
|
||||
case _C_UNION_B:
|
||||
{
|
||||
int maxalign = 0;
|
||||
while (*type != _C_UNION_E && *type++ != '=')
|
||||
/* do nothing */;
|
||||
while (*type != _C_UNION_E)
|
||||
{
|
||||
/* Skip the variable name if any */
|
||||
if (*type == '"')
|
||||
{
|
||||
for (type++; *type++ != '"';)
|
||||
/* do nothing */;
|
||||
}
|
||||
maxalign = MAX (maxalign, objc_alignof_type (type));
|
||||
type = objc_skip_typespec (type);
|
||||
}
|
||||
return maxalign;
|
||||
}
|
||||
}
|
||||
return 0; /* error */
|
||||
}
|
||||
|
||||
/*
|
||||
The aligned size if the size rounded up to the nearest alignment.
|
||||
*/
|
||||
|
||||
int
|
||||
objc_aligned_size (const char *type)
|
||||
{
|
||||
int size, align;
|
||||
|
||||
/* Skip the variable name */
|
||||
if (*type == '"')
|
||||
{
|
||||
for (type++; *type++ != '"';)
|
||||
/* do nothing */;
|
||||
}
|
||||
|
||||
size = objc_sizeof_type (type);
|
||||
align = objc_alignof_type (type);
|
||||
|
||||
return ROUND (size, align);
|
||||
}
|
||||
|
||||
/*
|
||||
The size rounded up to the nearest integral of the wordsize, taken
|
||||
to be the size of a void *.
|
||||
*/
|
||||
|
||||
int
|
||||
objc_promoted_size (const char *type)
|
||||
{
|
||||
int size, wordsize;
|
||||
|
||||
/* Skip the variable name */
|
||||
if (*type == '"')
|
||||
{
|
||||
for (type++; *type++ != '"';)
|
||||
/* do nothing */;
|
||||
}
|
||||
|
||||
size = objc_sizeof_type (type);
|
||||
wordsize = sizeof (void *);
|
||||
|
||||
return ROUND (size, wordsize);
|
||||
}
|
||||
|
||||
/*
|
||||
Skip type qualifiers. These may eventually precede typespecs
|
||||
occurring in method prototype encodings.
|
||||
*/
|
||||
|
||||
inline const char *
|
||||
objc_skip_type_qualifiers (const char *type)
|
||||
{
|
||||
while (*type == _C_CONST
|
||||
|| *type == _C_IN
|
||||
|| *type == _C_INOUT
|
||||
|| *type == _C_OUT
|
||||
|| *type == _C_BYCOPY
|
||||
|| *type == _C_BYREF
|
||||
|| *type == _C_ONEWAY
|
||||
|| *type == _C_GCINVISIBLE)
|
||||
{
|
||||
type += 1;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Skip one typespec element. If the typespec is prepended by type
|
||||
qualifiers, these are skipped as well.
|
||||
*/
|
||||
|
||||
const char *
|
||||
objc_skip_typespec (const char *type)
|
||||
{
|
||||
/* Skip the variable name if any */
|
||||
if (*type == '"')
|
||||
{
|
||||
for (type++; *type++ != '"';)
|
||||
/* do nothing */;
|
||||
}
|
||||
|
||||
type = objc_skip_type_qualifiers (type);
|
||||
|
||||
switch (*type) {
|
||||
|
||||
case _C_ID:
|
||||
/* An id may be annotated by the actual type if it is known
|
||||
with the @"ClassName" syntax */
|
||||
|
||||
if (*++type != '"')
|
||||
return type;
|
||||
else
|
||||
{
|
||||
while (*++type != '"')
|
||||
/* do nothing */;
|
||||
return type + 1;
|
||||
}
|
||||
|
||||
/* The following are one character type codes */
|
||||
case _C_CLASS:
|
||||
case _C_SEL:
|
||||
case _C_CHR:
|
||||
case _C_UCHR:
|
||||
case _C_CHARPTR:
|
||||
case _C_ATOM:
|
||||
case _C_SHT:
|
||||
case _C_USHT:
|
||||
case _C_INT:
|
||||
case _C_UINT:
|
||||
case _C_LNG:
|
||||
case _C_ULNG:
|
||||
case _C_LNG_LNG:
|
||||
case _C_ULNG_LNG:
|
||||
case _C_FLT:
|
||||
case _C_DBL:
|
||||
case _C_VOID:
|
||||
case _C_UNDEF:
|
||||
return ++type;
|
||||
break;
|
||||
|
||||
case _C_ARY_B:
|
||||
/* skip digits, typespec and closing ']' */
|
||||
|
||||
while (isdigit ((unsigned char)*++type))
|
||||
;
|
||||
type = objc_skip_typespec (type);
|
||||
if (*type == _C_ARY_E)
|
||||
return ++type;
|
||||
else
|
||||
break; /* error */
|
||||
|
||||
case _C_BFLD:
|
||||
/* The NeXT encoding for bitfields is _still_: b 'size' */
|
||||
while (isdigit ((unsigned char)*++type))
|
||||
; /* skip type and size */
|
||||
return type;
|
||||
|
||||
case _C_STRUCT_B:
|
||||
/* skip name, and elements until closing '}' */
|
||||
|
||||
while (*type != _C_STRUCT_E && *type++ != '=')
|
||||
;
|
||||
while (*type != _C_STRUCT_E)
|
||||
{
|
||||
type = objc_skip_typespec (type);
|
||||
}
|
||||
return ++type;
|
||||
|
||||
case _C_UNION_B:
|
||||
/* skip name, and elements until closing ')' */
|
||||
|
||||
while (*type != _C_UNION_E && *type++ != '=')
|
||||
;
|
||||
while (*type != _C_UNION_E)
|
||||
{
|
||||
type = objc_skip_typespec (type);
|
||||
}
|
||||
return ++type;
|
||||
|
||||
case _C_PTR:
|
||||
/* Just skip the following typespec */
|
||||
|
||||
return objc_skip_typespec (++type);
|
||||
}
|
||||
return 0; /* error */
|
||||
}
|
||||
|
||||
/*
|
||||
Skip an offset as part of a method encoding. This is prepended by a
|
||||
'+' if the argument is passed in registers.
|
||||
*/
|
||||
inline const char *
|
||||
objc_skip_offset (const char *type)
|
||||
{
|
||||
if (*type == '+')
|
||||
type++;
|
||||
while (isdigit ((unsigned char) *++type))
|
||||
;
|
||||
return type;
|
||||
}
|
||||
|
||||
/*
|
||||
Skip an argument specification of a method encoding.
|
||||
*/
|
||||
const char *
|
||||
objc_skip_argspec (const char *type)
|
||||
{
|
||||
type = objc_skip_typespec (type);
|
||||
type = objc_skip_offset (type);
|
||||
return type;
|
||||
}
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
typedef void *PMETH;
|
||||
#else
|
||||
typedef struct objc_method *PMETH;
|
||||
#endif
|
||||
|
||||
/*
|
||||
Return the number of arguments that the method MTH expects.
|
||||
Note that all methods need two implicit arguments `self' and
|
||||
`_cmd'.
|
||||
*/
|
||||
int
|
||||
method_get_number_of_arguments (PMETH mth)
|
||||
{
|
||||
int i = 0;
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
const char *type = method_getTypeEncoding((Method)mth);
|
||||
#else
|
||||
const char *type = mth->method_types;
|
||||
#endif
|
||||
while (*type)
|
||||
{
|
||||
type = objc_skip_argspec (type);
|
||||
i += 1;
|
||||
}
|
||||
return i - 1;
|
||||
}
|
||||
|
||||
/*
|
||||
Return the size of the argument block needed on the stack to invoke
|
||||
the method MTH. This may be zero, if all arguments are passed in
|
||||
registers.
|
||||
*/
|
||||
|
||||
int
|
||||
method_get_sizeof_arguments (PMETH mth)
|
||||
{
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
const char *type = objc_skip_typespec (method_getTypeEncoding((Method)mth));
|
||||
#else
|
||||
const char *type = objc_skip_typespec (mth->method_types);
|
||||
#endif
|
||||
return atoi (type);
|
||||
}
|
||||
|
||||
/*
|
||||
Return a pointer to the next argument of ARGFRAME. type points to
|
||||
the last argument. Typical use of this look like:
|
||||
|
||||
{
|
||||
char *datum, *type;
|
||||
for (datum = method_get_first_argument (method, argframe, &type);
|
||||
datum; datum = method_get_next_argument (argframe, &type))
|
||||
{
|
||||
unsigned flags = objc_get_type_qualifiers (type);
|
||||
type = objc_skip_type_qualifiers (type);
|
||||
if (*type != _C_PTR)
|
||||
[portal encodeData: datum ofType: type];
|
||||
else
|
||||
{
|
||||
if ((flags & _F_IN) == _F_IN)
|
||||
[portal encodeData: *(char **) datum ofType: ++type];
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
char *
|
||||
method_get_next_argument (arglist_t argframe, const char **type)
|
||||
{
|
||||
const char *t = objc_skip_argspec (*type);
|
||||
|
||||
if (*t == '\0')
|
||||
return 0;
|
||||
|
||||
*type = t;
|
||||
t = objc_skip_typespec (t);
|
||||
|
||||
if (*t == '+')
|
||||
return argframe->arg_regs + atoi (++t);
|
||||
else
|
||||
return argframe->arg_ptr + atoi (t);
|
||||
}
|
||||
|
||||
/*
|
||||
Return a pointer to the value of the first argument of the method
|
||||
described in M with the given argumentframe ARGFRAME. The type
|
||||
is returned in TYPE. type must be passed to successive calls of
|
||||
method_get_next_argument.
|
||||
*/
|
||||
char *
|
||||
method_get_first_argument (PMETH m,
|
||||
arglist_t argframe,
|
||||
const char **type)
|
||||
{
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
*type = method_getTypeEncoding((Method)m);
|
||||
#else
|
||||
*type = m->method_types;
|
||||
#endif
|
||||
|
||||
return method_get_next_argument (argframe, type);
|
||||
}
|
||||
|
||||
/*
|
||||
Return a pointer to the ARGth argument of the method
|
||||
M from the frame ARGFRAME. The type of the argument
|
||||
is returned in the value-result argument TYPE
|
||||
*/
|
||||
|
||||
char *
|
||||
method_get_nth_argument (PMETH m,
|
||||
arglist_t argframe, int arg,
|
||||
const char **type)
|
||||
{
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
const char *t = objc_skip_argspec (method_getTypeEncoding((Method)m));
|
||||
#else
|
||||
const char *t = objc_skip_argspec (m->method_types);
|
||||
#endif
|
||||
|
||||
if (arg > method_get_number_of_arguments (m))
|
||||
return 0;
|
||||
|
||||
while (arg--)
|
||||
t = objc_skip_argspec (t);
|
||||
|
||||
*type = t;
|
||||
t = objc_skip_typespec (t);
|
||||
|
||||
if (*t == '+')
|
||||
return argframe->arg_regs + atoi (++t);
|
||||
else
|
||||
return argframe->arg_ptr + atoi (t);
|
||||
}
|
||||
|
||||
unsigned
|
||||
objc_get_type_qualifiers (const char *type)
|
||||
{
|
||||
unsigned res = 0;
|
||||
BOOL flag = YES;
|
||||
|
||||
while (flag)
|
||||
switch (*type++)
|
||||
{
|
||||
case _C_CONST: res |= _F_CONST; break;
|
||||
case _C_IN: res |= _F_IN; break;
|
||||
case _C_INOUT: res |= _F_INOUT; break;
|
||||
case _C_OUT: res |= _F_OUT; break;
|
||||
case _C_BYCOPY: res |= _F_BYCOPY; break;
|
||||
case _C_BYREF: res |= _F_BYREF; break;
|
||||
case _C_ONEWAY: res |= _F_ONEWAY; break;
|
||||
case _C_GCINVISIBLE: res |= _F_GCINVISIBLE; break;
|
||||
default: flag = NO;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/* The following three functions can be used to determine how a
|
||||
structure is laid out by the compiler. For example:
|
||||
|
||||
struct objc_struct_layout layout;
|
||||
int i;
|
||||
|
||||
objc_layout_structure (type, &layout);
|
||||
while (objc_layout_structure_next_member (&layout))
|
||||
{
|
||||
int position, align;
|
||||
const char *type;
|
||||
|
||||
objc_layout_structure_get_info (&layout, &position, &align, &type);
|
||||
printf ("element %d has offset %d, alignment %d\n",
|
||||
i++, position, align);
|
||||
}
|
||||
|
||||
These functions are used by objc_sizeof_type and objc_alignof_type
|
||||
functions to compute the size and alignment of structures. The
|
||||
previous method of computing the size and alignment of a structure
|
||||
was not working on some architectures, particulary on AIX, and in
|
||||
the presence of bitfields inside the structure. */
|
||||
void
|
||||
objc_layout_structure (const char *type,
|
||||
struct objc_struct_layout *layout)
|
||||
{
|
||||
const char *ntype;
|
||||
|
||||
layout->original_type = ++type;
|
||||
|
||||
/* Skip "<name>=" if any. Avoid embedded structures and unions. */
|
||||
ntype = type;
|
||||
while (*ntype != _C_STRUCT_E && *ntype != _C_STRUCT_B && *ntype != _C_UNION_B
|
||||
&& *ntype++ != '=')
|
||||
/* do nothing */;
|
||||
|
||||
/* If there's a "<name>=", ntype - 1 points to '='; skip the the name */
|
||||
if (*(ntype - 1) == '=')
|
||||
type = ntype;
|
||||
|
||||
layout->type = type;
|
||||
layout->prev_type = NULL;
|
||||
layout->record_size = 0;
|
||||
layout->record_align = MAX (BITS_PER_UNIT, STRUCTURE_SIZE_BOUNDARY);
|
||||
}
|
||||
|
||||
|
||||
BOOL
|
||||
objc_layout_structure_next_member (struct objc_struct_layout *layout)
|
||||
{
|
||||
register int desired_align = 0;
|
||||
|
||||
/* The current type without the type qualifiers */
|
||||
const char *type;
|
||||
|
||||
/* Add the size of the previous field to the size of the record. */
|
||||
if (layout->prev_type)
|
||||
{
|
||||
type = objc_skip_type_qualifiers (layout->prev_type);
|
||||
|
||||
if (*type != _C_BFLD)
|
||||
layout->record_size += objc_sizeof_type (type) * BITS_PER_UNIT;
|
||||
else
|
||||
layout->record_size += atoi (++type);
|
||||
}
|
||||
|
||||
if (*layout->type == _C_STRUCT_E)
|
||||
return NO;
|
||||
|
||||
/* Skip the variable name if any */
|
||||
if (*layout->type == '"')
|
||||
{
|
||||
for (layout->type++; *layout->type++ != '"';)
|
||||
/* do nothing */;
|
||||
}
|
||||
|
||||
type = objc_skip_type_qualifiers (layout->type);
|
||||
|
||||
desired_align = objc_alignof_type (type) * BITS_PER_UNIT;
|
||||
|
||||
/* Record must have at least as much alignment as any field.
|
||||
Otherwise, the alignment of the field within the record
|
||||
is meaningless. */
|
||||
layout->record_align = MAX (layout->record_align, desired_align);
|
||||
|
||||
if (*type == _C_BFLD)
|
||||
{
|
||||
int bfld_size = atoi (++type);
|
||||
int int_align = __alignof__ (int) * BITS_PER_UNIT;
|
||||
/* If this bitfield would traverse a word alignment boundary, push it out
|
||||
to that boundary instead. */
|
||||
if (layout->record_size % int_align
|
||||
&& (layout->record_size / int_align
|
||||
< (layout->record_size + bfld_size - 1) / int_align))
|
||||
layout->record_size = ROUND (layout->record_size, int_align);
|
||||
}
|
||||
else if (layout->record_size % desired_align != 0)
|
||||
{
|
||||
/* We need to skip space before this field.
|
||||
Bump the cumulative size to multiple of field alignment. */
|
||||
layout->record_size = ROUND (layout->record_size, desired_align);
|
||||
}
|
||||
|
||||
/* Jump to the next field in record. */
|
||||
|
||||
layout->prev_type = layout->type;
|
||||
layout->type = objc_skip_typespec (layout->type); /* skip component */
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
void objc_layout_finish_structure (struct objc_struct_layout *layout,
|
||||
unsigned int *size,
|
||||
unsigned int *align)
|
||||
{
|
||||
if (layout->type && *layout->type == _C_STRUCT_E)
|
||||
{
|
||||
/* Round the size up to be a multiple of the required alignment */
|
||||
layout->record_size = ROUND (layout->record_size, layout->record_align);
|
||||
layout->type = NULL;
|
||||
}
|
||||
if (size)
|
||||
*size = layout->record_size / BITS_PER_UNIT;
|
||||
if (align)
|
||||
*align = layout->record_align / BITS_PER_UNIT;
|
||||
}
|
||||
|
||||
|
||||
void objc_layout_structure_get_info (struct objc_struct_layout *layout,
|
||||
unsigned int *offset,
|
||||
unsigned int *align,
|
||||
const char **type)
|
||||
{
|
||||
if (offset)
|
||||
*offset = layout->record_size / BITS_PER_UNIT;
|
||||
if (align)
|
||||
*align = layout->record_align / BITS_PER_UNIT;
|
||||
if (type)
|
||||
*type = layout->prev_type;
|
||||
}
|
||||
|
||||
/* A small, portable NSConstantString implementation for use with the NeXT
|
||||
runtime.
|
||||
|
||||
On full-fledged Mac OS X systems, NSConstantString is provided
|
||||
as part of the Foundation framework. However, on bare Darwin systems,
|
||||
Foundation is not included, and hence there is no NSConstantString
|
||||
implementation to link against.
|
||||
|
||||
This code is derived from the GNU runtime's NXConstantString implementation.
|
||||
*/
|
||||
|
||||
/* This definition cut out of <objc/Object.h> with the OBJC2 deprecation
|
||||
messages removed.
|
||||
*/
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
struct fudge_objc_class {
|
||||
Class isa;
|
||||
#if NEXT_OBJC_ABI_VERSION < 2
|
||||
Class super_class ;
|
||||
const char *name ;
|
||||
long version ;
|
||||
long info ;
|
||||
long instance_size ;
|
||||
struct anon *ivars ; /* objc_ivar_list */
|
||||
struct anon1 **methodLists ; /* objc_method_list */
|
||||
struct objc_cache *cache ;
|
||||
struct objc_protocol_list *protocols ;
|
||||
#endif
|
||||
} _NSConstantStringClassReference ;
|
||||
#else
|
||||
struct objc_class _NSConstantStringClassReference ;
|
||||
#endif
|
||||
|
||||
@interface NSConstantString : Object
|
||||
{
|
||||
char *c_string;
|
||||
unsigned int len;
|
||||
}
|
||||
|
||||
-(const char *) cString;
|
||||
-(unsigned int) length;
|
||||
|
||||
@end
|
||||
|
||||
@implementation NSConstantString
|
||||
|
||||
-(const char *) cString
|
||||
{
|
||||
return (c_string);
|
||||
}
|
||||
|
||||
-(unsigned int) length
|
||||
{
|
||||
return (len);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
/* The NSConstantString metaclass will need to be initialized before we can
|
||||
send messages to strings. */
|
||||
|
||||
void objc_constant_string_init (void) __attribute__((constructor));
|
||||
void objc_constant_string_init (void) {
|
||||
memcpy (&_NSConstantStringClassReference,
|
||||
objc_getClass ("NSConstantString"),
|
||||
sizeof (_NSConstantStringClassReference));
|
||||
}
|
||||
|
||||
#endif /* #ifdef __NEXT_RUNTIME__ */
|
@ -2,9 +2,10 @@
|
||||
being "promoted" to ints). */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-do run } */
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
|
||||
extern void abort(void);
|
||||
|
||||
@ -78,3 +79,5 @@ int main(void) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,8 +1,9 @@
|
||||
/* Check if bitfield ivars are correctly @encode'd when
|
||||
the NeXT runtime is used. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-fnext-runtime -fsigned-char" } */
|
||||
/* { dg-options "-fsigned-char" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
|
||||
|
||||
typedef struct objc_object { struct objc_class *class_pointer; } *id;
|
||||
|
||||
|
@ -1,11 +1,10 @@
|
||||
/* Check if the @defs() construct preserves the correct
|
||||
layout of bitfields. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-lobjc -Wpadded" } */
|
||||
/* { dg-options "-Wpadded" } */
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
extern void abort(void);
|
||||
extern int strcmp(const char *str1, const char *str2);
|
||||
|
@ -7,8 +7,8 @@
|
||||
/* { dg-options "-Wpadded" } */
|
||||
/* { dg-do run } */
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
|
@ -1,11 +1,11 @@
|
||||
/* Check if objc_super stack variables are created correctly (and
|
||||
not clobbered by other values). */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-std=c99 -lobjc" } */
|
||||
/* { dg-options "-std=c99" } */
|
||||
/* { dg-do run } */
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
extern void abort(void);
|
||||
|
||||
@ -74,3 +74,5 @@ int main(void) {
|
||||
[v free];
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,17 +1,10 @@
|
||||
/* Check if casting 'self' or 'super' affects message lookup in the
|
||||
correct way. */
|
||||
/* Check if casting 'self' or 'super' affects message lookup in the correct way. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include "../objc-obj-c++-shared/next-mapping.h"
|
||||
#include <stddef.h>
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
#define OBJC_GETCLASS objc_getClass
|
||||
#else
|
||||
#define OBJC_GETCLASS objc_get_class
|
||||
#endif
|
||||
|
||||
@protocol Func
|
||||
+ (int) class_func0;
|
||||
@ -70,11 +63,11 @@
|
||||
}
|
||||
+ (int) class_func6
|
||||
{
|
||||
return (size_t)[OBJC_GETCLASS("Object") class_func1]; /* { dg-warning ".Object. may not respond to .\\+class_func1." } */
|
||||
return (size_t)[objc_get_class("Object") class_func1]; /* { dg-warning ".Object. may not respond to .\\+class_func1." } */
|
||||
}
|
||||
+ (int) class_func7
|
||||
{
|
||||
return [OBJC_GETCLASS("Derived") class_func1];
|
||||
return [objc_get_class("Derived") class_func1];
|
||||
}
|
||||
- (int) instance_func1
|
||||
{
|
||||
@ -100,11 +93,11 @@
|
||||
}
|
||||
- (int) instance_func6
|
||||
{
|
||||
return (size_t)[OBJC_GETCLASS("Object") class_func1]; /* { dg-warning ".Object. may not respond to .\\+class_func1." } */
|
||||
return (size_t)[objc_get_class("Object") class_func1]; /* { dg-warning ".Object. may not respond to .\\+class_func1." } */
|
||||
}
|
||||
- (int) instance_func7
|
||||
{
|
||||
return [OBJC_GETCLASS("Derived") class_func1];
|
||||
return [objc_get_class("Derived") class_func1];
|
||||
}
|
||||
@end
|
||||
|
||||
@ -129,7 +122,7 @@
|
||||
int i = (size_t)[self instance_func0]; /* { dg-warning ".Derived. may not respond to .\\-instance_func0." } */
|
||||
i += [(Derived <Func> *)self categ_instance_func2];
|
||||
i += (size_t)[(Object <Func> *)self categ_instance_func2]; /* { dg-warning ".Object. may not respond to .\\-categ_instance_func2." } */
|
||||
/* { dg-warning ".\\-categ_instance_func2. not found in protocol" "" { target *-*-* } 131 } */
|
||||
/* { dg-warning ".\\-categ_instance_func2. not found in protocol" "" { target *-*-* } 124 } */
|
||||
i += (size_t)[(id <Func>)self categ_instance_func2]; /* { dg-warning ".\\-categ_instance_func2. not found in protocol" } */
|
||||
i += [(id)self categ_instance_func2];
|
||||
return i + (size_t)[super instance_func0]; /* { dg-warning ".Object. may not respond to .\\-instance_func0." } */
|
||||
|
@ -1,10 +1,11 @@
|
||||
/* Check if sending messages to super does not interfere with sending messages
|
||||
to classes. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "" } */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-lobjc" } */
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
extern void abort(void);
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
@ -52,3 +53,5 @@ int main(void) {
|
||||
CHECK_IF([derived instance_func1] == 234 + 345);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,9 +1,12 @@
|
||||
/* Test class methods inside categories. */
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-lobjc" } */
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
/* { dg-do run } */
|
||||
/* { dg-xfail-run-if "need OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
extern int strcmp(const char *s1, const char *s2);
|
||||
extern void abort(void);
|
||||
|
||||
#ifdef __NEXT_RUNTIME__
|
||||
#define SUPERCLASS superclass
|
||||
@ -11,8 +14,6 @@
|
||||
#define SUPERCLASS superClass
|
||||
#endif
|
||||
|
||||
extern int strcmp(const char *s1, const char *s2);
|
||||
extern void abort(void);
|
||||
#define CHECK_IF(expr) if(!(expr)) abort()
|
||||
|
||||
@interface MyObject: Object
|
||||
@ -36,8 +37,15 @@ int main (int argc, const char * argv[])
|
||||
Class w1 = [MyObject whatever1];
|
||||
Class w2 = [MyObject whatever2];
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
CHECK_IF(!strcmp( object_getClassName( w1 ), "Object"));
|
||||
CHECK_IF(!strcmp( object_getClassName( w2 ), "Object"));
|
||||
#else
|
||||
CHECK_IF(!strcmp(w1->name, "Object"));
|
||||
CHECK_IF(!strcmp(w2->name, "Object"));
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@protocol Foo
|
||||
- (id)meth1;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface Derived: Object
|
||||
@end
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* Another gimplifier ICE... */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface MyView: Object {
|
||||
int _frame;
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* Test errors for constant strings. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fgnu-runtime" } */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern void baz(...);
|
||||
|
@ -2,10 +2,10 @@
|
||||
constant string classes get derived. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com> */
|
||||
|
||||
/* { dg-options "-fnext-runtime" } */
|
||||
/* { dg-do compile { target *-*-darwin* } } */
|
||||
/* { dg-do compile { target { *-*-darwin* } } } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface NSString: Object
|
||||
@end
|
||||
@ -20,9 +20,14 @@
|
||||
@interface NSConstantString : NSSimpleCString
|
||||
@end
|
||||
|
||||
#ifndef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
extern struct objc_class _NSConstantStringClassReference;
|
||||
#else
|
||||
extern Class _NSConstantStringClassReference;
|
||||
#endif
|
||||
|
||||
const NSConstantString *appKey = @"MyApp";
|
||||
|
||||
/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */
|
||||
/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" } } */
|
||||
/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */
|
||||
/* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */
|
||||
|
@ -2,10 +2,11 @@
|
||||
constant string classes get derived. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com> */
|
||||
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=XStr" } */
|
||||
/* { dg-do compile { target *-*-darwin* } } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
|
||||
/* { dg-options "-fconstant-string-class=XStr" } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface XString: Object {
|
||||
@protected
|
||||
@ -19,9 +20,14 @@
|
||||
}
|
||||
@end
|
||||
|
||||
#ifndef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
extern struct objc_class _XStrClassReference;
|
||||
#else
|
||||
extern Class _XStrClassReference;
|
||||
#endif
|
||||
|
||||
const XStr *appKey = @"MyApp";
|
||||
|
||||
/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */
|
||||
/* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" } } */
|
||||
/* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */
|
||||
/* { dg-final { scan-assembler ".quad\t__XStrClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */
|
||||
|
@ -1,7 +1,8 @@
|
||||
/* { dg-options "-Wall -funit-at-a-time -fgnu-runtime" } */
|
||||
/* { dg-options "-Wall -funit-at-a-time" } */
|
||||
/* { dg-do compile } */
|
||||
/* PR objc/27438, make sure that the decl produced by the front-end
|
||||
does not cause a warning to be produced. */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
@interface NXConstantString
|
||||
{
|
||||
|
@ -1,15 +1,14 @@
|
||||
/* Test the -fconstant-string-class=Foo option under the NeXT
|
||||
runtime. */
|
||||
/* Test the -fconstant-string-class=Foo option under the NeXT runtime. */
|
||||
/* Developed by Markus Hitter <mah@jump-ing.de>. */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-fconstant-string-class=Foo" } */
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=Foo -lobjc" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
|
||||
#import "../objc-obj-c++-shared/Object1.h"
|
||||
#import "../objc-obj-c++-shared/next-mapping.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
|
||||
@interface Foo: Object {
|
||||
char *cString;
|
||||
@ -18,7 +17,11 @@
|
||||
- (char *)customString;
|
||||
@end
|
||||
|
||||
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
struct fudge_objc_class _FooClassReference;
|
||||
#else
|
||||
struct objc_class _FooClassReference;
|
||||
#endif
|
||||
|
||||
@implementation Foo : Object
|
||||
- (char *)customString {
|
||||
@ -38,7 +41,7 @@ int main () {
|
||||
constant string object. Can't be moved to +initialize since _that_
|
||||
is already a message. */
|
||||
|
||||
memcpy(&_FooClassReference, objc_getClass("Foo"), sizeof(_FooClassReference));
|
||||
memcpy(&_FooClassReference, objc_get_class("Foo"), sizeof(_FooClassReference));
|
||||
if (strcmp ([string customString], "bla")) {
|
||||
abort ();
|
||||
}
|
||||
@ -46,3 +49,5 @@ int main () {
|
||||
printf([@"This is a working constant string object\n" customString]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* Ensure that the preprocessor handles ObjC string constants gracefully. */
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com> */
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=MyString -lobjc" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
/* { dg-options "-fconstant-string-class=MyString " } */
|
||||
/* { dg-do run } */
|
||||
|
||||
extern void abort(void);
|
||||
|
||||
|
@ -1,18 +1,12 @@
|
||||
/* Test to make sure that the const objc strings are the same across
|
||||
scopes. */
|
||||
/* Test to make sure that the const objc strings are the same across scopes. */
|
||||
/* Developed by Andrew Pinski <pinskia@physics.uc.edu> */
|
||||
/* { dg-options "-fconstant-string-class=Foo " } */
|
||||
/* { dg-do run } */
|
||||
|
||||
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=Foo -lobjc" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
|
||||
|
||||
@interface Foo: Object {
|
||||
char *cString;
|
||||
@ -21,8 +15,11 @@
|
||||
- (char *)customString;
|
||||
@end
|
||||
|
||||
#ifndef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
struct objc_class _FooClassReference;
|
||||
|
||||
#else
|
||||
Class _FooClassReference;
|
||||
#endif
|
||||
|
||||
@implementation Foo : Object
|
||||
- (char *)customString {
|
||||
@ -30,13 +27,11 @@ struct objc_class _FooClassReference;
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
int main () {
|
||||
Foo *string = @"bla";
|
||||
{
|
||||
Foo *string2 = @"bla";
|
||||
|
||||
|
||||
if(string != string2)
|
||||
abort();
|
||||
printf("Strings are being uniqued properly\n");
|
||||
@ -44,3 +39,4 @@ int main () {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,12 +1,10 @@
|
||||
/* Test for assigning compile-time constant-string objects to static variables. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com> */
|
||||
/* { dg-options "-fconstant-string-class=Foo" } */
|
||||
/* { dg-do run } */
|
||||
|
||||
/* { dg-options "-fnext-runtime -fconstant-string-class=Foo -lobjc" } */
|
||||
/* { dg-do run { target *-*-darwin* } } */
|
||||
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdlib.h>
|
||||
#include <objc/Object.h>
|
||||
|
||||
@interface Foo: Object {
|
||||
char *cString;
|
||||
@ -14,7 +12,11 @@
|
||||
}
|
||||
@end
|
||||
|
||||
#ifndef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
struct objc_class _FooClassReference;
|
||||
#else
|
||||
Class _FooClassReference;
|
||||
#endif
|
||||
|
||||
@implementation Foo : Object
|
||||
- (char *)customString {
|
||||
@ -37,3 +39,5 @@ int main () {
|
||||
PrefsSynchronize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,10 +1,10 @@
|
||||
/* Test if ObjC constant strings get placed in the correct section. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com> */
|
||||
|
||||
/* { dg-options "-fnext-runtime" } */
|
||||
/* { dg-do compile { target *-*-darwin* } } */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
|
||||
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
|
||||
@interface NSConstantString: Object {
|
||||
char *cString;
|
||||
@ -12,9 +12,14 @@
|
||||
}
|
||||
@end
|
||||
|
||||
#ifndef NEXT_OBJC_USE_NEW_INTERFACE
|
||||
extern struct objc_class _NSConstantStringClassReference;
|
||||
#else
|
||||
Class _NSConstantStringClassReference;
|
||||
#endif
|
||||
|
||||
static const NSConstantString *appKey = @"MyApp";
|
||||
|
||||
/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */
|
||||
/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" } } */
|
||||
/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */
|
||||
/* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */
|
||||
|
@ -1,11 +1,12 @@
|
||||
/* Check if the @defs() construct preserves the correct
|
||||
offsets of ivars. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-lobjc" } */
|
||||
/* { dg-options "" } */
|
||||
/* { dg-do run } */
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
//#include <objc/objc.h>
|
||||
|
||||
extern void abort(void);
|
||||
|
||||
@ -65,3 +66,5 @@ int main(void) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
@ -1,13 +1,13 @@
|
||||
/* Test Objective-C capability for handling GNU/C99 designated
|
||||
initializers, and distinguishing them from message sends. */
|
||||
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* Test Objective-C capability for handling GNU/C99 designated initializers, and distinguishing them
|
||||
from message sends. Contributed by Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-options "-std=gnu99" } */
|
||||
/* { dg-do run } */
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <objc/objc.h>
|
||||
#include <objc/Object.h>
|
||||
|
||||
@interface Cls : Object
|
||||
+ (int) meth1;
|
||||
@ -47,3 +47,5 @@ int main(void) {
|
||||
/* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 0 } */
|
||||
/* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 0 } */
|
||||
/* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 0 } */
|
||||
|
||||
#include "../objc-obj-c++-shared/Object1-implementation.h"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user