OSDN Git Service

2010-03-25 Iain Sandoe <iain.sandoe@sandoe-acoustics.co.uk>
authorjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Mar 2010 22:25:05 +0000 (22:25 +0000)
committerjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Mar 2010 22:25:05 +0000 (22:25 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157731 138bc75d-0d04-0410-961f-82ee72b054a4

254 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/obj-c++.dg/basic.mm
gcc/testsuite/obj-c++.dg/bitfield-1.mm
gcc/testsuite/obj-c++.dg/bitfield-2.mm
gcc/testsuite/obj-c++.dg/bitfield-3.mm
gcc/testsuite/obj-c++.dg/bitfield-4.mm
gcc/testsuite/obj-c++.dg/comp-types-10.mm
gcc/testsuite/obj-c++.dg/comp-types-11.mm
gcc/testsuite/obj-c++.dg/comp-types-12.mm
gcc/testsuite/obj-c++.dg/comp-types-9.mm
gcc/testsuite/obj-c++.dg/const-str-1.mm
gcc/testsuite/obj-c++.dg/const-str-10.mm
gcc/testsuite/obj-c++.dg/const-str-11.mm
gcc/testsuite/obj-c++.dg/const-str-3.mm
gcc/testsuite/obj-c++.dg/const-str-4.mm
gcc/testsuite/obj-c++.dg/const-str-7.mm
gcc/testsuite/obj-c++.dg/const-str-8.mm
gcc/testsuite/obj-c++.dg/const-str-9.mm
gcc/testsuite/obj-c++.dg/cxx-class-1.mm
gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm
gcc/testsuite/obj-c++.dg/cxx-ivars-2.mm
gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
gcc/testsuite/obj-c++.dg/cxx-scope-1.mm
gcc/testsuite/obj-c++.dg/cxx-scope-2.mm
gcc/testsuite/obj-c++.dg/defs.mm
gcc/testsuite/obj-c++.dg/dg.exp
gcc/testsuite/obj-c++.dg/encode-4.mm
gcc/testsuite/obj-c++.dg/encode-5.mm
gcc/testsuite/obj-c++.dg/encode-6.mm
gcc/testsuite/obj-c++.dg/encode-7.mm
gcc/testsuite/obj-c++.dg/encode-8.mm
gcc/testsuite/obj-c++.dg/except-1.mm
gcc/testsuite/obj-c++.dg/fix-and-continue-2.mm
gcc/testsuite/obj-c++.dg/gnu-runtime-1.mm
gcc/testsuite/obj-c++.dg/gnu-runtime-2.mm
gcc/testsuite/obj-c++.dg/gnu-runtime-3.mm
gcc/testsuite/obj-c++.dg/isa-field-1.mm
gcc/testsuite/obj-c++.dg/ivar-list-semi.mm
gcc/testsuite/obj-c++.dg/layout-1.mm
gcc/testsuite/obj-c++.dg/local-decl-1.mm
gcc/testsuite/obj-c++.dg/lookup-2.mm
gcc/testsuite/obj-c++.dg/method-10.mm
gcc/testsuite/obj-c++.dg/method-11.mm
gcc/testsuite/obj-c++.dg/method-12.mm
gcc/testsuite/obj-c++.dg/method-13.mm
gcc/testsuite/obj-c++.dg/method-15.mm
gcc/testsuite/obj-c++.dg/method-17.mm
gcc/testsuite/obj-c++.dg/method-19.mm
gcc/testsuite/obj-c++.dg/method-2.mm
gcc/testsuite/obj-c++.dg/method-21.mm
gcc/testsuite/obj-c++.dg/method-6.mm
gcc/testsuite/obj-c++.dg/no-extra-load.mm
gcc/testsuite/obj-c++.dg/objc-gc-3.mm
gcc/testsuite/obj-c++.dg/proto-lossage-2.mm
gcc/testsuite/obj-c++.dg/proto-lossage-3.mm
gcc/testsuite/obj-c++.dg/proto-qual-1.mm
gcc/testsuite/obj-c++.dg/qual-types-1.mm
gcc/testsuite/obj-c++.dg/selector-2.mm
gcc/testsuite/obj-c++.dg/selector-5.mm
gcc/testsuite/obj-c++.dg/selector-6.mm
gcc/testsuite/obj-c++.dg/super-class-2.mm
gcc/testsuite/obj-c++.dg/template-1.mm
gcc/testsuite/obj-c++.dg/template-3.mm
gcc/testsuite/obj-c++.dg/template-4.mm
gcc/testsuite/obj-c++.dg/try-catch-1.mm
gcc/testsuite/obj-c++.dg/try-catch-11.mm
gcc/testsuite/obj-c++.dg/try-catch-2.mm
gcc/testsuite/obj-c++.dg/try-catch-3.mm
gcc/testsuite/obj-c++.dg/try-catch-7.mm
gcc/testsuite/obj-c++.dg/try-catch-8.mm
gcc/testsuite/obj-c++.dg/try-catch-9.mm
gcc/testsuite/obj-c++.dg/typedef-alias-1.mm
gcc/testsuite/obj-c++.dg/va-meth-1.mm
gcc/testsuite/objc-obj-c++-shared/Object1-implementation.h [new file with mode: 0755]
gcc/testsuite/objc-obj-c++-shared/Object1.h [new file with mode: 0755]
gcc/testsuite/objc-obj-c++-shared/Protocol1.h [new file with mode: 0755]
gcc/testsuite/objc-obj-c++-shared/next-abi.h [new file with mode: 0755]
gcc/testsuite/objc-obj-c++-shared/next-mapping.h [new file with mode: 0755]
gcc/testsuite/objc.dg/bitfield-1.m
gcc/testsuite/objc.dg/bitfield-2.m
gcc/testsuite/objc.dg/bitfield-3.m
gcc/testsuite/objc.dg/bitfield-5.m
gcc/testsuite/objc.dg/call-super-1.m
gcc/testsuite/objc.dg/call-super-2.m
gcc/testsuite/objc.dg/call-super-3.m
gcc/testsuite/objc.dg/category-1.m
gcc/testsuite/objc.dg/comp-types-10.m
gcc/testsuite/objc.dg/comp-types-11.m
gcc/testsuite/objc.dg/comp-types-8.m
gcc/testsuite/objc.dg/const-str-1.m
gcc/testsuite/objc.dg/const-str-10.m
gcc/testsuite/objc.dg/const-str-11.m
gcc/testsuite/objc.dg/const-str-12.m
gcc/testsuite/objc.dg/const-str-3.m
gcc/testsuite/objc.dg/const-str-4.m
gcc/testsuite/objc.dg/const-str-7.m
gcc/testsuite/objc.dg/const-str-8.m
gcc/testsuite/objc.dg/const-str-9.m
gcc/testsuite/objc.dg/defs.m
gcc/testsuite/objc.dg/desig-init-1.m
gcc/testsuite/objc.dg/dg.exp
gcc/testsuite/objc.dg/encode-1.m
gcc/testsuite/objc.dg/encode-2.m
gcc/testsuite/objc.dg/encode-3.m
gcc/testsuite/objc.dg/encode-4.m
gcc/testsuite/objc.dg/encode-5.m
gcc/testsuite/objc.dg/encode-7.m
gcc/testsuite/objc.dg/encode-8.m
gcc/testsuite/objc.dg/encode-9.m
gcc/testsuite/objc.dg/fix-and-continue-1.m
gcc/testsuite/objc.dg/fix-and-continue-2.m
gcc/testsuite/objc.dg/func-ptr-1.m
gcc/testsuite/objc.dg/func-ptr-2.m
gcc/testsuite/objc.dg/gnu-runtime-1.m
gcc/testsuite/objc.dg/gnu-runtime-2.m
gcc/testsuite/objc.dg/gnu-runtime-3.m
gcc/testsuite/objc.dg/image-info.m
gcc/testsuite/objc.dg/isa-field-1.m
gcc/testsuite/objc.dg/layout-1.m
gcc/testsuite/objc.dg/local-decl-2.m
gcc/testsuite/objc.dg/lookup-1.m
gcc/testsuite/objc.dg/method-10.m
gcc/testsuite/objc.dg/method-13.m
gcc/testsuite/objc.dg/method-15.m
gcc/testsuite/objc.dg/method-17.m
gcc/testsuite/objc.dg/method-19.m
gcc/testsuite/objc.dg/method-3.m
gcc/testsuite/objc.dg/method-4.m
gcc/testsuite/objc.dg/method-6.m
gcc/testsuite/objc.dg/method-7.m
gcc/testsuite/objc.dg/method-9.m
gcc/testsuite/objc.dg/next-runtime-1.m
gcc/testsuite/objc.dg/no-extra-load.m
gcc/testsuite/objc.dg/objc-fast-4.m
gcc/testsuite/objc.dg/objc-gc-4.m
gcc/testsuite/objc.dg/pragma-1.m
gcc/testsuite/objc.dg/proto-lossage-2.m
gcc/testsuite/objc.dg/proto-lossage-3.m
gcc/testsuite/objc.dg/proto-qual-1.m
gcc/testsuite/objc.dg/selector-1.m
gcc/testsuite/objc.dg/selector-2.m
gcc/testsuite/objc.dg/selector-3.m
gcc/testsuite/objc.dg/sizeof-1.m
gcc/testsuite/objc.dg/special/special.exp
gcc/testsuite/objc.dg/special/unclaimed-category-1.h
gcc/testsuite/objc.dg/special/unclaimed-category-1.m
gcc/testsuite/objc.dg/special/unclaimed-category-1a.m
gcc/testsuite/objc.dg/stret-1.m
gcc/testsuite/objc.dg/stret-2.m
gcc/testsuite/objc.dg/stubify-1.m
gcc/testsuite/objc.dg/stubify-2.m
gcc/testsuite/objc.dg/super-class-2.m
gcc/testsuite/objc.dg/super-class-3.m
gcc/testsuite/objc.dg/super-class-4.m
gcc/testsuite/objc.dg/symtab-1.m
gcc/testsuite/objc.dg/sync-1.m
gcc/testsuite/objc.dg/try-catch-1.m
gcc/testsuite/objc.dg/try-catch-10.m
gcc/testsuite/objc.dg/try-catch-3.m
gcc/testsuite/objc.dg/try-catch-5.m
gcc/testsuite/objc.dg/try-catch-6.m
gcc/testsuite/objc.dg/try-catch-7.m
gcc/testsuite/objc.dg/try-catch-9.m
gcc/testsuite/objc.dg/type-size-2.m
gcc/testsuite/objc.dg/type-stream-1.m
gcc/testsuite/objc.dg/typedef-alias-1.m
gcc/testsuite/objc.dg/va-meth-1.m
gcc/testsuite/objc.dg/zero-link-1.m
gcc/testsuite/objc.dg/zero-link-2.m
gcc/testsuite/objc.dg/zero-link-3.m
gcc/testsuite/objc/compile/trivial.m
gcc/testsuite/objc/execute/IMP.m
gcc/testsuite/objc/execute/_cmd.m
gcc/testsuite/objc/execute/accessing_ivars.m
gcc/testsuite/objc/execute/bf-1.m
gcc/testsuite/objc/execute/bf-10.m
gcc/testsuite/objc/execute/bf-11.m
gcc/testsuite/objc/execute/bf-12.m
gcc/testsuite/objc/execute/bf-13.m
gcc/testsuite/objc/execute/bf-14.m
gcc/testsuite/objc/execute/bf-15.m
gcc/testsuite/objc/execute/bf-16.m
gcc/testsuite/objc/execute/bf-17.m
gcc/testsuite/objc/execute/bf-18.m
gcc/testsuite/objc/execute/bf-19.m
gcc/testsuite/objc/execute/bf-2.m
gcc/testsuite/objc/execute/bf-20.m
gcc/testsuite/objc/execute/bf-21.m
gcc/testsuite/objc/execute/bf-3.m
gcc/testsuite/objc/execute/bf-4.m
gcc/testsuite/objc/execute/bf-5.m
gcc/testsuite/objc/execute/bf-6.m
gcc/testsuite/objc/execute/bf-7.m
gcc/testsuite/objc/execute/bf-8.m
gcc/testsuite/objc/execute/bf-9.m
gcc/testsuite/objc/execute/bf-common.h
gcc/testsuite/objc/execute/bycopy-1.m
gcc/testsuite/objc/execute/bycopy-2.m
gcc/testsuite/objc/execute/bycopy-3.m
gcc/testsuite/objc/execute/cascading-1.m
gcc/testsuite/objc/execute/class-1.m
gcc/testsuite/objc/execute/class-10.m
gcc/testsuite/objc/execute/class-11.m
gcc/testsuite/objc/execute/class-12.m
gcc/testsuite/objc/execute/class-13.m
gcc/testsuite/objc/execute/class-14.m
gcc/testsuite/objc/execute/class-2.m
gcc/testsuite/objc/execute/class-3.m
gcc/testsuite/objc/execute/class-4.m
gcc/testsuite/objc/execute/class-5.m
gcc/testsuite/objc/execute/class-6.m
gcc/testsuite/objc/execute/class-7.m
gcc/testsuite/objc/execute/class-8.m
gcc/testsuite/objc/execute/class-9.m
gcc/testsuite/objc/execute/class-tests-1.h
gcc/testsuite/objc/execute/class_self-2.m
gcc/testsuite/objc/execute/compatibility_alias.m
gcc/testsuite/objc/execute/encode-1.m
gcc/testsuite/objc/execute/enumeration-1.m
gcc/testsuite/objc/execute/enumeration-2.m
gcc/testsuite/objc/execute/exceptions/catchall-1.m
gcc/testsuite/objc/execute/exceptions/finally-1.m
gcc/testsuite/objc/execute/exceptions/foward-1.m
gcc/testsuite/objc/execute/exceptions/local-variables-1.m
gcc/testsuite/objc/execute/exceptions/trivial.m
gcc/testsuite/objc/execute/formal_protocol-1.m
gcc/testsuite/objc/execute/formal_protocol-2.m
gcc/testsuite/objc/execute/formal_protocol-3.m
gcc/testsuite/objc/execute/formal_protocol-4.m
gcc/testsuite/objc/execute/formal_protocol-5.m
gcc/testsuite/objc/execute/formal_protocol-6.m
gcc/testsuite/objc/execute/formal_protocol-7.m
gcc/testsuite/objc/execute/forward-1.m
gcc/testsuite/objc/execute/forward-1.x
gcc/testsuite/objc/execute/function-message-1.m
gcc/testsuite/objc/execute/informal_protocol.m
gcc/testsuite/objc/execute/load-3.m
gcc/testsuite/objc/execute/nested-func-1.m
gcc/testsuite/objc/execute/no_clash.m
gcc/testsuite/objc/execute/np-1.m
gcc/testsuite/objc/execute/np-2.m
gcc/testsuite/objc/execute/object_is_class.m
gcc/testsuite/objc/execute/object_is_meta_class.m
gcc/testsuite/objc/execute/private.m
gcc/testsuite/objc/execute/protocol-isEqual-1.m
gcc/testsuite/objc/execute/protocol-isEqual-2.m
gcc/testsuite/objc/execute/protocol-isEqual-3.m
gcc/testsuite/objc/execute/protocol-isEqual-4.m
gcc/testsuite/objc/execute/root_methods.m
gcc/testsuite/objc/execute/string1.m
gcc/testsuite/objc/execute/string2.m
gcc/testsuite/objc/execute/string3.m
gcc/testsuite/objc/execute/string4.m
gcc/testsuite/objc/execute/trivial.m

index 8c7bc15..5b7c892 100644 (file)
@@ -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
index 5a9fb43..8fb0204 100644 (file)
@@ -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"
index f17d9f0..7b8e861 100644 (file)
@@ -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()
index 7f778b5..1bddf54 100644 (file)
@@ -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"
index 1ad10f6..32f2d72 100644 (file)
@@ -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;
index a2c2173..35c32ee 100644 (file)
@@ -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>
index 0a8f1c9..b4da5dd 100644 (file)
@@ -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" } */
 
index c28a2a5..3d85983 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @protocol Foo
 - (id)meth1;
index 00e6e3a..37feff0 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Derived: Object
 @end
index f092c9e..079140a 100644 (file)
@@ -2,7 +2,7 @@
 
 /* Another gimplifier ICE... */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface MyView: Object {
   int _frame;
index e4cac2e..156a92e 100644 (file)
@@ -1,6 +1,5 @@
 /* Test errors for constant strings.  */
 /* { dg-do compile } */
-/* { dg-options "-fgnu-runtime" } */
 
 #ifdef __cplusplus
 extern void baz(...);
index 4efe044..8605bdb 100644 (file)
@@ -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
 @interface NSConstantString : NSSimpleCString
 @end
 
+#ifdef NEXT_OBJC_USE_NEW_INTERFACE
+Class _NSConstantStringClassReference;
+#else
 extern struct objc_class _NSConstantStringClassReference;
+#endif
 
 const NSConstantString *appKey = @"MyApp";
 
index 3b7ec7a..22c1f04 100644 (file)
@@ -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
 }
 @end
 
+#ifndef NEXT_OBJC_USE_NEW_INTERFACE
 extern struct objc_class _XStrClassReference;
+#else
+extern Class _XStrClassReference;
+#endif
 
 const XStr *appKey = @"MyApp";
 
index 7d4f808..3e7939a 100644 (file)
@@ -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;
 - (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"
index 9ea257d..09d24ad 100644 (file)
@@ -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>
 
index 3691579..fe66b2c 100644 (file)
@@ -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;
 - (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"
index 60abcbd..6747341 100644 (file)
@@ -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;
 }
 @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"
index 943dbae..2862133 100644 (file)
@@ -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;
 }
 @end
 
+#ifdef NEXT_OBJC_USE_NEW_INTERFACE
+Class _NSConstantStringClassReference;
+#else
 extern struct objc_class _NSConstantStringClassReference;
+#endif
 
 const NSConstantString *appKey = @"MyApp";
 
index 64fed0f..6cde9be 100644 (file)
@@ -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) {};
index 6e5812c..d89258a 100644 (file)
@@ -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"
index 3a6df79..e074371 100644 (file)
@@ -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"
index ca5e5ed..898ce6a 100644 (file)
@@ -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"
index 952facc..a576bbd 100644 (file)
@@ -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"
index a5bce39..21fed50 100644 (file)
@@ -3,7 +3,7 @@
 
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 #include <iostream>
 #include <string>
 
index 8b67aab..0e8b26c 100644 (file)
@@ -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"
index 5fc1a97..1097464 100644 (file)
@@ -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
index 66745f0..b973abe 100644 (file)
 
 /* 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"
index 748df7c..4959ea3 100644 (file)
@@ -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"
index 5b85c3d..987d4a8 100644 (file)
@@ -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"
index f2cb693..40b1510 100644 (file)
@@ -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);
index 53ad4e3..de800d0 100644 (file)
@@ -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>
index e06bea0..ccd5bad 100644 (file)
@@ -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"
index 33cb846..fdfbcbd 100644 (file)
@@ -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;
index dab9215..c7e3bcc 100644 (file)
@@ -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>
 
index e6a1d18..dd53338 100644 (file)
@@ -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>
index d9c62d9..429fce3 100644 (file)
@@ -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>
index f6d3e6a..274aa8c 100644 (file)
@@ -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"
index 21bd3a3..322de2f 100644 (file)
@@ -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
index bc99e75..3cd4d15 100644 (file)
@@ -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
 { }
index 0d7389d..6848572 100644 (file)
@@ -5,7 +5,7 @@
 
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Sprite: Object {
   int sprite, spree;
index a14860a..5dffb01 100644 (file)
@@ -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"
index 01a568b..cac5d97 100644 (file)
@@ -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"
index c8d092d..6c6b1a0 100644 (file)
@@ -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 } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 typedef Object ObjectTypedef1;
 typedef ObjectTypedef1 ObjectTypedef2;
index 21f4bb9..e362070 100644 (file)
@@ -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;
index adf6dfe..18fb7cd 100644 (file)
@@ -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;
index 9d9099e..055e8ca 100644 (file)
@@ -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;
index a9b74be..cb60473 100644 (file)
@@ -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"
index e7a2b44..5dca804 100644 (file)
@@ -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"
index a76055e..117d420 100644 (file)
@@ -4,7 +4,7 @@
 
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @class NSString;
 
index 0c8051c..898768d 100644 (file)
@@ -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;
index 5fc0d73..6c21e79 100644 (file)
@@ -4,7 +4,7 @@
 
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @class NotKnown;
 
index 7b4a360..1663ebc 100644 (file)
@@ -2,7 +2,7 @@
 
 // { dg-do compile }
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 #include <iostream>
 
 @interface Greeter : Object
index df0a44c..efbde1b 100644 (file)
@@ -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;
 
index b3ab968..361bb90 100644 (file)
@@ -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;
index 512a59e..7a51d95 100644 (file)
@@ -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;
index d9bbf3a..caf1eab 100644 (file)
@@ -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
index db8195c..2b0a7be 100644 (file)
@@ -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"
index 09fbc25..b3a3579 100644 (file)
@@ -2,7 +2,7 @@
 /* { dg-options "-Wselector" } */
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Foo
 @end
index 10671a9..5a3a4b6 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-options "" } */
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 int main()
 {
index 54a38f8..4ba8e2b 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-options "" } */
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 int main()
 {
index 41e2fd2..4ec0c3f 100644 (file)
@@ -4,7 +4,7 @@
 
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @class MyWpModule;
 
index 4b0a3df..fc8b08b 100644 (file)
@@ -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"
index 662e44d..a3b96b3 100644 (file)
@@ -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"
index 25a1df9..fa1132d 100644 (file)
@@ -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"
index db9b02f..a32bfee 100644 (file)
@@ -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>
 
index 1da1b47..49e2c0c 100644 (file)
@@ -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;
index d7b386a..f39c22c 100644 (file)
@@ -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"
index 9341ce5..7577c5b 100644 (file)
@@ -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)
 {
index e322672..b69c980 100644 (file)
@@ -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];
index b1e1cd1..b666623 100644 (file)
@@ -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;
index f79f52f..306c467 100644 (file)
@@ -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"
index beed727..79db876 100644 (file)
@@ -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;
 
index 6d24b7f..c6aea14 100644 (file)
@@ -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"
diff --git a/gcc/testsuite/objc-obj-c++-shared/Object1-implementation.h b/gcc/testsuite/objc-obj-c++-shared/Object1-implementation.h
new file mode 100755 (executable)
index 0000000..4c38383
--- /dev/null
@@ -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_ */
\ No newline at end of file
diff --git a/gcc/testsuite/objc-obj-c++-shared/Object1.h b/gcc/testsuite/objc-obj-c++-shared/Object1.h
new file mode 100755 (executable)
index 0000000..3c7dd9a
--- /dev/null
@@ -0,0 +1 @@
+/* Object definition taken from <objc/Object.h>\r */\r#ifndef _OBJC_OBJECT1_H_\r#define _OBJC_OBJECT1_H_\r\r#undef DO_NEXT_M64_OBJECT_IMPLEMENTATION\r\r#ifndef __NEXT_RUNTIME__\r#  include <objc/Object.h>\r#else\r#  include "next-abi.h"\r#  ifndef NEXT_OBJC_USE_NEW_INTERFACE\r/* We are on a next system, or version, that is happy to compile V0 ABI */\r#    include <objc/Object.h>\r#  else\r#    if (NEXT_OBJC_ABI_VERSION==0)\r/* We are on a system that has V0 ABI implementation in libobjc.dylib.\r * However, we need to use the new accessors and pretend that the \r * structures are opaque to avoid 'deprecated' warnings\r */\r#      include <objc/Object.h>\r#    else\r/* We are on a system that includes a V2 ABI Object in libobjc.dylib.\r*/\r#      ifdef __OBJC2__\r/* ... and we have a V2 ABI compiler ..  */\r#        include <objc/Object.h>\r#      else\r/* We can't access the Object definition in libobjc.dylib because\r * we can't yet generate OBJC2 code.\r *\r * So we'll roll our own Object - purely for the sake of compile\r * checks - the code is unlikely to run...\r*/\r#        ifndef _OBJC_OBJECT_H_\r#        define _OBJC_OBJECT_H_\r\r#include <stdarg.h>\r#import <objc/objc-runtime.h>\r\r/* This is a cut-down Object with only the methods currently required\r   by the testsuite declared.\r   \r   For those executables that require an implementation (to link) this\r   can be provided in a given test by placing:\r   #include "path/to/objc-c++shared/Object1-implementation.h"\r   at the end of the source for the test.\r*/\r\r@interface Object \r{\r       Class isa; /* A pointer to the instance's class structure */\r}\r+ initialize;\r- init;\r\r+ new;\r+ free;\r- free;\r+ alloc;\r//- copy;\r//+ allocFromZone:(void *)zone;\r//- copyFromZone:(void *)zone;\r//- (void *)zone;\r\r+ class;\r//+ superclass;\r//+ (const char *) name;\r- class;\r- superclass;\r- (const char *) name;\r\r//- self;\r//- (unsigned int) hash;\r//-(BOOL) isEqual:anObject;\r\r/* Testing inheritance relationships */\r\r//- (BOOL) isKindOf: aClassObject;\r//- (BOOL) isMemberOf: aClassObject;\r//- (BOOL) isKindOfClassNamed: (const char *)aClassName;\r//- (BOOL) isMemberOfClassNamed: (const char *)aClassName;\r\r/* Testing class functionality */\r\r//+ (BOOL) instancesRespondTo:(SEL)aSelector;\r//- (BOOL) respondsTo:(SEL)aSelector;\r\r/* Testing protocol conformance */\r\r- (BOOL) conformsTo: (Protocol *)aProtocolObject;\r//+ (BOOL) conformsTo: (Protocol *)aProtocolObject;\r\r/* Obtaining method descriptors from protocols */\r\r//- (struct objc_method_description *) descriptionForMethod:(SEL)aSel;\r//+ (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel;\r\r/* Obtaining method handles */\r\r//- (IMP) methodFor:(SEL)aSelector;\r//+ (IMP) instanceMethodFor:(SEL)aSelector;\r\r/* Sending messages determined at run time */\r\r//- perform:(SEL)aSelector;\r//- perform:(SEL)aSelector with:anObject;\r//- perform:(SEL)aSelector with:object1 with:object2;\r\r/* Posing */\r\r//+ poseAs: aClassObject;\r\r/* Enforcing intentions */\r \r//- subclassResponsibility:(SEL)aSelector;\r//- notImplemented:(SEL)aSelector;\r\r/* Error handling */\r\r//- doesNotRecognize:(SEL)aSelector;\r//- error:(const char *)aString, ...;\r\r/* Debugging */\r\r//- (void) printForDebugger:(void *)stream;\r\r/* Archiving */\r\r//- awake;\r//- write:(void *)stream;\r//- read:(void *)stream;\r//+ (int) version;\r//+ setVersion: (int) aVersion;\r\r/* Forwarding */\r\r//- forward: (SEL)sel : (marg_list)args;\r//- performv: (SEL)sel : (marg_list)args;\r\r@end\r\r#define DO_NEXT_M64_OBJECT_IMPLEMENTATION\r\r#        endif /* _OBJC_OBJECT_H_ */\r#      endif /* __OBJC2__ */\r#      endif /* ABI=0 */\r#    endif /* NEXT_OBJC_USE_NEW_INTERFACE */\r#   endif /* __NEXT_RUNTIME__ */\r#endif /* _OBJC_OBJECT1_H_ */\r
\ No newline at end of file
diff --git a/gcc/testsuite/objc-obj-c++-shared/Protocol1.h b/gcc/testsuite/objc-obj-c++-shared/Protocol1.h
new file mode 100755 (executable)
index 0000000..d375ac0
--- /dev/null
@@ -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_ */
diff --git a/gcc/testsuite/objc-obj-c++-shared/next-abi.h b/gcc/testsuite/objc-obj-c++-shared/next-abi.h
new file mode 100755 (executable)
index 0000000..21a49d3
--- /dev/null
@@ -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_ */
diff --git a/gcc/testsuite/objc-obj-c++-shared/next-mapping.h b/gcc/testsuite/objc-obj-c++-shared/next-mapping.h
new file mode 100755 (executable)
index 0000000..c59993a
--- /dev/null
@@ -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__ */
index 8791eb3..664a0e8 100644 (file)
@@ -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"
index 6875c6c..7e8147a 100644 (file)
@@ -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;
 
index f427a30..5bea0fc 100644 (file)
@@ -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);
index ddd3b03..1cc1cad 100644 (file)
@@ -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()
index 19e0d49..37b705e 100644 (file)
@@ -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"
index be8a89f..190c407 100644 (file)
@@ -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;
 }
 + (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
 {
 }
 - (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
 
    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." } */
index 05b6233..0b95029 100644 (file)
@@ -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"
index 1d29e37..e195a46 100644 (file)
@@ -1,9 +1,12 @@
 /* Test class methods inside categories.  */
 /* Author: Ziemowit Laski <zlaski@apple.com>.  */
-/* { dg-options "-lobjc" } */
+
 /* { dg-do run } */
+/* { dg-xfail-run-if "need OBJC2 ABI" { *-*-darwin* && { lp64 &&  { ! objc2 } } } { "-fnext-runtime" } { "" } } */
 
-#include <objc/Object.h>
+#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"
index c28a2a5..3d85983 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @protocol Foo
 - (id)meth1;
index b041759..959cc04 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Derived: Object
 @end
index 7f9c64a..bb7b136 100644 (file)
@@ -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;
index e4cac2e..156a92e 100644 (file)
@@ -1,6 +1,5 @@
 /* Test errors for constant strings.  */
 /* { dg-do compile } */
-/* { dg-options "-fgnu-runtime" } */
 
 #ifdef __cplusplus
 extern void baz(...);
index 4efe044..7f59a63 100644 (file)
@@ -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
 @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 } } } } } */
index 3b7ec7a..ae3c330 100644 (file)
@@ -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
 }
 @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 } } } } } */
index 95a6bef..9305901 100644 (file)
@@ -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
 {
index 7d4f808..0d719e8 100644 (file)
@@ -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;
 - (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"
index c178bfc..9582a32 100644 (file)
@@ -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);
 
index 3691579..223789a 100644 (file)
@@ -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;
 - (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"
index 60abcbd..a7da0e1 100644 (file)
@@ -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;
 }
 @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"
index 0333374..ddf3b02 100644 (file)
@@ -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;
 }
 @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 } } } } } */
index e8d8c2c..2ffde00 100644 (file)
@@ -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"
index 6ef710b..a07e72b 100644 (file)
@@ -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"
index b17b68b..4c5730e 100644 (file)
@@ -29,7 +29,13 @@ dg-init
 
 # Main loop.
 dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[m\]]] \
-       "" $DEFAULT_CFLAGS
+       "-fgnu-runtime" $DEFAULT_CFLAGS
+
+# darwin targets can also run code with the NeXT runtime.
+if [istarget "*-*-darwin*" ] {
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[m\]]] \
+       "-fnext-runtime" $DEFAULT_CFLAGS
+}
 
 # All done.
 dg-finish
index 868c325..50e9919 100644 (file)
@@ -3,9 +3,8 @@
    should be encoded as '*').  This is somewhat tricky wrt the NeXT runtime,
    where we have 'typedef char BOOL'.  */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
-/* { dg-options "-fnext-runtime -lobjc" } */
 /* { dg-do run } */
-
+/* { dg-options "-fnext-runtime" } */
 #include <string.h>           
 #include <stdlib.h>
 #include <objc/objc.h>
index b900369..ea0ff6a 100644 (file)
 
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
 /* { 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-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
 
 extern int sscanf(const char *str, const char *format, ...);
@@ -76,27 +74,31 @@ 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"
index 20a85b4..63a92e1 100644 (file)
@@ -2,7 +2,10 @@
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
 /* { dg-do run } */
 
-#include <objc/Protocol.h>
+#include <stdlib.h>
+#include "../objc-obj-c++-shared/Protocol1.h"
+/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
+
 #ifdef __cplusplus
 #define ProtoBool bool
 #else
index a754c69..d74c0ba 100644 (file)
@@ -1,19 +1,20 @@
 /* Encoding tests for ObjC class layouts.  */
 /* 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/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/next-mapping.h"
 #ifdef __NEXT_RUNTIME__
 #include <objc/objc-class.h>
-#define OBJC_GETCLASS objc_getClass
 #else
 #include <objc/objc-api.h>
-#define OBJC_GETCLASS objc_get_class
 #endif
 
 extern void abort(void);
 extern int strcmp(const char *s1, const char *s2);
+
 #define CHECK_IF(expr) if(!(expr)) abort()
 
 @class Int1, Int2;
@@ -49,25 +50,44 @@ 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"
index 35b6148..523c7ce 100644 (file)
@@ -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);
index 0b49a41..1fe0b24 100644 (file)
@@ -1,5 +1,5 @@
-/* { dg-options "-fgnu-runtime" } */
 /* { dg-do run } */
+/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
 
 #include <objc/encoding.h>
 #include <stdlib.h>
index 947a929..a992e31 100644 (file)
@@ -1,5 +1,5 @@
-/* { dg-options "-fgnu-runtime" } */
 /* { dg-do run } */
+/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
 
 #include <objc/encoding.h>
 #include <stdlib.h>
index 3b00575..1ff2a6b 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-do compile } */
-/* { dg-options "-fgnu-runtime " } */
 
 /* There was an ICE due to diving by zero in the objc front-end. */
 
index 49250c2..1560bea 100644 (file)
@@ -4,8 +4,9 @@
    
 /* { dg-do run  { target *-*-darwin* } } */
 /* { dg-options "-mfix-and-continue" } */
+/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 #include <stdlib.h>
 
 @class MyTarget, MySet;
@@ -88,3 +89,5 @@ int main(void) {
 
   return 0;
 }
+
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index 33cb846..fdfbcbd 100644 (file)
@@ -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;
index 015d3ac..4bdb344 100644 (file)
@@ -1,7 +1,8 @@
 /* Test for handling of function pointer ivars */
 /* { dg-do run } */
+/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 extern int strcmp(const char *, const char *);
 extern void abort(void);
@@ -46,3 +47,5 @@ int main ()
   return(0);
 }
 
+#include "../objc-obj-c++-shared/Object1-implementation.h"
+
index 625ce9f..e68c71b 100644 (file)
@@ -2,9 +2,11 @@
    into pointers.  */
 /* Contributed by Ziemowit Laski  <zlaski@apple.com>  */
 /* { dg-do run } */
+/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
 
-#include <objc/Object.h>
 #include <stdlib.h>
+/* provide an Object class for NeXT runtimes 10.5 and above */
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Func: Object
 + (int) processNumber:(int)a and:(int)b usingFunction:(int(int,int))func;
@@ -35,3 +37,5 @@ int main(void) {
 
   return 0;
 }
+
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index dab9215..c7e3bcc 100644 (file)
@@ -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>
 
index 2ead288..9903d29 100644 (file)
@@ -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>
index 6fc113d..e0c8cc4 100644 (file)
@@ -1,7 +1,7 @@
 /* Sanity check for GNU-runtime regardless of runtime used on target system.  */
 
 /* { dg-do run } */
-/* { dg-options "-fgnu-runtime" } */
+/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
 
 #include <objc/Object.h>
 #include <string.h>
index 3ffe814..0a740fa 100644 (file)
@@ -2,15 +2,12 @@
    __OBJC,__image_info section to be emitted.  This is only
    usable on MacOS X 10.3 and later. */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
-/* { dg-options "-freplace-objc-classes" } */
-/* { dg-do compile { target *-*-darwin* } } */
 
-#ifndef __NEXT_RUNTIME__
-#error Feature not currently supported by the GNU runtime
-#endif
+/* { dg-do compile { target { *-*-darwin* } } } */
+/* { dg-options "-freplace-objc-classes" } */
 
+#include "../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
-#include <objc/Object.h>
 
 extern void abort(void);
 
index 6398b60..377280f 100644 (file)
@@ -1,7 +1,7 @@
 /* Ensure there are no bizarre difficulties with accessing the 'isa' field of objects.  */
-/* { dg-do compile { target *-*-darwin* } } */
+/* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Object (Test)
 - (Class) test1: (id)object;
 @implementation Object (Test)
 
 Class test1(id object) {
+#ifdef __NEXT_RUNTIME__
     Class cls = object->isa;
+#else
+    Class cls = object->class_pointer;
+#endif
     return cls;
 }
 - (Class) test1: (id)object {
+#ifdef __NEXT_RUNTIME__
     Class cls = object->isa;
+#else
+    Class cls = object->class_pointer;
+#endif
     return cls;
 }
 
@@ -27,17 +35,29 @@ Class test1(id object) {
 @implementation Derived
 
 Class test2(id object) {
+#ifdef __NEXT_RUNTIME__
     Class cls = object->isa;
+#else
+    Class cls = object->class_pointer;
+#endif
     return cls;
 }
 - (Class) test2: (id)object {
+#ifdef __NEXT_RUNTIME__
     Class cls = object->isa;
+#else
+    Class cls = object->class_pointer;
+#endif
     return cls;
 }
 
 @end
 
 Class test3(id object) {
+#ifdef __NEXT_RUNTIME__
     Class cls = object->isa;
+#else
+    Class cls = object->class_pointer;
+#endif
     return cls;
 }
index 6fb1142..f702eb2 100644 (file)
@@ -3,7 +3,7 @@
 /* { dg-do compile } */
 /* { dg-options "-Wpadded -Wpacked" } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Derived1: Object
 { }
index 41c4206..b1af6d2 100644 (file)
@@ -3,7 +3,7 @@
 /* Author: Ziemowit Laski <zlaski@apple.com>.  */
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Sprite: Object {
   int sprite, spree;
index 71fc61e..ff59b7e 100644 (file)
@@ -1,7 +1,8 @@
-/* { dg-do run { target *-*-darwin* } } */
+/* { dg-do run } */
+/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
 
-#include <objc/Object.h>
 #include <stdlib.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 typedef struct MyWidget {
   int a;
@@ -35,7 +36,7 @@ MyWidget gWidget = { 17 };
 @implementation Container
 + (MyWidget *)elementForView:(Foo *)view
 {
-  MyWidget *widget = nil;
+  MyWidget *widget = (MyWidget *) nil;
   if ([view conformsTo:@protocol(MyProto)]) {
     widget = [(Foo <MyProto> *)view widget];
   }
@@ -52,3 +53,5 @@ int main(void) {
 
   return 0;
 }
+
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index 5a2a1db..442df69 100644 (file)
@@ -3,8 +3,10 @@
    message sends (so that proper C/C++ argument conversions may
    take place).  */
 /* { dg-do run } */
+/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
+
+#include "../objc-obj-c++-shared/Object1.h"
 
-#include <objc/Object.h>
 extern void abort(void);
 #define CHECK_IF(expr) if(!(expr)) abort()
 
@@ -30,3 +32,4 @@ int main(void)
        return 0;
 }
 
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index c824398..b3e44bd 100644 (file)
@@ -3,6 +3,7 @@
    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/objc.h>
 
index 0ba3625..6a5aec6 100644 (file)
@@ -4,7 +4,7 @@
 
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @class NSString;
 
index 501c2de..3f6d8d0 100644 (file)
@@ -3,7 +3,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;
index 4716371..362d558 100644 (file)
@@ -3,7 +3,7 @@
 
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @class NotKnown;
 
index 65031b0..abee4e0 100644 (file)
@@ -1,9 +1,10 @@
 /* Test for sending messages to aliased classes (and instances thereof).  */
 /* Author: 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/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 extern void abort(void);
 #define CHECK_IF(expr) if(!(expr)) abort()
@@ -43,3 +44,5 @@ int main(void) {
   CHECK_IF([(Int1Alias *)int2typedef instanceMeth] == 1697);
   return 0;
 }
+
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index c8d092d..c5fa1a0 100644 (file)
@@ -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.  */
+   folded. */
 /* Author: Ziemowit Laski <zlaski@apple.com>.  */
-/* { dg-options "-fnext-runtime" } */
-/* { dg-do compile } */
+/* The ABI is different for m64 darwin so skip this test for now */
+/* { dg-do compile { target { *-*-darwin* && { ! lp64 } } } } */
+/* { dg-skip-if "" { *-*-darwin* } { "-fgnu-runtime" } { "" } } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 typedef Object ObjectTypedef1;
 typedef ObjectTypedef1 ObjectTypedef2;
index 8d868d1..c46d9c4 100644 (file)
@@ -4,7 +4,7 @@
 /* { dg-do compile } */
 /* { dg-options "-Wstrict-selector-match" } */
 
-#include <objc/Protocol.h>
+#include "../objc-obj-c++-shared/Protocol1.h"
 
 @interface Base
 - (unsigned)port;
index 310976a..d7a7b97 100644 (file)
@@ -1,10 +1,10 @@
 /* Check if finding multiple signatures for a method is handled gracefully.  */
 /* Author:  Ziemowit Laski <zlaski@apple.com>  */
-
 /* { dg-do compile } */
 /* { dg-options "-Wstrict-selector-match" } */
 
-#include <objc/Object.h>
+
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Class1
 - (void)setWindow:(Object *)wdw;
index d29b888..d755d6a 100644 (file)
@@ -1,11 +1,11 @@
 /* Check if finding multiple signatures for a method is handled gracefully
    when method lookup succeeds (see also method-7.m).  */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>  */
-
 /* { dg-do compile } */
 /* { dg-options "-Wstrict-selector-match" } */
 
-#include <objc/Object.h>
+
+#include "../objc-obj-c++-shared/Object1.h"
 
 @protocol MyObject
 - (id)initWithData:(Object *)data;
index db14897..7d4a7d9 100644 (file)
@@ -3,9 +3,9 @@
 /* Author: Ziemowit Laski <zlaski@apple.com>  */
 
 /* { dg-do compile { target *-*-darwin* } } */
-/* { dg-options "-fnext-runtime" } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface FooBar: Object
 - (void)boo;
index 9b50e83..7503535 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-do compile { target *-*-darwin* } } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
 
 #import <Foundation/Foundation.h>
 main() { [NSObject new]; }
index 8dbcd13..b86e395 100644 (file)
@@ -1,10 +1,9 @@
 /* The code should call objc_msgSend directly, not through a pointer.  */
-/* { dg-do compile { target powerpc*-*-darwin* } } */
-/* { dg-options "-O0 -fnext-runtime" } */
-/* { dg-skip-if "" { powerpc*-*-darwin* } { "-m64" } { "" } } */
+/* { dg-do compile { target *-*-darwin* } } */
+/* { dg-options "-O0" } */
 /* Radar 4015820 */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 void foo(void) {
   Object *o;
index df0a44c..efbde1b 100644 (file)
@@ -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;
 
index 0c3010d..e9527e3 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target *-*-darwin* } } */
+/* { dg-do compile } */
 /* ??? Is there a better pragma that is handled for all targets, not
    handled by the preprocessor, that would be better for testing here?  */
 
index b3ab968..361bb90 100644 (file)
@@ -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;
index 512a59e..1cb7b1d 100644 (file)
@@ -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-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
-#include <objc/Object.h>
-#include <objc/Protocol.h>
 
 @protocol NoInstanceMethods
 + testMethod;
index 126bae7..7c6c62d 100644 (file)
@@ -1,9 +1,10 @@
 /* Check that protocol qualifiers are compiled and encoded properly.  */
 /* Author: 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/Protocol.h>
+#include "../objc-obj-c++-shared/Protocol1.h"
 #ifndef __NEXT_RUNTIME__
 #include <objc/objc-api.h>
 #endif
index b9cc5e0..f0781b6 100644 (file)
@@ -1,7 +1,8 @@
 /* Test warning for non existing selectors.  */
 /* Contributed by Devang Patel <dpatel@apple.com>.  */
-/* { dg-options "-Wselector -fnext-runtime" } */
+/* { dg-options "-Wselector" } */
 /* { dg-do compile } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
 
 typedef struct objc_object { struct objc_class *class_pointer; } *id;
 typedef struct objc_selector    *SEL;
index 3a463c3..ab8eb3e 100644 (file)
@@ -2,7 +2,7 @@
 /* { dg-options "-Wselector" } */
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Foo
 @end
index 49f7e41..b3ffcca 100644 (file)
@@ -1,7 +1,8 @@
 /* Test warning for non-existent selectors.  */
 /* This is the "-fgnu-runtime" variant of objc.dg/selector-1.m.  */
-/* { dg-options "-Wselector -fgnu-runtime" } */
+/* { dg-options "-Wselector" } */
 /* { dg-do compile } */
+/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
 
 typedef struct objc_object { struct objc_class *class_pointer; } *id;
 typedef const struct objc_selector    *SEL;
index 5d8def1..ae505c1 100644 (file)
@@ -1,10 +1,10 @@
 /* Check that the sizeof() operator works with ObjC classes and their aliases. */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
-/* { dg-options "-lobjc" } */
+/* { dg-options "" } */
 /* { dg-do run } */
 
+#include "../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
-#include <objc/Object.h>
 
 extern void abort(void);
 #define CHECK_IF(expr) if(!(expr)) abort();
@@ -31,3 +31,4 @@ int main(void) {
   return 0;
 }
 
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index 55a34c4..fdc90ec 100644 (file)
@@ -33,14 +33,29 @@ dg-init
 # This test is special because we must compile two different modules,
 # unclaimed-category-1a.m and unclaimed-category-1.m, then link
 # together, then run the resulting executable.
-set lines [objc_target_compile "$srcdir/$subdir/unclaimed-category-1a.m" "unclaimed-category-1a.o" object "additional_flags=-I${srcdir}/../../libobjc"]
+# for all systems we point to the libobjc includes and use the -fgnu-runtime
+set add_flags "additional_flags=-I${srcdir}/../../libobjc"
+lappend add_flags "additional_flags=-fgnu-runtime"
+set lines [objc_target_compile "$srcdir/$subdir/unclaimed-category-1a.m" "unclaimed-category-1a.o" object $add_flags ]
 if ![string match "" $lines] then {
     fail "unclaimed-category-1a.o"
 } else {
-    dg-runtest "$srcdir/$subdir/unclaimed-category-1.m" "unclaimed-category-1a.o" "-I${srcdir}/../../libobjc"
+    dg-runtest "$srcdir/$subdir/unclaimed-category-1.m" "unclaimed-category-1a.o" "-I${srcdir}/../../libobjc -fgnu-runtime"
     file delete unclaimed-category-1a.o
 }
 
+if [istarget "*-*-darwin*" ] {
+set add_flags ""
+lappend add_flags "additional_flags=-fnext-runtime"
+set lines [objc_target_compile "$srcdir/$subdir/unclaimed-category-1a.m" "unclaimed-category-1a.o" object $add_flags ]
+if ![string match "" $lines] then {
+    fail "unclaimed-category-1a.o"
+} else {
+    dg-runtest "$srcdir/$subdir/unclaimed-category-1.m" "unclaimed-category-1a.o" "-fnext-runtime"
+    file delete unclaimed-category-1a.o
+}
+}
+
 # All done.
 dg-finish
 
index 52586f0..0453033 100644 (file)
@@ -1,11 +1,4 @@
 /* Contributed by Nicola Pero - Fri Dec 14 08:36:00 GMT 2001 */
-#include <objc/objc.h>
-#include <objc/Object.h>
-
-#ifdef __NEXT_RUNTIME__
-#define objc_get_class(C)                      objc_getClass(C)
-#define class_create_instance(C)               class_createInstance(C, 0)
-#endif
 
 /* Test loading unclaimed categories - categories of a class defined
    separately from the class itself.  */
index b3a8c28..472ad8b 100644 (file)
@@ -1,8 +1,12 @@
 /* Contributed by Nicola Pero - Fri Dec 14 08:36:00 GMT 2001 */
 /* { dg-do run } */
+/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
+
+#import "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
+#ifndef __NEXT_RUNTIME__
 #include <objc/objc-api.h>
-#include <objc/Object.h>
+#endif
 
 extern void abort (void);
 
@@ -69,3 +73,5 @@ int main (void)
 
   return 0;
 }
+
+#import "../../objc-obj-c++-shared/Object1-implementation.h"
index 6bcd1b4..4fb2d46 100644 (file)
@@ -1,6 +1,4 @@
 /* Contributed by Nicola Pero - Fri Dec 14 08:36:00 GMT 2001 */
-#include <objc/objc.h>
-#include <objc/Object.h>
 
 /* Test loading unclaimed categories - categories of a class defined
    separately from the class itself.  */
index 7e13b32..cae7d6d 100644 (file)
@@ -1,8 +1,9 @@
 /* Test for handling of struct-returning methods.  */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
 /* { dg-do run } */
+/* { 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()
@@ -60,3 +61,5 @@ int main(void)
   
   return 0;
 }
+
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index dd9a2e8..ded3ae4 100644 (file)
@@ -3,8 +3,9 @@
    points).  */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
 /* { dg-do compile { target *-*-darwin* } } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 struct astruct {
   float a, b;
index 2b1aa61..72de75b 100644 (file)
@@ -2,6 +2,7 @@
    _objc_msgSend<end-of-line>" without the $stub suffix.  */
 
 /* { dg-do compile { target *-*-darwin* } } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
 /* { dg-options "-Os -mdynamic-no-pic" } */
 
 typedef struct objc_object { } *id ;
index a77ab9f..b474d4f 100644 (file)
@@ -2,6 +2,7 @@
 /* Testcase extracted from TextEdit:Document.m.  */
 
 /* { dg-do compile { target *-*-darwin* } } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
 /* { dg-options "-mdynamic-no-pic -fdump-rtl-jump" } */
 
 typedef struct objc_object { } *id ;
index 15d018e..144ea81 100644 (file)
@@ -1,7 +1,6 @@
 /* Test calling super from within a category class method.  */
 /* Author: Ziemowit Laski <zlaski@apple.com>  */
 /* { dg-do compile } */
-/* { dg-options "-fnext-runtime" } */
 
 typedef struct objc_object { struct objc_class *isa; } *id;
 
index 85396c2..fc74871 100644 (file)
@@ -2,8 +2,10 @@
    is an ObjC class name.  */
 /* 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/Object.h>
 #include <stdlib.h>
 #define CHECK_IF(expr) if(!(expr)) abort()
 
@@ -41,3 +43,4 @@ int main(void) {
   return 0; 
 }
 
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index 5248123..a5ff908 100644 (file)
@@ -3,7 +3,7 @@
    should be traversed to find the @interface.  */
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 @class MyWpModule;
 
index d031cb4..dade208 100644 (file)
@@ -1,9 +1,10 @@
 /* Check if the objc_symtab descriptor is being laid out correctly.  */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
-/* { dg-options "-fnext-runtime" } */
-/* { dg-do compile { target *-*-darwin* } } */
 
-#include <objc/Object.h>
+/* { dg-do compile { target { *-*-darwin* } } } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+
+#include "../objc-obj-c++-shared/Object1.h"
 
 @interface Base: Object 
 - (void)setValues;
index d7035c7..fe1f65c 100644 (file)
@@ -1,8 +1,8 @@
 /* Make sure that @synchronized parses.  */
-/* { dg-options "-fnext-runtime -fobjc-exceptions" } */
+/* { dg-options "-fobjc-exceptions" } */
 /* { dg-do compile } */
 
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
 
 void foo(id sem)
 {
index c47e41c..5b2a209 100644 (file)
@@ -3,7 +3,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>
 
index 1da1b47..49e2c0c 100644 (file)
@@ -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;
index af2829e..2094d29 100644 (file)
@@ -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)
 {
index f833bc2..f943e9c 100644 (file)
@@ -4,7 +4,7 @@
    generating the warning message.  */
 
 /* { dg-do compile } */
-/* { dg-options "-Wall -fnext-runtime -fobjc-exceptions" } */
+/* { dg-options "-Wall -fobjc-exceptions" } */
 
 @interface Exception
 @end
index 5276f0f..548c320 100644 (file)
@@ -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];
index b1e1cd1..b666623 100644 (file)
@@ -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;
index 5f6daa4..454e841 100644 (file)
@@ -5,7 +5,6 @@
 /* { dg-options "-fobjc-exceptions" } */
 /* { dg-do compile } */
 
-
 void foo (int *arg1, int *arg2)
 {
   *arg1 = *arg2;
index da6bdb8..2f8d517 100644 (file)
@@ -3,16 +3,17 @@
    encoded as pointers.  */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
 /* { dg-do run } */
-
-#include <objc/objc.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/objc.h>
 #ifdef __NEXT_RUNTIME__
 #include <objc/objc-runtime.h>
-#define OBJC_GETCLASS objc_getClass
-#define CLASS_GETINSTANCEMETHOD class_getInstanceMethod
+#define METHOD Method
 #else
 #include <objc/objc-api.h>
-#define OBJC_GETCLASS objc_get_class
-#define CLASS_GETINSTANCEMETHOD class_get_instance_method
+#define METHOD Method_t
+#define method_get_types(M) (M)->method_types
 #endif
 
 extern int sscanf(const char *str, const char *format, ...);
@@ -32,27 +33,29 @@ enum Enum { one, two, three, four };
 @end
 
 Class cls;
-struct objc_method *meth;
+METHOD meth ;
+
 unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
 
 static void scan_initial(const char *pattern) {
   totsize = offs0 = offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = offs7 = (unsigned)-1;
-  sscanf(meth->method_types, pattern, &totsize, &offs0, &offs1, &offs2, &offs3,
+  sscanf(method_get_types(meth), pattern, &totsize, &offs0, &offs1, &offs2, &offs3,
       &offs4, &offs5, &offs6, &offs7);
   CHECK_IF(!offs0 && offs1 == sizeof(id) && offs2 == offs1 + sizeof(SEL) && totsize >= offs2);
 }
 
 int main(void) {
-  cls = OBJC_GETCLASS("ArrayTest");
+  cls = objc_get_class("ArrayTest");
 
-  meth = CLASS_GETINSTANCEMETHOD(cls, @selector(str:with:and:));
+  meth = class_get_instance_method(cls, @selector(str:with:and:));
   scan_initial("r*%u@%u:%u*%u*%u[4i]%u");
   CHECK_IF(offs3 == offs2 + sizeof(signed char *) && offs4 == offs3 + sizeof(unsigned char *));
   CHECK_IF(totsize == offs4 + sizeof(enum Enum *));
-  meth = CLASS_GETINSTANCEMETHOD(cls, @selector(meth1:with:with:));
+  meth = class_get_instance_method(cls, @selector(meth1:with:with:));
   scan_initial("i%u@%u:%u^i%u[0i]%u[2i]%u");
   CHECK_IF(offs3 == offs2 + sizeof(int *) && offs4 == offs3 + sizeof(int *));
   CHECK_IF(totsize == offs4 + sizeof(int *));                                           
   return 0;
 }
 
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index edc04e6..33a3091 100644 (file)
@@ -1,5 +1,5 @@
-/* { dg-options "-fgnu-runtime" } */
 /* { dg-do run } */
+/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
 #include <objc/typedstream.h>
 #include <stdio.h>
 #include <stdlib.h>
index beed727..79db876 100644 (file)
@@ -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;
 
index 751b648..15bbe97 100644 (file)
@@ -1,7 +1,9 @@
 /* Based on objc/execute/va_method.m, by Nicola Pero */
 /* { dg-do run } */
+/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
+
+#include "../objc-obj-c++-shared/Object1.h"
 
-#include <objc/Object.h>
 #include <stdarg.h>
 #include <stdlib.h>
 
@@ -67,3 +69,5 @@ int main (void)
   
   return 0;
 }
+
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index 96fd0c2..35cabfa 100644 (file)
@@ -1,10 +1,12 @@
 /* Check if the '-fzero-link' flag correctly emits an objc_getClass() call. */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
-/* { dg-options "-fnext-runtime -fzero-link" } */
-/* { dg-do compile } */
 
+/* { dg-do compile { target *-*-darwin*  } } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+/* { dg-options "-fzero-link" } */
+
+#include "../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
-#include <objc/Object.h>
 
 extern void abort(void);
 #define CHECK_IF(expr) if(!(expr)) abort();
index 8fba042..443090a 100644 (file)
@@ -1,10 +1,12 @@
 /* Check if the '-fno-zero-link' flag correctly _omits_ an objc_getClass() call. */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
-/* { dg-options "-fnext-runtime -fno-zero-link" } */
-/* { dg-do compile } */
 
+/* { dg-do compile { target *-*-darwin* } } */
+/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+/* { dg-options "-fno-zero-link" } */
+
+#include "../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
-#include <objc/Object.h>
 
 extern void abort(void);
 #define CHECK_IF(expr) if(!(expr)) abort();
index af624ab..2b95b95 100644 (file)
@@ -1,10 +1,12 @@
 /* Check that the '-fzero-link' flag doesn't prevent messaging from working. */
 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
-/* { dg-options "-fnext-runtime -fzero-link -lobjc" } */
+
 /* { dg-do run { target *-*-darwin* } } */
+/* { dg-options "-fzero-link" } */
+/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
 
-#import <objc/objc.h>
-#import <objc/Object.h>
+#include "../objc-obj-c++-shared/Object1.h"
+//#import <objc/objc.h>
 
 extern void abort(void);
 #define CHECK_IF(expr) if(!(expr)) abort();
@@ -22,3 +24,5 @@ int main(void) {
   CHECK_IF(val == 1593);
   return 0;
 }
+
+#include "../objc-obj-c++-shared/Object1-implementation.h"
index c256065..207cce8 100644 (file)
@@ -1,4 +1,4 @@
-#import <objc/Object.h>
+#import "../../objc-obj-c++-shared/Object1.h"
 
 int main(void)
 {
index 99f6193..f079097 100644 (file)
@@ -1,9 +1,10 @@
 /* Contributed by Nicola Pero - Fri Mar  9 19:39:15 CET 2001 */
+
+#include <stdlib.h>
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Test getting and calling the IMP of a method */
 
 @interface TestClass
@@ -20,7 +21,6 @@
 }
 @end
 
-
 int main (void)
 {
   Class class;
index 72c555e..6c579d7 100644 (file)
@@ -1,8 +1,8 @@
 /* Contributed by Nicola Pero - Fri Mar  9 19:39:15 CET 2001 */
-#include <objc/objc.h>
-#include <objc/objc-api.h>
 
-#include "next_mapping.h"
+#include <stdlib.h>
+#include "../../objc-obj-c++-shared/next-mapping.h"
+#include <objc/objc-api.h>
 
 /* Test the hidden argument _cmd to method calls */
 
index 2c024f5..dbde8cd 100644 (file)
@@ -1,7 +1,7 @@
 /* Contributed by Nicola Pero - Thu Mar  8 16:27:46 CET 2001 */
-#include <objc/objc.h>
+#include <stdlib.h>
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 /* Test that by using -> we can access ivars of other objects of the same 
    class */
index 9a533a3..d8b9b29 100644 (file)
@@ -1,6 +1,5 @@
-#include <objc/objc.h>
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index 77076da..9f5c7a5 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
@@ -19,4 +19,3 @@
 @end
 
 #include "bf-common.h"
-
index 40d9b53..1779d0f 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index 9e0a989..5a05a09 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index f834933..f893bfd 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index 0ceedc0..8b65a04 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
@@ -22,4 +22,3 @@
 @end
 
 #include "bf-common.h"
-
index e6e7b30..f8d096b 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index fb8b0c3..dea379c 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 struct A {
   int i;
@@ -23,4 +23,3 @@ struct A {
 @end
 
 #include "bf-common.h"
-
index 4c3b854..b36d406 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 struct A {
   int i;
@@ -22,4 +22,3 @@ struct A {
 @end
 
 #include "bf-common.h"
-
index 36a7ea6..96a8aeb 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index 21775e7..8be8ecc 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
@@ -14,4 +14,3 @@
 @end
 
 #include "bf-common.h"
-
index eac0931..bbb6fe1 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index e01f065..00cf99b 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index 2587a0a..423bde0 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 typedef enum 
 {
index 04cf083..a531726 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index ae8017c..8c9aa4e 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index e61d71f..3a2208f 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index 38222d3..1a3c2d8 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index 80ee6ce..c4e8d6e 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
@@ -19,4 +19,3 @@
 @end
 
 #include "bf-common.h"
-
index cc472f9..8dfdccf 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
index 0f17727..077de6c 100644 (file)
@@ -1,6 +1,6 @@
+#import "../../objc-obj-c++-shared/Object1.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
-#include <objc/Object.h>
 
 @interface MyObject
 {
@@ -20,4 +20,3 @@
 @end
 
 #include "bf-common.h"
-
index 6cf7a06..5d6ef57 100644 (file)
@@ -1,7 +1,8 @@
+#include <stdlib.h>
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #ifndef __NEXT_RUNTIME__
 #include <objc/encoding.h>
 #endif
-#include "next_mapping.h"
 
 void print_ivars (Class class)
 {
index 83f4b27..c719d27 100644 (file)
@@ -3,8 +3,7 @@
  * Fri Feb  2 11:48:01 GMT 2001
  */
 
-#include <objc/objc.h>
-#include <objc/Protocol.h>
+#include "../../objc-obj-c++-shared/Protocol1.h"
 
 @protocol MyProtocol
 - (bycopy id) bycopyMethod;
index dce0281..8e7f169 100644 (file)
@@ -3,9 +3,7 @@
  * Fri Feb  2 11:48:01 GMT 2001
  */
 
-#include <objc/objc.h>
-#include <objc/Object.h>
-#include <objc/Protocol.h>
+#include "../../objc-obj-c++-shared/Protocol1.h"
 
 @protocol MyProtocol
 + (bycopy id<MyProtocol>) bycopyMethod;
index 60acde5..d1944a4 100644 (file)
@@ -9,14 +9,12 @@
  * interfere with what we are testing, which is that the `bycopy'
  * keyword generates the _F_BYCOPY qualifier for the return type.  */
 
-#include <objc/objc.h>
-#include <objc/Object.h>
-#include <objc/Protocol.h>
+#include "../../objc-obj-c++-shared/next-mapping.h"
+#include "../../objc-obj-c++-shared/Protocol1.h"
 
 #ifndef __NEXT_RUNTIME__
 #include <objc/encoding.h>
 #endif
-#include "next_mapping.h"
 
 @protocol MyProtocol
 + (bycopy id<MyProtocol>) bycopyMethod;
index 67988a5..b823ea8 100644 (file)
@@ -1,4 +1,5 @@
-#include <objc/Object.h>
+#include <stdlib.h>
+#import "../../objc-obj-c++-shared/Object1.h"
 
 @interface Foo : Object
 + foo;
index 5fd9aa8..2ac2c06 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a RootClass */
 
 @interface RootClass
index d984d62..0908609 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a subclass with an ivar and
    accessor methods and a subclass overriding the superclass'
    implementation, and using self to call another method of itself */
index 00c488b..33cd049 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a subclass with an ivar and
    accessor methods and a subclass overriding the superclass'
    implementation and using self to call another method of itself - in
index fcab65b..3f4c4fb 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a subclass with a class methods */
 
 @interface RootClass
index 98cf0cc..790654d 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a subclass with a class accessor
    methods and a subclass overriding the superclass' implementation
    but reusing it with super */
index 7d02c36..e04452e 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a subclass with a class accessor
    methods and a subclass overriding the superclass' implementation,
    and using self to call another method of itself */
index 350a583..c20f95f 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a subclass */
 
 @interface RootClass
index 5ce8337..dbdc0b9 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a minimal subclass tree */
 
 @interface RootClass
index 34d414b..61ce30a 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a subclass with an ivar and
    accessor methods */
 
index e2b750a..c10df1b 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a subclass with an ivar and
    accessor methods and a subclass overriding the superclass'
    implementation */
index fb2d64b..0644622 100644 (file)
@@ -1,9 +1,9 @@
 /* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
+
+#include "../../objc-obj-c++-shared/next-mapping.h"
 #include <objc/objc.h>
 #include <objc/objc-api.h>
 
-#include "next_mapping.h"
-
 /* Tests creating a root class and a subclass with an ivar and
    accessor methods and a subclass overriding the superclass'
    implementation but reusing it with super */