Commit 88b470b8 by Nicola Pero Committed by Nicola Pero

In gcc/testsuite/: 2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>

In gcc/testsuite/:
2011-06-06  Nicola Pero  <nicola.pero@meta-innovation.com>

	Updated all testcases in the ObjC/ObjC++ testsuites to use the
	Modern Objective-C runtime API.
	* objc/execute/next_mapping.h: Removed.
	* objc-obj-c++-shared/next-mapping.h: Removed.
	* objc-obj-c++-shared/Object1.h: Removed.
	* objc-obj-c++-shared/Object1.m: Removed.
	* objc-obj-c++-shared/Object1.mm: Removed.
	* objc-obj-c++-shared/Object1-implementation.h: Removed.
	* objc-obj-c++-shared/Protocol1.h: Removed.
	* objc-obj-c++-shared/objc-test-suite-types.h: Removed definition
	of ProtoBool, IVAR_T and METHOD.
	* objc-obj-c++-shared/runtime.h: New.
	* objc-obj-c++-shared/TestsuiteObject.h: New.
	* objc-obj-c++-shared/TestsuiteObject.m: New.
	
	* objc/compile/trivial.m: Use TestsuiteObject instead of Object.	
	* objc/execute/IMP.m: Include ../../objc-obj-c++-shared/runtime.h.
	Use the Modern Objective-C runtime API. ([TestClass -next:]): Made
	it a class method.
	* objc/execute/_cmd.m: Include
	../../objc-obj-c++-shared/runtime.h.  Use the Modern Objective-C
	runtime API.  ([TestClass +initialize]): Include this method also
	with the GNU runtime.
	* objc/execute/accessing_ivars.m: Use TestsuiteObject instead of
	Object.  ([-setValue:]): Return void.
	* objc/execute/bf-common.h: Do not include objc/objc-encoding.h
	with the GNU runtime.  Include
	../../objc-obj-c++-shared/runtime.h.  Do not define objc_get_class
	for the NeXT runtime.  Use the existing print_ivars() and
	compare_structures() implementations for the old NeXT runtime.
	Added new implementations for the Modern GNU and NeXT runtimes.
	Enable the testcase (and hence all the bf-* ones) for __OBJC2__ as
	well.  (main): Use objc_getClass().  Use return instead of exit.
	* objc/execute/bycopy-1.m: Include objc/objc.h instead of
	../../objc-obj-c++-shared/Protocol1.h.  (main): Use return instead
	of exit().
	* objc/execute/bycopy-2.m: Include objc/objc.h instead of
	../../objc-obj-c++-shared/Protocol1.h.  Use TestsuiteObject
	instead of Object.  (main): Use return instead of exit().
	* objc/execute/bycopy-3.m: Updated includes.  Use TestsuiteObject
	instead of Object.  Removed prototype for exit().  (main): Use
	return instead of exit().  Use the Modern Objective-C runtime API.
	* objc/execute/cascading-1.m: Use TestsuiteObject instead of
	Object.
	* objc/execute/class-tests-1.h: Include
	../../objc-obj-c++-shared/runtime.h.  Use the Modern Objective-C
	runtime API.  (test_class_with_superclass): Do not call [Object
	class].  There is no need to with the current libobjc.
	* objc/execute/class-tests-2.h: Include
	../../objc-obj-c++-shared/runtime.h.  Use the Modern Objective-C
	runtime API.
	* objc/execute/class-1.m: Do not include <objc/objc-api.h> and
	../../objc-obj-c++-shared/next-mapping.h.
	* objc/execute/class-2.m: Likewise.
	* objc/execute/class-3.m: Likewise.
	* objc/execute/class-4.m: Do not include <objc/objc-api.h> and
	../../objc-obj-c++-shared/next-mapping.h.  ([RootClass
	+initialize]): Include this method also with the GNU
	runtime. (main): Use the Modern Objective-C runtime API.
	* objc/execute/class-5.m: Likewise.
	* objc/execute/class-6.m: Likewise.
	* objc/execute/class-7.m: Likewise.
	* objc/execute/class-8.m: Likewise.
	* objc/execute/class-9.m: Likewise.
	* objc/execute/class-10.m: Likewise.
	* objc/execute/class-11.m: Likewise.
	* objc/execute/class-12.m: Likewise.
	* objc/execute/class-13.m: Likewise.
	* objc/execute/class-14.m: Likewise.
	* objc/execute/class_self-1.m ([TestClass +initialize]): Include
	this method also with the GNU runtime.
	* objc/execute/class_self-2.m: ([TestClass +initialize], [ClassA
	+initialize]): Include this method also with the GNU runtime.
	* objc/execute/compatibility_alias.m: Use TestsuiteObject instead
	of Object.
	* objc/execute/encode-1.m: Likewise.
	* objc/execute/enumeration-1.m: Likewise.
	* objc/execute/enumeration-2.m: Likewise.
	* objc/execute/exceptions/catchall-1.m: Likewise.
	* objc/execute/exceptions/finally-1.m: Likewise.
	* objc/execute/exceptions/foward-1.m: Likewise.
	* objc/execute/exceptions/local-variables-1.m: Likewise.	
	* objc/execute/exceptions/throw-nil.m: Likewise.
	* objc/execute/exceptions/trivial.m: Likewise.
	* objc/execute/exceptions/handler-1.m: Use TestsuiteObject instead
	of Object. Include objc/runtime.h instead of objc/objc-api.h.
	* objc/execute/exceptions/matcher-1.m: Likewise.
	* objc/execute/formal_protocol-1.m: Use TestsuiteObject instead of
	Object.
	* objc/execute/formal_protocol-2.m: Likewise.
	* objc/execute/formal_protocol-3.m: Likewise.
	* objc/execute/formal_protocol-4.m: Likewise.
	* objc/execute/formal_protocol-5.m: Include
	../../objc-obj-c++-shared/runtime.h. (main): Always use
	protocol_getName().
	* objc/execute/formal_protocol-6.m: Likewise.
	* objc/execute/formal_protocol-7.m: Use TestsuiteObject instead of
	Object.  Include <objc/Protocol.h> instead of
	../../objc-obj-c++-shared/Protocol1.h.
	* objc/execute/function-message-1.m: Use TestsuiteObject intead of
	Object.
	* objc/execute/informal_protocol.m: Likewise.
	* objc/execute/load-3.m: Likewise.
	* objc/execute/many_args_method.m ([TestClass +initialize]):
	Include this method with the GNU runtime as well.
	* objc/execute/nested-3.m ([Test +initialize]): Likewise.
	* objc/execute/nested-func-1.m: Use TestsuiteObject
	instead of Object.
	* objc/execute/nil_method-1.m: Likewise.
	* objc/execute/no_clash.m: Likewise.
	* objc/execute/np-1.m: Do not include
	../../objc-obj-c++-shared/Protocol1.h.
	(main): Use return instead of exit().
	* objc/execute/np-2.m: Do not include
	../../objc-obj-c++-shared/Protocol1.h.
	([MyObject +initialize]): Include this method also with the GNU
	runtime.  (main): Use return instead of exit().
	* objc/execute/object_is_class.m: Include
	../../objc-obj-c++-shared/runtime.h.  Use TestsuiteObject instead
	of Object.  (main): Use the Modern Objective-C runtime API.
	* objc/execute/object_is_meta_class.m: Likewise.
	* objc/execute/private.m: Use TestsuiteObject instead of Object.
	* objc/execute/protocol-isEqual-1.m: Include objc/Protocol.h
	instead of ../objc-obj-c++-shared/Protocol1.h.  Include
	../../objc-obj-c++-shared/runtime.h.  (main): Use the Modern
	Objective-C runtime API.
	* objc/execute/protocol-isEqual-2.m: Likewise.
	* objc/execute/protocol-isEqual-3.m: Likewise.
	* objc/execute/protocol-isEqual-4.m: Likewise.
	* objc/execute/redefining_self.m ([TestClass +initialize]):
	Include this method with the GNU runtime as well.
	* objc/execute/root_methods.m: Include
	../../objc-obj-c++-shared/runtime.h.  ([RootClass +initialize]):
	Include this method with the GNU runtime as well.
	(main): Use the Modern Objective-C runtime API.
	* objc/execute/selector-1.m: Include
	../../objc-obj-c++-shared/runtime.h.  Use TestsuiteObject instead
	of Object.  (main): Use the Modern Objective-C runtime API.
	* objc/execute/static-1.m ([Test +initialize]): Include this
	method with the GNU runtime as well.
	* objc/execute/static-2.m: Likewise.
	* objc/execute/trivial.m: Use TestsuiteObject instead of Object.
	* objc/execute/va_method.m: Do not include objc/objc-api.h.
	([MathClass +initialize]): Include this method with the GNU
	runtime as well.
	* objc.dg/attributes/categ-attribute-1.m: Use TestsuiteObject
	instead of Object.
	* obj-c++.dg/attributes/categ-attribute-1.mm: Likewise.	
	* objc.dg/attributes/categ-attributes-2.m: Likewise.
	* obj-c++.dg/attributes/categ-attributes-2.mm: Likewise.
	* objc.dg/attributes/method-attribute-1.m: Likewise.
	* obj-c++.dg/attributes/method-attribute-1.mm: Likewise.	
	* objc.dg/attributes/method-attribute-2.m: Likewise.
	* obj-c++.dg/attributes/method-attribute-2.mm: Likewise.	
	* objc.dg/attributes/method-attribute-3.m: Likewise.
	* obj-c++.dg/attributes/method-attribute-3.mm: Likewise.	
	* obj-c++.dg/basic.mm: Use TestsuiteObject instead of Object.
	* objc.dg/bitfield-1.m: Use TestsuiteObject instead of Object.
	* obj-c++.dg/bitfield-1.mm: Likewise.
	* obj-c++.dg/bitfield-2.mm: Likewise
	* objc.dg/bitfield-3.m: Likewise.
	* obj-c++.dg/bitfield-4.mm: Likewise.
	* objc.dg/bitfield-5.m: Likewise
	* objc.dg/call-super-1.m: Likewise.
	* objc.dg/call-super-2.m: Use TestsuiteObject instead of Object.
	Use objc_getClass() instead of objc_get_class(), but for the GNU
	runtime redefine objc_getClass as objc_get_class.  Include
	../objc-obj-c++-shared/runtime.h.
	* objc.dg/call-super-3.m: Use TestsuiteObject instead of Object.
	* objc.dg/category-1.m: Use TestsuiteObject instead of Object.
	Use the Modern Objective-C runtime API.	
	* objc.dg/class-protocol-1.m: Include
	../objc-obj-c++-shared/runtime.h instead of objc/objc-api.h.
	* obj-c++.dg/class-protocol-1.mm: Likewise.	
	* objc.dg/comp-types-8.m: Use TestsuiteObject instead of Object.
	* objc.dg/comp-types-10.m: Likewise.
	* objc.dg/comp-types-11.m: Likewise.
	* objc.dg/comp-types-12.m: Likewise.
	* obj-c++.dg/comp-types-9.mm: Likewise.
	* obj-c++.dg/comp-types-11.mm: Likewise.
	* obj-c++.dg/comp-types-12.mm: Likewise.
	* obj-c++.dg/comp-types-13.mm: Likewise.
	* obj-c++.dg/cxx-ivars-1.mm: Likewise.
	* obj-c++.dg/cxx-ivars-2.mm: Likewise.
	* obj-c++.dg/cxx-scope-1.mm: Likewise.
	* obj-c++.dg/cxx-scope-2.mm: Likewise.
	* objc.dg/defs.m: Use TestsuiteObject instead of Object.
	* objc.dg/desig-init-1.m: Likewise.
	* obj-c++.dg/defs.mm: Likewise.
	* objc.dg/exceptions-2.m: Likewise.
	* obj-c++.dg/except-1.mm: Likewise.
	* obj-c++.dg/exceptions-2.mm: Likewise.
	* objc.dg/encode-2.m: Use TestsuiteObject instead of Object.
	Use the Modern Objective-C runtime API.
	* objc.dg/encode-3.m: Use TestsuiteObject instead of Object.  Use
	the Modern Objective-C runtime API.  Do not include
	../objc-obj-c++-shared/objc-test-suite-types.h.  Define ProtoBool.
	* objc.dg/encode-4.m: Use TestsuiteObject instead of Object.  Use
	the Modern Objective-C runtime API except when using an older NeXT
	runtime.
	* objc.dg/encode-5.m: Use TestsuiteObject instead of Object.  Use
	the Modern Objective-C runtime API.
	* objc.dg/encode-7.m: Include objc/runtime.h instead of
	objc/encoding.h.	
	* objc.dg/encode-7-next.m: Use TestsuiteObject instead of Object.
	* objc.dg/encode-7-next-64bit.m: Updated include.
	* objc.dg/encode-8.m: Include objc/runtime.h instead of
	objc/encoding.h.
	* obj-c++.dg/encode-4.mm: Use TestsuiteObject instead of Object.  Use
	the Modern Objective-C runtime API.
	* obj-c++.dg/encode-5.mm: Use TestsuiteObject instead of Object.
	Use the Modern Objective-C runtime API.  Include objc/Protocol.h
	instead of ../objc-obj-c++-shared/Protocol1.h.
	* obj-c++.dg/encode-6.mm: Use TestsuiteObject instead of Object.  Use
	the Modern Objective-C runtime API except when using an older NeXT
	runtime.
	* obj-c++.dg/encode-7.mm:  Use TestsuiteObject instead of Object.  Use
	the Modern Objective-C runtime API.	
	* objc.dg/fix-and-continue-1.m: Use TestsuiteObject instead of
	Object.
	* obj-c++.dg/fix-and-continue-2.mm: Likewise.
	* objc.dg/fix-and-continue-2.m: Likewise.
	* objc.dg/foreach-1.m: Likewise.
	* objc.dg/foreach-2.m: Likewise.
	* objc.dg/foreach-3.m: Likewise.
	* objc.dg/foreach-4.m: Likewise.
	* objc.dg/foreach-5.m: Likewise.
	* objc.dg/foreach-6.m: Likewise.
	* objc.dg/foreach-7.m: Likewise.
	* objc.dg/func-ptr-1.m:  Use TestsuiteObject instead of
	Object.
	* objc.dg/func-ptr-2.m: Likewise.
	* objc.dg/fsf-package-0.m: Use TestsuiteObject instead of Object.
	Do not include objc/objc-api.h.
	* obj-c++.dg/fsf-package-0.mm: Likewise.
	* objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c (switchfiles):
	Include objc/runtime.h instead of objc/encoding.h.	
	* objc.dg/gnu-runtime-1.m: Updated to use TestsuiteObject instead
	of Object.
	* obj-c++.dg/gnu-runtime-1.mm: Likewise.
	* objc.dg/gnu-runtime-3.m: Likewise.
	* obj-c++.dg/gnu-runtime-3.mm: Likewise.
	* objc.dg/headers.m: Include objc/runtime.h instead of
	objc/encoding.h for the GNU runtime.  Include objc/objc-api.h only
	for the NeXT runtime.
	* objc.dg/isa-field-1.m: Use TestsuiteObject instead of Object.
	* obj-c++.dg/isa-field-1.mm: Likewise.
	* obj-c++.dg/ivar-list-semi.mm: Likewise.
	* objc.dg/layout-1.m: Likewise.
	* objc.dg/layout-2.m: Likewise.
	* objc.dg/local-decl-2.m: Likewise.
	* objc.dg/lookup-1.m: Use TestsuiteObject instead of
	Object.  ([Container +elementForView:]): Use
	class_conformsToProtocol().
	* obj-c++.dg/lookup-2.mm: Likewise.
	* obj-c++.dg/layout-1.mm: Use TestsuiteObject instead of Object.
	* obj-c++.dg/local-decl-1.mm: Likewise.
	* objc.dg/method-3.m: Likewise.
	* objc.dg/method-4.m: Likewise.
	* objc.dg/method-6.m: Include objc/Protocol.h instead of
	../objc-obj-c++-shared/Protocol1.h.
	* objc.dg/method-7.m: Use TestsuiteObject instead of Object.
	* objc.dg/method-9.m: Likewise.
	* objc.dg/method-10.m: Likewise.
	* objc.dg/method-13.m ([Root +initialize]): Include this method
	also for the GNU runtime.  (main): Use objc_getClass() also for
	the GNU runtime.
	* objc.dg/method-15.m: Use TestsuiteObject instead of Object.
	* objc.dg/method-17.m: Likewise.
	* objc.dg/method-19.m: Likewise.
	* objc.dg/method-20b.m: Likewise.
	* obj-c++.dg/method-2.mm: Likewise.
	* obj-c++.dg/method-6.mm: Likewise.
	* obj-c++.dg/method-10.mm: Likewise.
	* obj-c++.dg/method-11.mm: Likewise.
	* obj-c++.dg/method-12.mm: Include objc/Protocol.h instead of
	../objc-obj-c++-shared/Protocol1.h.
	* obj-c++.dg/method-13.mm: Use TestsuiteObject instead of Object.
	* obj-c++.dg/method-15.mm: Likewise.
	* obj-c++.dg/method-17.mm: Likewise.
	* obj-c++.dg/method-19.mm: Updated includes.  ([Root
	+initialize]): Include this method also for the GNU
	runtime.  (main): Use objc_getClass() also for the GNU runtime.
	* obj-c++.dg/method-21.mm: Use TestsuiteObject instead of Object.
	* obj-c++.dg/method-22.mm: Likewise.
	* obj-c++.dg/method-23.mm: Likewise.
	* obj-c++.dg/no-extra-load.mm: Likewise.
	* objc.dg/objc-fast-4.m: Likewise.
	* objc.dg/objc-gc-4.m: Likewise.
	* obj-c++.dg/objc-gc-3.mm: Likewise.
	* objc.dg/pr18255.m: Include objc/runtime.h.  (main): Use
	protocol_getMethodDescription() instead of [Protocol
	-descriptionForInstanceMethod].
	* objc.dg/pr23214.m ([Object(TS_CAT) -class]): Renamed to test.
	Made it available with all runtimes.  (main): Call -test instead
	of -class.
	* objc.dg/pr45878.m ([Object -isEqual:]): Renamed to testIsEqual,
	and put into a category.
	* objc.dg/proto-lossage-2.m: Use TestsuiteObject instead of
	Object.  Include objc/objc.h.
	* obj-c++.dg/proto-lossage-2.mm: Likewise.
	* objc.dg/proto-lossage-3.m: Updated includes.  (MyClass):
	New. (main): Use protocol_getMethodDescription() instead
	of [Protocol -descriptionForInstanceMethod] and [Protocol
	-descriptionForClassMethod].
	* obj-c++.dg/proto-lossage-3.mm: Likewise.
	* objc.dg/proto-qual-1.m: Updated includes.  Use the Modern
	Objective-C runtime API.
	* obj-c++.dg/proto-qual-1.mm: Likewise.	
	* objc.dg/property/property-1.m: Use TestsuiteObject instead of
	Object.
	* obj-c++.dg/property/property-1.mm: Likewise.
	* obj-c++.dg/qual-types-1.mm: Likewise.
	* objc.dg/selector-2.m: Include objc/objc.h instead of
	../objc-obj-c++-shared/Object1.h.
	* obj-c++.dg/selector-2.mm: Likewise.
	* obj-c++.dg/selector-5.mm: Likewise.
	* obj-c++.dg/selector-6.mm: Likewise.
	* objc.dg/set-not-used-1.m: Use TestsuiteObject instead of
	Object.  Do not include objc/objc-api.h.
	* obj-c++.dg/set-not-used-1.mm: Likewise.
	* objc.dg/sizeof-1.m: Use TestsuiteObject instead of Object.
	* objc.dg/stret-1.m: Likewise.
	* objc.dg/stret-2.m: Likewise.
	* obj-c++.dg/super-class-2.mm: Likewise.
	* objc.dg/super-class-3.m: Likewise.
	* objc.dg/super-class-4.m: Likewise.
	* objc.dg/sync-2.m: Likewise.
	* obj-c++.dg/sync-2.mm: Likewise.
	* objc.dg/sync-1.m: Include objc/objc.h instead of
	../objc-obj-c++-shared/Object1.h.
	* objc.dg/special/unclaimed-category-1.h (TestClass): Always use
	'Class' as the type of 'isa'.
	* objc.dg/special/unclaimed-category-1.m: Use the Modern
	Objective-C runtime API.  ([TestClass +initialize]): Include this
	method with the GNU runtime as well.
	* objc.dg/strings/strings-1.m: Updated includes.
	* obj-c++.dg/strings/strings-1.mm: Likewise.
	* obj-c++.dg/strings/const-str-12.mm: Updated to be identical to
	objc.dg/strings/const-str-12b.m.
	* obj-c++.dg/template-1.mm: Use TestsuiteObject intead of Object.
	* obj-c++.dg/template-3.mm: Likewise.
	* obj-c++.dg/template-4.mm: Likewise.
	* objc.dg/threedotthree-abi-1.m: Updated includes.  Use Modern
	Objective-C runtime API.
	* obj-c++.dg/threedotthree-abi-1.mm: Likewise.
	* objc.dg/try-catch-1.m: Use TestsuiteObject instead of Object.
	* obj-c++.dg/try-catch-1.mm: Likewise.
	* obj-c++.dg/try-catch-2.mm: Likewise.
	* objc.dg/try-catch-3.m: Likewise.
	* obj-c++.dg/try-catch-3.mm: Likewise.
	* objc.dg/try-catch-6.m: Likewise.
	* objc.dg/try-catch-7.m: Likewise.
	* obj-c++.dg/try-catch-7.mm: Likewise.
	* obj-c++.dg/try-catch-8.mm: Likewise.
	* obj-c++.dg/try-catch-9.mm: Likewise.
	* objc.dg/try-catch-10.m: Likewise.
	* obj-c++.dg/try-catch-11.mm: Likewise.
	* objc.dg/typedef-alias-1.m: Use TestsuiteObject instead of
	Object.  Include objc/objc.h.
	* obj-c++.dg/typedef-alias-1.mm: Likewise.
	* objc.dg/type-size-2.m: Use the Modern Objective-C runtime API.
	* objc.dg/torture/forward-1.m: Use TestsuiteObject intead of
	Object.  Use Modern Objective-C runtime API.  Do not use
	performv::.
	* objc.dg/torture/trivial.m: Use TestsuiteObject intead of Object.
	* obj-c++.dg/torture/trivial.mm: Likewise.	
	* objc.dg/torture/strings/const-str-10.m: Include objc/Object.h
	instead of ../objc-obj-c++-shared/Object1.h.  Include
	../objc-obj-c++-shared/runtime.h.
	* obj-c++.dg/torture/strings/const-str-10.mm: Likewise.
	* objc.dg/torture/strings/const-str-11.m: Likewise.
	* obj-c++.dg/torture/strings/const-str-11.mm: Likewise.
	* objc.dg/torture/strings/const-str-9.m: Likewise.
	* obj-c++.dg/torture/strings/const-str-9.mm: Likewise.
	* objc.dg/torture/strings/const-str-7.m: Use TestsuiteObject
	instead of Object. Only add _FooClassReference if
	__NEXT_RUNTIME__.
	* obj-c++.dg/torture/strings/const-str-7.mm: Likewise.
	* objc.dg/torture/strings/const-str-8.m: Likewise.
	* obj-c++.dg/torture/strings/const-str-8.mm: Likewise.
	* obj-c++.dg/torture/strings/string1.mm: Updated includes and
	additional sources.
	* objc.dg/torture/tls/thr-init-3.m: Use TestsuiteObject instead of
	Object.
	* obj-c++.dg/torture/tls/thr-init-3.mm: Likewise.
	* objc.dg/va-meth-1.m: Use TestsuiteObject instead of Object.
	* obj-c++.dg/va-meth-1.mm: Likewise.
	* objc.dg/zero-link-1.m: Include objc/Object.h instead of
	../objc-obj-c++-shared/Object1.h.
	* objc.dg/zero-link-3.m: Likewise.	
	
2011-06-06  Nicola Pero  <nicola.pero@meta-innovation.com>

	* obj-c++.dg/try-catch-2.mm: Fixed unterminated comment.

From-SVN: r174727
parent 889ec771
2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>
Updated all testcases in the ObjC/ObjC++ testsuites to use the
Modern Objective-C runtime API.
* objc/execute/next_mapping.h: Removed.
* objc-obj-c++-shared/next-mapping.h: Removed.
* objc-obj-c++-shared/Object1.h: Removed.
* objc-obj-c++-shared/Object1.m: Removed.
* objc-obj-c++-shared/Object1.mm: Removed.
* objc-obj-c++-shared/Object1-implementation.h: Removed.
* objc-obj-c++-shared/Protocol1.h: Removed.
* objc-obj-c++-shared/objc-test-suite-types.h: Removed definition
of ProtoBool, IVAR_T and METHOD.
* objc-obj-c++-shared/runtime.h: New.
* objc-obj-c++-shared/TestsuiteObject.h: New.
* objc-obj-c++-shared/TestsuiteObject.m: New.
* objc/compile/trivial.m: Use TestsuiteObject instead of Object.
* objc/execute/IMP.m: Include ../../objc-obj-c++-shared/runtime.h.
Use the Modern Objective-C runtime API. ([TestClass -next:]): Made
it a class method.
* objc/execute/_cmd.m: Include
../../objc-obj-c++-shared/runtime.h. Use the Modern Objective-C
runtime API. ([TestClass +initialize]): Include this method also
with the GNU runtime.
* objc/execute/accessing_ivars.m: Use TestsuiteObject instead of
Object. ([-setValue:]): Return void.
* objc/execute/bf-common.h: Do not include objc/objc-encoding.h
with the GNU runtime. Include
../../objc-obj-c++-shared/runtime.h. Do not define objc_get_class
for the NeXT runtime. Use the existing print_ivars() and
compare_structures() implementations for the old NeXT runtime.
Added new implementations for the Modern GNU and NeXT runtimes.
Enable the testcase (and hence all the bf-* ones) for __OBJC2__ as
well. (main): Use objc_getClass(). Use return instead of exit.
* objc/execute/bycopy-1.m: Include objc/objc.h instead of
../../objc-obj-c++-shared/Protocol1.h. (main): Use return instead
of exit().
* objc/execute/bycopy-2.m: Include objc/objc.h instead of
../../objc-obj-c++-shared/Protocol1.h. Use TestsuiteObject
instead of Object. (main): Use return instead of exit().
* objc/execute/bycopy-3.m: Updated includes. Use TestsuiteObject
instead of Object. Removed prototype for exit(). (main): Use
return instead of exit(). Use the Modern Objective-C runtime API.
* objc/execute/cascading-1.m: Use TestsuiteObject instead of
Object.
* objc/execute/class-tests-1.h: Include
../../objc-obj-c++-shared/runtime.h. Use the Modern Objective-C
runtime API. (test_class_with_superclass): Do not call [Object
class]. There is no need to with the current libobjc.
* objc/execute/class-tests-2.h: Include
../../objc-obj-c++-shared/runtime.h. Use the Modern Objective-C
runtime API.
* objc/execute/class-1.m: Do not include <objc/objc-api.h> and
../../objc-obj-c++-shared/next-mapping.h.
* objc/execute/class-2.m: Likewise.
* objc/execute/class-3.m: Likewise.
* objc/execute/class-4.m: Do not include <objc/objc-api.h> and
../../objc-obj-c++-shared/next-mapping.h. ([RootClass
+initialize]): Include this method also with the GNU
runtime. (main): Use the Modern Objective-C runtime API.
* objc/execute/class-5.m: Likewise.
* objc/execute/class-6.m: Likewise.
* objc/execute/class-7.m: Likewise.
* objc/execute/class-8.m: Likewise.
* objc/execute/class-9.m: Likewise.
* objc/execute/class-10.m: Likewise.
* objc/execute/class-11.m: Likewise.
* objc/execute/class-12.m: Likewise.
* objc/execute/class-13.m: Likewise.
* objc/execute/class-14.m: Likewise.
* objc/execute/class_self-1.m ([TestClass +initialize]): Include
this method also with the GNU runtime.
* objc/execute/class_self-2.m: ([TestClass +initialize], [ClassA
+initialize]): Include this method also with the GNU runtime.
* objc/execute/compatibility_alias.m: Use TestsuiteObject instead
of Object.
* objc/execute/encode-1.m: Likewise.
* objc/execute/enumeration-1.m: Likewise.
* objc/execute/enumeration-2.m: Likewise.
* objc/execute/exceptions/catchall-1.m: Likewise.
* objc/execute/exceptions/finally-1.m: Likewise.
* objc/execute/exceptions/foward-1.m: Likewise.
* objc/execute/exceptions/local-variables-1.m: Likewise.
* objc/execute/exceptions/throw-nil.m: Likewise.
* objc/execute/exceptions/trivial.m: Likewise.
* objc/execute/exceptions/handler-1.m: Use TestsuiteObject instead
of Object. Include objc/runtime.h instead of objc/objc-api.h.
* objc/execute/exceptions/matcher-1.m: Likewise.
* objc/execute/formal_protocol-1.m: Use TestsuiteObject instead of
Object.
* objc/execute/formal_protocol-2.m: Likewise.
* objc/execute/formal_protocol-3.m: Likewise.
* objc/execute/formal_protocol-4.m: Likewise.
* objc/execute/formal_protocol-5.m: Include
../../objc-obj-c++-shared/runtime.h. (main): Always use
protocol_getName().
* objc/execute/formal_protocol-6.m: Likewise.
* objc/execute/formal_protocol-7.m: Use TestsuiteObject instead of
Object. Include <objc/Protocol.h> instead of
../../objc-obj-c++-shared/Protocol1.h.
* objc/execute/function-message-1.m: Use TestsuiteObject intead of
Object.
* objc/execute/informal_protocol.m: Likewise.
* objc/execute/load-3.m: Likewise.
* objc/execute/many_args_method.m ([TestClass +initialize]):
Include this method with the GNU runtime as well.
* objc/execute/nested-3.m ([Test +initialize]): Likewise.
* objc/execute/nested-func-1.m: Use TestsuiteObject
instead of Object.
* objc/execute/nil_method-1.m: Likewise.
* objc/execute/no_clash.m: Likewise.
* objc/execute/np-1.m: Do not include
../../objc-obj-c++-shared/Protocol1.h.
(main): Use return instead of exit().
* objc/execute/np-2.m: Do not include
../../objc-obj-c++-shared/Protocol1.h.
([MyObject +initialize]): Include this method also with the GNU
runtime. (main): Use return instead of exit().
* objc/execute/object_is_class.m: Include
../../objc-obj-c++-shared/runtime.h. Use TestsuiteObject instead
of Object. (main): Use the Modern Objective-C runtime API.
* objc/execute/object_is_meta_class.m: Likewise.
* objc/execute/private.m: Use TestsuiteObject instead of Object.
* objc/execute/protocol-isEqual-1.m: Include objc/Protocol.h
instead of ../objc-obj-c++-shared/Protocol1.h. Include
../../objc-obj-c++-shared/runtime.h. (main): Use the Modern
Objective-C runtime API.
* objc/execute/protocol-isEqual-2.m: Likewise.
* objc/execute/protocol-isEqual-3.m: Likewise.
* objc/execute/protocol-isEqual-4.m: Likewise.
* objc/execute/redefining_self.m ([TestClass +initialize]):
Include this method with the GNU runtime as well.
* objc/execute/root_methods.m: Include
../../objc-obj-c++-shared/runtime.h. ([RootClass +initialize]):
Include this method with the GNU runtime as well.
(main): Use the Modern Objective-C runtime API.
* objc/execute/selector-1.m: Include
../../objc-obj-c++-shared/runtime.h. Use TestsuiteObject instead
of Object. (main): Use the Modern Objective-C runtime API.
* objc/execute/static-1.m ([Test +initialize]): Include this
method with the GNU runtime as well.
* objc/execute/static-2.m: Likewise.
* objc/execute/trivial.m: Use TestsuiteObject instead of Object.
* objc/execute/va_method.m: Do not include objc/objc-api.h.
([MathClass +initialize]): Include this method with the GNU
runtime as well.
* objc.dg/attributes/categ-attribute-1.m: Use TestsuiteObject
instead of Object.
* obj-c++.dg/attributes/categ-attribute-1.mm: Likewise.
* objc.dg/attributes/categ-attributes-2.m: Likewise.
* obj-c++.dg/attributes/categ-attributes-2.mm: Likewise.
* objc.dg/attributes/method-attribute-1.m: Likewise.
* obj-c++.dg/attributes/method-attribute-1.mm: Likewise.
* objc.dg/attributes/method-attribute-2.m: Likewise.
* obj-c++.dg/attributes/method-attribute-2.mm: Likewise.
* objc.dg/attributes/method-attribute-3.m: Likewise.
* obj-c++.dg/attributes/method-attribute-3.mm: Likewise.
* obj-c++.dg/basic.mm: Use TestsuiteObject instead of Object.
* objc.dg/bitfield-1.m: Use TestsuiteObject instead of Object.
* obj-c++.dg/bitfield-1.mm: Likewise.
* obj-c++.dg/bitfield-2.mm: Likewise
* objc.dg/bitfield-3.m: Likewise.
* obj-c++.dg/bitfield-4.mm: Likewise.
* objc.dg/bitfield-5.m: Likewise
* objc.dg/call-super-1.m: Likewise.
* objc.dg/call-super-2.m: Use TestsuiteObject instead of Object.
Use objc_getClass() instead of objc_get_class(), but for the GNU
runtime redefine objc_getClass as objc_get_class. Include
../objc-obj-c++-shared/runtime.h.
* objc.dg/call-super-3.m: Use TestsuiteObject instead of Object.
* objc.dg/category-1.m: Use TestsuiteObject instead of Object.
Use the Modern Objective-C runtime API.
* objc.dg/class-protocol-1.m: Include
../objc-obj-c++-shared/runtime.h instead of objc/objc-api.h.
* obj-c++.dg/class-protocol-1.mm: Likewise.
* objc.dg/comp-types-8.m: Use TestsuiteObject instead of Object.
* objc.dg/comp-types-10.m: Likewise.
* objc.dg/comp-types-11.m: Likewise.
* objc.dg/comp-types-12.m: Likewise.
* obj-c++.dg/comp-types-9.mm: Likewise.
* obj-c++.dg/comp-types-11.mm: Likewise.
* obj-c++.dg/comp-types-12.mm: Likewise.
* obj-c++.dg/comp-types-13.mm: Likewise.
* obj-c++.dg/cxx-ivars-1.mm: Likewise.
* obj-c++.dg/cxx-ivars-2.mm: Likewise.
* obj-c++.dg/cxx-scope-1.mm: Likewise.
* obj-c++.dg/cxx-scope-2.mm: Likewise.
* objc.dg/defs.m: Use TestsuiteObject instead of Object.
* objc.dg/desig-init-1.m: Likewise.
* obj-c++.dg/defs.mm: Likewise.
* objc.dg/exceptions-2.m: Likewise.
* obj-c++.dg/except-1.mm: Likewise.
* obj-c++.dg/exceptions-2.mm: Likewise.
* objc.dg/encode-2.m: Use TestsuiteObject instead of Object.
Use the Modern Objective-C runtime API.
* objc.dg/encode-3.m: Use TestsuiteObject instead of Object. Use
the Modern Objective-C runtime API. Do not include
../objc-obj-c++-shared/objc-test-suite-types.h. Define ProtoBool.
* objc.dg/encode-4.m: Use TestsuiteObject instead of Object. Use
the Modern Objective-C runtime API except when using an older NeXT
runtime.
* objc.dg/encode-5.m: Use TestsuiteObject instead of Object. Use
the Modern Objective-C runtime API.
* objc.dg/encode-7.m: Include objc/runtime.h instead of
objc/encoding.h.
* objc.dg/encode-7-next.m: Use TestsuiteObject instead of Object.
* objc.dg/encode-7-next-64bit.m: Updated include.
* objc.dg/encode-8.m: Include objc/runtime.h instead of
objc/encoding.h.
* obj-c++.dg/encode-4.mm: Use TestsuiteObject instead of Object. Use
the Modern Objective-C runtime API.
* obj-c++.dg/encode-5.mm: Use TestsuiteObject instead of Object.
Use the Modern Objective-C runtime API. Include objc/Protocol.h
instead of ../objc-obj-c++-shared/Protocol1.h.
* obj-c++.dg/encode-6.mm: Use TestsuiteObject instead of Object. Use
the Modern Objective-C runtime API except when using an older NeXT
runtime.
* obj-c++.dg/encode-7.mm: Use TestsuiteObject instead of Object. Use
the Modern Objective-C runtime API.
* objc.dg/fix-and-continue-1.m: Use TestsuiteObject instead of
Object.
* obj-c++.dg/fix-and-continue-2.mm: Likewise.
* objc.dg/fix-and-continue-2.m: Likewise.
* objc.dg/foreach-1.m: Likewise.
* objc.dg/foreach-2.m: Likewise.
* objc.dg/foreach-3.m: Likewise.
* objc.dg/foreach-4.m: Likewise.
* objc.dg/foreach-5.m: Likewise.
* objc.dg/foreach-6.m: Likewise.
* objc.dg/foreach-7.m: Likewise.
* objc.dg/func-ptr-1.m: Use TestsuiteObject instead of
Object.
* objc.dg/func-ptr-2.m: Likewise.
* objc.dg/fsf-package-0.m: Use TestsuiteObject instead of Object.
Do not include objc/objc-api.h.
* obj-c++.dg/fsf-package-0.mm: Likewise.
* objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c (switchfiles):
Include objc/runtime.h instead of objc/encoding.h.
* objc.dg/gnu-runtime-1.m: Updated to use TestsuiteObject instead
of Object.
* obj-c++.dg/gnu-runtime-1.mm: Likewise.
* objc.dg/gnu-runtime-3.m: Likewise.
* obj-c++.dg/gnu-runtime-3.mm: Likewise.
* objc.dg/headers.m: Include objc/runtime.h instead of
objc/encoding.h for the GNU runtime. Include objc/objc-api.h only
for the NeXT runtime.
* objc.dg/isa-field-1.m: Use TestsuiteObject instead of Object.
* obj-c++.dg/isa-field-1.mm: Likewise.
* obj-c++.dg/ivar-list-semi.mm: Likewise.
* objc.dg/layout-1.m: Likewise.
* objc.dg/layout-2.m: Likewise.
* objc.dg/local-decl-2.m: Likewise.
* objc.dg/lookup-1.m: Use TestsuiteObject instead of
Object. ([Container +elementForView:]): Use
class_conformsToProtocol().
* obj-c++.dg/lookup-2.mm: Likewise.
* obj-c++.dg/layout-1.mm: Use TestsuiteObject instead of Object.
* obj-c++.dg/local-decl-1.mm: Likewise.
* objc.dg/method-3.m: Likewise.
* objc.dg/method-4.m: Likewise.
* objc.dg/method-6.m: Include objc/Protocol.h instead of
../objc-obj-c++-shared/Protocol1.h.
* objc.dg/method-7.m: Use TestsuiteObject instead of Object.
* objc.dg/method-9.m: Likewise.
* objc.dg/method-10.m: Likewise.
* objc.dg/method-13.m ([Root +initialize]): Include this method
also for the GNU runtime. (main): Use objc_getClass() also for
the GNU runtime.
* objc.dg/method-15.m: Use TestsuiteObject instead of Object.
* objc.dg/method-17.m: Likewise.
* objc.dg/method-19.m: Likewise.
* objc.dg/method-20b.m: Likewise.
* obj-c++.dg/method-2.mm: Likewise.
* obj-c++.dg/method-6.mm: Likewise.
* obj-c++.dg/method-10.mm: Likewise.
* obj-c++.dg/method-11.mm: Likewise.
* obj-c++.dg/method-12.mm: Include objc/Protocol.h instead of
../objc-obj-c++-shared/Protocol1.h.
* obj-c++.dg/method-13.mm: Use TestsuiteObject instead of Object.
* obj-c++.dg/method-15.mm: Likewise.
* obj-c++.dg/method-17.mm: Likewise.
* obj-c++.dg/method-19.mm: Updated includes. ([Root
+initialize]): Include this method also for the GNU
runtime. (main): Use objc_getClass() also for the GNU runtime.
* obj-c++.dg/method-21.mm: Use TestsuiteObject instead of Object.
* obj-c++.dg/method-22.mm: Likewise.
* obj-c++.dg/method-23.mm: Likewise.
* obj-c++.dg/no-extra-load.mm: Likewise.
* objc.dg/objc-fast-4.m: Likewise.
* objc.dg/objc-gc-4.m: Likewise.
* obj-c++.dg/objc-gc-3.mm: Likewise.
* objc.dg/pr18255.m: Include objc/runtime.h. (main): Use
protocol_getMethodDescription() instead of [Protocol
-descriptionForInstanceMethod].
* objc.dg/pr23214.m ([Object(TS_CAT) -class]): Renamed to test.
Made it available with all runtimes. (main): Call -test instead
of -class.
* objc.dg/pr45878.m ([Object -isEqual:]): Renamed to testIsEqual,
and put into a category.
* objc.dg/proto-lossage-2.m: Use TestsuiteObject instead of
Object. Include objc/objc.h.
* obj-c++.dg/proto-lossage-2.mm: Likewise.
* objc.dg/proto-lossage-3.m: Updated includes. (MyClass):
New. (main): Use protocol_getMethodDescription() instead
of [Protocol -descriptionForInstanceMethod] and [Protocol
-descriptionForClassMethod].
* obj-c++.dg/proto-lossage-3.mm: Likewise.
* objc.dg/proto-qual-1.m: Updated includes. Use the Modern
Objective-C runtime API.
* obj-c++.dg/proto-qual-1.mm: Likewise.
* objc.dg/property/property-1.m: Use TestsuiteObject instead of
Object.
* obj-c++.dg/property/property-1.mm: Likewise.
* obj-c++.dg/qual-types-1.mm: Likewise.
* objc.dg/selector-2.m: Include objc/objc.h instead of
../objc-obj-c++-shared/Object1.h.
* obj-c++.dg/selector-2.mm: Likewise.
* obj-c++.dg/selector-5.mm: Likewise.
* obj-c++.dg/selector-6.mm: Likewise.
* objc.dg/set-not-used-1.m: Use TestsuiteObject instead of
Object. Do not include objc/objc-api.h.
* obj-c++.dg/set-not-used-1.mm: Likewise.
* objc.dg/sizeof-1.m: Use TestsuiteObject instead of Object.
* objc.dg/stret-1.m: Likewise.
* objc.dg/stret-2.m: Likewise.
* obj-c++.dg/super-class-2.mm: Likewise.
* objc.dg/super-class-3.m: Likewise.
* objc.dg/super-class-4.m: Likewise.
* objc.dg/sync-2.m: Likewise.
* obj-c++.dg/sync-2.mm: Likewise.
* objc.dg/sync-1.m: Include objc/objc.h instead of
../objc-obj-c++-shared/Object1.h.
* objc.dg/special/unclaimed-category-1.h (TestClass): Always use
'Class' as the type of 'isa'.
* objc.dg/special/unclaimed-category-1.m: Use the Modern
Objective-C runtime API. ([TestClass +initialize]): Include this
method with the GNU runtime as well.
* objc.dg/strings/strings-1.m: Updated includes.
* obj-c++.dg/strings/strings-1.mm: Likewise.
* obj-c++.dg/strings/const-str-12.mm: Updated to be identical to
objc.dg/strings/const-str-12b.m.
* obj-c++.dg/template-1.mm: Use TestsuiteObject intead of Object.
* obj-c++.dg/template-3.mm: Likewise.
* obj-c++.dg/template-4.mm: Likewise.
* objc.dg/threedotthree-abi-1.m: Updated includes. Use Modern
Objective-C runtime API.
* obj-c++.dg/threedotthree-abi-1.mm: Likewise.
* objc.dg/try-catch-1.m: Use TestsuiteObject instead of Object.
* obj-c++.dg/try-catch-1.mm: Likewise.
* obj-c++.dg/try-catch-2.mm: Likewise.
* objc.dg/try-catch-3.m: Likewise.
* obj-c++.dg/try-catch-3.mm: Likewise.
* objc.dg/try-catch-6.m: Likewise.
* objc.dg/try-catch-7.m: Likewise.
* obj-c++.dg/try-catch-7.mm: Likewise.
* obj-c++.dg/try-catch-8.mm: Likewise.
* obj-c++.dg/try-catch-9.mm: Likewise.
* objc.dg/try-catch-10.m: Likewise.
* obj-c++.dg/try-catch-11.mm: Likewise.
* objc.dg/typedef-alias-1.m: Use TestsuiteObject instead of
Object. Include objc/objc.h.
* obj-c++.dg/typedef-alias-1.mm: Likewise.
* objc.dg/type-size-2.m: Use the Modern Objective-C runtime API.
* objc.dg/torture/forward-1.m: Use TestsuiteObject intead of
Object. Use Modern Objective-C runtime API. Do not use
performv::.
* objc.dg/torture/trivial.m: Use TestsuiteObject intead of Object.
* obj-c++.dg/torture/trivial.mm: Likewise.
* objc.dg/torture/strings/const-str-10.m: Include objc/Object.h
instead of ../objc-obj-c++-shared/Object1.h. Include
../objc-obj-c++-shared/runtime.h.
* obj-c++.dg/torture/strings/const-str-10.mm: Likewise.
* objc.dg/torture/strings/const-str-11.m: Likewise.
* obj-c++.dg/torture/strings/const-str-11.mm: Likewise.
* objc.dg/torture/strings/const-str-9.m: Likewise.
* obj-c++.dg/torture/strings/const-str-9.mm: Likewise.
* objc.dg/torture/strings/const-str-7.m: Use TestsuiteObject
instead of Object. Only add _FooClassReference if
__NEXT_RUNTIME__.
* obj-c++.dg/torture/strings/const-str-7.mm: Likewise.
* objc.dg/torture/strings/const-str-8.m: Likewise.
* obj-c++.dg/torture/strings/const-str-8.mm: Likewise.
* obj-c++.dg/torture/strings/string1.mm: Updated includes and
additional sources.
* objc.dg/torture/tls/thr-init-3.m: Use TestsuiteObject instead of
Object.
* obj-c++.dg/torture/tls/thr-init-3.mm: Likewise.
* objc.dg/va-meth-1.m: Use TestsuiteObject instead of Object.
* obj-c++.dg/va-meth-1.mm: Likewise.
* objc.dg/zero-link-1.m: Include objc/Object.h instead of
../objc-obj-c++-shared/Object1.h.
* objc.dg/zero-link-3.m: Likewise.
2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>
* obj-c++.dg/try-catch-2.mm: Fixed unterminated comment.
2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc-++/48275
* obj-c++.dg/property/cxx-property-1.mm: New.
* obj-c++.dg/property/cxx-property-2.mm: New.
......
/* { dg-do compile } */
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
/* { dg-do compile } */
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
/* { dg-do compile } */
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
/* { dg-do compile } */
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
/* { dg-do compile } */
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
......@@ -2,27 +2,10 @@
// { dg-do run }
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
//#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <iostream>
#include <objc/Object.h>
#ifdef __OBJC2__
@interface Object (ADDITIONS)
+ + initialize;
- - init;
+ + alloc;
+ + new;
@end
@implementation Object (ADDITIONS)
+ + initialize { return self; }
- init { return self; }
+ alloc { return class_createInstance (self, 0); }
+ new { return [[self alloc] init]; }
@end
#endif
@interface Greeter : Object
@interface Greeter : TestsuiteObject
- (void) greet: (const char *)msg;
@end
......@@ -38,4 +21,4 @@ main ()
Greeter *obj = [Greeter new];
[obj greet: "Hello from Objective-C++"];
}
//#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -9,7 +9,7 @@
/* Leave blank lines here to keep warnings on the same lines. */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
#include <stdlib.h>
......@@ -17,7 +17,7 @@
enum Enum { zero, one, two, three, four };
@interface Base: Object {
@interface Base: TestsuiteObject {
@public
unsigned a: 2;
int b: 3;
......
......@@ -4,12 +4,12 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort();
@interface Base: Object
@interface Base: TestsuiteObject
{
int full;
int full2: 32;
......@@ -77,4 +77,4 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -4,7 +4,7 @@
/* { dg-do run } */
/* { dg-options "-Wpadded" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#include <string.h>
......@@ -13,7 +13,7 @@
enum Enum { one, two, three, four };
@interface Base: Object {
@interface Base: TestsuiteObject {
unsigned a: 2;
int b: 3;
enum Enum c: 4;
......
......@@ -3,7 +3,7 @@
/* { dg-do compile } */
#include <objc/objc.h>
#include <objc/objc-api.h>
#include "../objc-obj-c++-shared/runtime.h"
@protocol MyProto1
+(void)doItClass1;
......
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol Foo
- (id)meth1;
- (id)meth2:(int)arg;
@end
@interface Derived1: Object
@interface Derived1: TestsuiteObject
@end
@interface Derived2: Object
@interface Derived2: TestsuiteObject
+ (Derived1 *)new;
@end
id<Foo> func(void) {
Object *o = [Object new];
return o; /* { dg-warning "class .Object. does not implement the .Foo. protocol" } */
TestsuiteObject *o = [TestsuiteObject new];
return o; /* { dg-warning "class .TestsuiteObject. does not implement the .Foo. protocol" } */
}
@implementation Derived2
......
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Derived: Object
@interface Derived: TestsuiteObject
@end
extern Object* foo(void);
extern TestsuiteObject* foo(void);
static Derived *test(void)
{
Derived *m = foo(); /* { dg-warning "initialization from distinct Objective\\-C type" } */
......
/* When assigning function pointers, allow for covariant return types
and contravariant argument types. */
/* { dg-do compile } */
#include <objc/Object.h>
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class Derived;
Object *ExternFunc (Object *filePath, Object *key);
typedef id FuncSignature (Object *arg1, Derived *arg2);
TestsuiteObject *ExternFunc (TestsuiteObject *filePath, TestsuiteObject *key);
typedef id FuncSignature (TestsuiteObject *arg1, Derived *arg2);
@interface Derived: Object
@interface Derived: TestsuiteObject
+ (void)registerFunc:(FuncSignature *)function;
@end
......
......@@ -2,9 +2,9 @@
/* Another gimplifier ICE... */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface MyView: Object {
@interface MyView: TestsuiteObject {
int _frame;
}
- (void)_finalize;
......
......@@ -3,7 +3,7 @@
// { dg-options "-fno-objc-call-cxx-cdtors" }
// { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } }
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
......@@ -17,7 +17,7 @@ struct cxx_struct {
}
};
@interface Manip : Object {
@interface Manip : TestsuiteObject {
int c;
cxx_struct s; // { dg-warning "user-defined destructor" }
// { dg-warning "constructors and destructors will not be invoked" "" { target *-*-* } 22 }
......@@ -40,4 +40,4 @@ int main (void)
[obj manipulate_ivars];
[obj free];
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -6,7 +6,7 @@
// { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } }
// { dg-options "-fobjc-call-cxx-cdtors" }
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
......@@ -31,7 +31,7 @@ struct boo: bar {
}
};
@interface Baz: Object {
@interface Baz: TestsuiteObject {
@public
bar aa;
}
......@@ -76,4 +76,4 @@ int main (void)
[foo free];
CHECK_IF(!ctor1_called && !ctor2_called && dtor1_called);
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -3,7 +3,7 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
@class Derived;
......@@ -18,7 +18,7 @@ Derived *CxxClass::get_instance(int offs) {
return inst[offs];
}
@interface Derived: Object {
@interface Derived: TestsuiteObject {
int value;
}
-(id)initWithValue:(int)val;
......@@ -51,4 +51,4 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -3,11 +3,11 @@
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <iostream>
#include <string>
@interface iostream: Object
@interface iostream: TestsuiteObject
@end
int main(void) {
......
......@@ -3,13 +3,13 @@
/* { 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 "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#include <objc/objc.h>
extern "C" void abort(void);
@interface A : Object
@interface A : TestsuiteObject
{
@public
int a;
......@@ -40,4 +40,4 @@ int main()
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -16,23 +16,15 @@
/* 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-obj-c++-shared/next-mapping.h"
#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 "../objc-obj-c++-shared/TestsuiteObject.m"
#include "../objc-obj-c++-shared/runtime.h"
#include <stdio.h>
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
@interface Foo: Object
@interface Foo: TestsuiteObject
typedef struct { float x, y; } XXPoint;
typedef struct { float width, height; } XXSize;
typedef struct _XXRect { XXPoint origin; XXSize size; } XXRect;
......@@ -74,28 +66,28 @@ unsigned offs1, offs2, offs3, offs4, offs5, offs6, offs7;
int main(void) {
Foo *foo = [[Foo alloc] init];
Class fooClass = objc_get_class("Foo");
METHOD meth;
Class fooClass = objc_getClass("Foo");
Method meth;
const char *string;
meth = class_get_instance_method(fooClass, @selector(setRect:withInt:));
meth = class_getInstanceMethod(fooClass, @selector(setRect:withInt:));
offs2 = 9999;
sscanf(method_get_types(meth), "@%u@%u:%u{_XXRect={?=ff}{?=ff}}%ui%u", &offs1, &offs2, &offs3,
sscanf(method_getTypeEncoding(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_get_instance_method(fooClass, @selector(char:float:double:long:));
meth = class_getInstanceMethod(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(method_get_types(meth), string, &offs1, &offs2, &offs3,
sscanf(method_getTypeEncoding(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"
......@@ -2,26 +2,19 @@
/* 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-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/Protocol1.h"
#include <stdio.h>
#include <stdlib.h>
#include "../objc-obj-c++-shared/runtime.h"
#include <objc/Protocol.h>
#ifdef __cplusplus
#define ProtoBool bool
#else
#define ProtoBool _Bool
#endif
#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>
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
enum Enum {
......@@ -43,7 +36,7 @@ typedef struct _XXRect { XXPoint origin; XXSize size; struct _XXRect *next; } XX
Protocol *proto = @protocol(Proto);
struct objc_method_description *meth;
struct objc_method_description meth_object;
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
static void scan_initial(const char *pattern) {
......@@ -56,7 +49,9 @@ static void scan_initial(const char *pattern) {
int main(void) {
const char *string;
meth = [proto descriptionForInstanceMethod: @selector(char:float:double:unsigned:short:long:)];
meth_object = protocol_getMethodDescription (proto,
@selector(char:float:double:unsigned:short:long:), YES, YES);
meth = &meth_object;
if (sizeof (long) == 8)
string = "v%u@%u:%uc%uf%ud%uI%us%uq%u";
else
......@@ -65,11 +60,16 @@ int main(void) {
CHECK_IF(offs3 == offs2 + sizeof(int) && offs4 == offs3 + sizeof(float));
CHECK_IF(offs5 == offs4 + sizeof(double) && offs6 == offs5 + sizeof(unsigned));
CHECK_IF(offs7 == offs6 + sizeof(int) && totsize == offs7 + sizeof(long));
meth = [proto descriptionForInstanceMethod: @selector(setRect:withBool:withInt:)];
meth_object = protocol_getMethodDescription (proto,
@selector(setRect:withBool:withInt:), YES, YES);
meth = &meth_object;
scan_initial("^v%u@%u:%u{_XXRect={?=ff(__XXAngle=II)}{?=dd}^{_XXRect}}%uB%ui%u");
CHECK_IF(offs3 == offs2 + sizeof(XXRect) && offs4 == offs3 + sizeof(int));
CHECK_IF(totsize == offs4 + sizeof(int));
meth = [proto descriptionForClassMethod: @selector(getEnum:enum:bool:)];
meth_object = protocol_getMethodDescription (proto,
@selector(getEnum:enum:bool:), YES, NO);
meth = &meth_object;
/* Here we have the complication that 'enum Enum' could be encoded
as 'i' on __NEXT_RUNTIME_, and (most likely) as 'I' on the GNU
runtime. So we get the @encode(enum Enum), then put it into the
......@@ -80,16 +80,17 @@ int main(void) {
char pattern[1024];
sprintf (pattern, "^%s%%u@%%u:%%u^{?=ff(__XXAngle=II)}%%u%s%%uc%%u",
@encode(enum Enum), @encode(enum Enum));
@encode(enum Enum), @encode(enum Enum));
scan_initial(pattern);
}
CHECK_IF(offs3 == offs2 + sizeof(XXPoint *) && offs4 == offs3 + sizeof(enum Enum));
CHECK_IF(totsize == offs4 + sizeof(int)); /* 'ObjCBool' is really 'char' */
meth = [proto descriptionForClassMethod: @selector(getBool:)];
meth_object = protocol_getMethodDescription (proto,
@selector(getBool:), YES, NO);
meth = &meth_object;
scan_initial("^^B%u@%u:%u^*%u");
CHECK_IF(totsize == offs2 + sizeof(ObjCBool **));
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -3,11 +3,8 @@
/* { 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 "../objc-obj-c++-shared/next-mapping.h"
#ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h>
#endif
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include "../objc-obj-c++-shared/runtime.h"
#include <stdlib.h>
#include <string.h>
......@@ -28,7 +25,7 @@ struct Nested {
struct Innermost innermost;
};
@interface Int1: Object {
@interface Int1: TestsuiteObject {
signed char a, b;
Int2 *int2;
struct Nested nested;
......@@ -47,28 +44,28 @@ struct Nested {
@implementation Int2
@end
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Ivar *ivar;
#else
#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
struct objc_ivar *ivar;
#else
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
#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
CHECK_IF(!strcmp(ivar->ivar_name, name));
CHECK_IF(!strcmp(ivar->ivar_type, type));
#else
CHECK_IF(!strcmp(ivar_getName(*ivar), name));
CHECK_IF(!strcmp(ivar_getTypeEncoding(*ivar), type));
#endif
ivar++;
}
int main(void) {
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
ivar = class_copyIvarList ((Class)objc_get_class("Int1"), NULL);
#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
ivar = ((Class)objc_getClass("Int1"))->ivars->ivar_list;
#else
ivar = ((Class)objc_get_class("Int1"))->ivars->ivar_list;
ivar = class_copyIvarList ((Class)objc_getClass("Int1"), NULL);
#endif
check_ivar("a", "c");
check_ivar("b", "c");
......@@ -76,14 +73,14 @@ int main(void) {
check_ivar("nested",
"{Nested=\"a\"f\"b\"f\"next\"@\"Int1\"\"innermost\"{Innermost=\"a\"C\"b\"C\"encl\"^{Nested}}}");
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
ivar = class_copyIvarList ((Class)objc_get_class("Int2"), NULL);
#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
ivar = ((Class)objc_getClass("Int2"))->ivars->ivar_list;
#else
ivar = ((Class)objc_get_class("Int2"))->ivars->ivar_list;
ivar = class_copyIvarList ((Class)objc_getClass("Int2"), NULL);
#endif
check_ivar("innermost", "^{Innermost=CC^{Nested}}");
check_ivar("base", "@\"Int1\"");
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -9,21 +9,13 @@
/* Contributed by Alexander Malmberg <alexander@malmberg.org> */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include "../objc-obj-c++-shared/runtime.h"
#include <stdlib.h>
#include <stdio.h>
#define CHECK_IF(expr) if(!(expr)) abort()
#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
@interface Test : Object
@interface Test : TestsuiteObject
{ float j; }
-(void) test2: (int [5])a with: (int [])b;
-(id) test3: (Test **)b; /* { dg-message "previous declaration of .\\-\\(id\\)test3:\\(Test \\*\\*\\)b." } */
......@@ -47,8 +39,8 @@ int offs1, offs2, offs3, offs4, offs5, offs6;
int main(int argc, char **argv)
{
Class testClass = objc_get_class("Test");
METHOD meth;
Class testClass = objc_getClass("Test");
Method meth;
cc[0] = [Test new];
CHECK_IF (bb[3] == 3);
......@@ -58,16 +50,16 @@ int main(int argc, char **argv)
[*c test2: bb with: bb + 5];
CHECK_IF (bb[3] == 5);
meth = class_get_instance_method(testClass, @selector(test2:with:));
meth = class_getInstanceMethod(testClass, @selector(test2:with:));
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
sscanf(method_get_types(meth), "v%d@%d:%d[%di]%d^i%d", &offs1, &offs2, &offs3,
sscanf(method_getTypeEncoding(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_get_instance_method(testClass, @selector(test3:));
meth = class_getInstanceMethod(testClass, @selector(test3:));
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
sscanf(method_get_types(meth), "v%d@%d:%d[%d[%d{Test=#f}]]%d", &offs1, &offs2, &offs3,
sscanf(method_getTypeEncoding(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);
......
......@@ -9,10 +9,10 @@
#include <stdio.h>
#include <stdlib.h>
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
// ObjectiveC class header
@interface ObjCclass : Object {
@interface ObjCclass : TestsuiteObject {
}
-(void)method1;
-(void)method2;
......@@ -64,4 +64,3 @@ void CPPclass::function1()
abort ();
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -9,10 +9,10 @@
/* This test checks the syntax @catch (...) which catches any
exceptions. Check that code using it runs correctly. */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
@interface MyObject : Object
@interface MyObject : TestsuiteObject
@end
@implementation MyObject
......@@ -47,7 +47,7 @@ int main (void)
if (test ([MyObject new]) != 5)
abort ();
if (test ([Object new]) != 6)
if (test ([TestsuiteObject new]) != 6)
abort ();
return 0;
......
......@@ -6,18 +6,18 @@
/* { dg-do assemble { target *-*-darwin* } } */
/* { dg-options "-mfix-and-continue" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Foo: Object
+ (Object *)indexableFileTypes;
@interface Foo: TestsuiteObject
+ (TestsuiteObject *)indexableFileTypes;
@end
@implementation Foo
+ (Object *)indexableFileTypes
+ (TestsuiteObject *)indexableFileTypes
{
static Object *fileTypes = 0;
static TestsuiteObject *fileTypes = 0;
if(!fileTypes) {
fileTypes = [Object new];
fileTypes = [TestsuiteObject new];
}
return fileTypes;
}
......
/* { dg-do compile } */
#import "../objc-obj-c++-shared/Object1.h"
#include <objc/objc-api.h>
#import "../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object
@interface obj : TestsuiteObject
{
@public
int v1;
......
......@@ -4,9 +4,9 @@
/* { dg-do compile } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
#include <objc/Object.h>
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface FooBar: Object
@interface FooBar: TestsuiteObject
- (void)boo;
@end
......
......@@ -4,10 +4,10 @@
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
#include <objc/Object.h>
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
@interface FooBar: Object
@interface FooBar: TestsuiteObject
- (void)boo;
@end
......
/* Ensure there are no bizarre difficulties with accessing the 'isa' field of
objects. This field is named differently between GNU and NeXT runtimes so
accessed via the CLASSPTRFIELD() macro defined in next-mapping.h */
/* Ensure there are no bizarre difficulties with accessing the 'isa' field of objects. */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include "../objc-obj-c++-shared/runtime.h"
@interface Object (Test)
@interface TestsuiteObject (Test)
- (Class) test1: (id)object;
@end
@interface Derived: Object
@interface Derived: TestsuiteObject
- (Class) test2: (id)object;
@end
@implementation Object (Test)
@implementation TestsuiteObject (Test)
Class test1(id object) {
Class cls = CLASSPTRFIELD(object);
return cls;
#ifdef __NEXT_RUNTIME__
Class cls = object->isa;
#else
Class cls = object->class_pointer;
#endif
return cls;
}
- (Class) test1: (id)object {
Class cls = CLASSPTRFIELD(object);
return cls;
#ifdef __NEXT_RUNTIME__
Class cls = object->isa;
#else
Class cls = object->class_pointer;
#endif
return cls;
}
@end
......@@ -30,18 +36,29 @@ Class test1(id object) {
@implementation Derived
Class test2(id object) {
Class cls = CLASSPTRFIELD(object);
return cls;
#ifdef __NEXT_RUNTIME__
Class cls = object->isa;
#else
Class cls = object->class_pointer;
#endif
return cls;
}
- (Class) test2: (id)object {
Class cls = CLASSPTRFIELD(object);
return cls;
#ifdef __NEXT_RUNTIME__
Class cls = object->isa;
#else
Class cls = object->class_pointer;
#endif
return cls;
}
@end
Class test3(id object) {
Class cls = CLASSPTRFIELD(object);
return cls;
#ifdef __NEXT_RUNTIME__
Class cls = object->isa;
#else
Class cls = object->class_pointer;
#endif
return cls;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
/* Allow for an optional semicolon following the ivar block. */
/* Contributed by: Ziemowit Laski <zlaski@apple.com>. */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Tink : Object {
@interface Tink : TestsuiteObject {
@private
unsigned long mCode[4];
};
......
......@@ -3,13 +3,13 @@
/* { dg-do compile } */
/* { dg-options "-Wpadded -Wpacked -Wabi" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Derived1: Object
@interface Derived1: TestsuiteObject
{ }
@end
@interface Derived2: Object
@interface Derived2: TestsuiteObject
- (id) foo;
@end
......
......@@ -5,9 +5,9 @@
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Sprite: Object {
@interface Sprite: TestsuiteObject {
int sprite, spree;
}
+ (void)setFoo:(int)foo;
......
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
class MyWidget {
......@@ -15,13 +15,13 @@ MyWidget gWidget;
- (MyWidget *)widget;
@end
@interface Foo: Object
@interface Foo: TestsuiteObject
@end
@interface Bar: Foo <MyProto>
@end
@interface Container: Object
@interface Container: TestsuiteObject
+ (MyWidget *)elementForView:(Foo *)view;
@end
......@@ -38,7 +38,8 @@ MyWidget gWidget;
+ (MyWidget *)elementForView:(Foo *)view
{
MyWidget *widget = 0;
if ([view conformsTo:@protocol(MyProto)]) {
if (class_conformsToProtocol (object_getClass (view),
@protocol(MyProto))) {
widget = [(Foo <MyProto> *)view widget];
}
return widget;
......@@ -55,4 +56,3 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -3,17 +3,17 @@
/* { 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 "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
@interface Int1: Object
@interface Int1: TestsuiteObject
+ (int) classMeth;
- (int) instanceMeth;
@end
@interface Int2: Object
@interface Int2: TestsuiteObject
+ (int) classMeth;
- (int) instanceMeth;
@end
......@@ -43,4 +43,4 @@ int main(void) {
CHECK_IF([(Int1Alias *)int2typedef instanceMeth] == 1697);
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -5,16 +5,16 @@
/* { dg-do compile } */
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
typedef Object ObjectTypedef1;
typedef TestsuiteObject ObjectTypedef1;
typedef ObjectTypedef1 ObjectTypedef2;
@compatibility_alias ObjectAlias1 ObjectTypedef2;
@compatibility_alias ObjectAlias2 ObjectAlias1;
typedef ObjectAlias2 ObjectTypedef3;
void foo(void) {
id obj = [Object new];
id obj = [TestsuiteObject new];
obj = [ObjectTypedef1 new];
obj = [ObjectTypedef2 new];
obj = [ObjectTypedef3 new];
......@@ -23,7 +23,7 @@ void foo(void) {
}
/* { dg-final { scan-assembler "_OBJC_ClassRefs_0" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler "_OBJC_ClassRef_Object" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler "_OBJC_ClassRef_TestsuiteObject" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler-not "_OBJC_ClassRefs_1" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler-not "_OBJC_ClassRef_ObjectTypedef" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler-not "_OBJC_ClassRef_ObjectAlias" { target { *-*-darwin* && { lp64 } } } } } */
......@@ -3,7 +3,7 @@
/* { dg-options "-Wstrict-selector-match" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Protocol1.h"
#include <objc/Protocol.h>
@interface Base
- (unsigned)port;
......
/* Check if finding multiple signatures for a method is handled gracefully. Author: Ziemowit Laski <zlaski@apple.com> */
/* { dg-options "-Wstrict-selector-match" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Class1
- (void)setWindow:(Object *)wdw;
- (void)setWindow:(TestsuiteObject *)wdw;
@end
@interface Class2
......@@ -13,14 +13,14 @@
@end
id foo(void) {
Object *obj = [[Object alloc] init];
TestsuiteObject *obj = [[TestsuiteObject alloc] init];
id obj2 = obj;
[obj setWindow:nil]; /* { dg-warning ".Object. may not respond to .\\-setWindow:." } */
[obj setWindow:nil]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-setWindow:." } */
/* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 18 } */
/* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 18 } */
/* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 18 } */
[obj2 setWindow:nil]; /* { dg-warning "multiple methods named .\\-setWindow:. found" } */
/* { dg-message "using .\\-\\(void\\)setWindow:\\(Object \\*\\)wdw." "" { target *-*-* } 8 } */
/* { dg-message "using .\\-\\(void\\)setWindow:\\(TestsuiteObject \\*\\)wdw." "" { target *-*-* } 8 } */
/* { dg-message "also found .\\-\\(void\\)setWindow:\\(Class1 \\*\\)window." "" { target *-*-* } 12 } */
return obj;
......
......@@ -3,10 +3,10 @@
/* { dg-options "-Wstrict-selector-match" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol MyObject
- (id)initWithData:(Object *)data;
- (id)initWithData:(TestsuiteObject *)data;
@end
@protocol SomeOther
......@@ -17,9 +17,9 @@
- (id)initWithData:(id<MyObject, MyCoding>)data;
@end
@interface NTGridDataObject: Object <MyCoding>
@interface NTGridDataObject: TestsuiteObject <MyCoding>
{
Object<MyCoding> *_data;
TestsuiteObject<MyCoding> *_data;
}
+ (NTGridDataObject*)dataObject:(id<MyObject, MyCoding>)data;
@end
......@@ -32,7 +32,7 @@
{
NTGridDataObject *result = [[NTGridDataObject alloc] initWithData:data];
/* { dg-warning "multiple methods named .\\-initWithData:. found" "" { target *-*-* } 33 } */
/* { dg-message "using .\\-\\(id\\)initWithData:\\(Object \\*\\)data." "" { target *-*-* } 9 } */
/* { dg-message "using .\\-\\(id\\)initWithData:\\(TestsuiteObject \\*\\)data." "" { target *-*-* } 9 } */
/* { dg-message "also found .\\-\\(id\\)initWithData:\\(id <MyObject, MyCoding>\\)data." "" { target *-*-* } 17 } */
/* { dg-message "also found .\\-\\(id\\)initWithData:\\(int\\)data." "" { target *-*-* } 13 } */
......
......@@ -4,14 +4,14 @@
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-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
static double d = 4.5920234e2;
@interface Foo : Object
@interface Foo : TestsuiteObject
-(void) brokenType: (int)x floatingPoint: (double)y;
@end
......@@ -30,4 +30,4 @@ int main(void)
[foo brokenType: (int)d floatingPoint: d];
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -4,12 +4,8 @@
/* 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>
#ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h>
#endif
#include "../objc-obj-c++-shared/runtime.h"
#include <stdlib.h>
#include <string.h>
......@@ -47,16 +43,14 @@
@end
@implementation Root
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
- (const char *) method1 { return "Root::-method1"; }
+ (const char *) method2 { return "Root::+method2"; }
@end
int main(void)
{
Class obj = objc_get_class("Derived");
Class obj = objc_getClass("Derived");
/* None of the following should elicit compiler-time warnings. */
......@@ -75,4 +69,4 @@ int main(void)
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -4,7 +4,8 @@
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include "../objc-obj-c++-shared/runtime.h"
@class NSString;
......@@ -13,19 +14,19 @@
+ (BOOL)usesUserKeyEquivalents;
@end
@interface NSMenuItem : Object <NSMenuItem> {
@interface NSMenuItem : TestsuiteObject <NSMenuItem> {
@private
id _menu;
}
@end
@interface NSResponder : Object <NSMenuItem>
@interface NSResponder : TestsuiteObject <NSMenuItem>
{
id _nextResponder;
}
@end
@interface Object(NSMenuValidation)
@interface TestsuiteObject(NSMenuValidation)
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
@end
......
......@@ -2,9 +2,9 @@
/* { dg-do compile } */
/* { dg-options "-Wreturn-type -Wextra" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Foo: Object
@interface Foo: TestsuiteObject
- (id) meth1;
- (void) meth2;
@end
......@@ -14,7 +14,7 @@ extern int bar;
@implementation Foo
- (id) meth1 {
if (bar)
return [Object new];
return [TestsuiteObject new];
return; /* { dg-error "return.statement with no value" } */
}
- (void) meth2 {
......
/* Ensure that overload resolution does not produce warnings as
side-effects. */
/* { dg-do run } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.mm" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(E) if(!(E)) abort ()
@interface MyCursor: Object
@interface MyCursor: TestsuiteObject
+ (MyCursor *)crosshairCursor;
@end
......
......@@ -2,10 +2,9 @@
they should. */
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.mm" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <string.h>
#include <stdlib.h>
......@@ -19,7 +18,7 @@ char *strcpy_like_callee(const char *s) {
typedef char io_string_t[512];
typedef char *(func_type)(const char *);
@interface DeviceObject: Object
@interface DeviceObject: TestsuiteObject
- (void) func:(func_type)func stucPathInIORegistry:(io_string_t)ioRegPath;
@end
@implementation DeviceObject
......
......@@ -3,7 +3,7 @@
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class NotKnown;
......
......@@ -2,10 +2,10 @@
// { dg-do compile }
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <iostream>
@interface Greeter : Object
@interface Greeter : TestsuiteObject
- (void) greet: (const char *)msg;
@end
......
......@@ -6,11 +6,12 @@
/* { dg-options "-fobjc-gc" } */
/* { dg-prune-output "cc1objplus: warning: '-fobjc-gc' is ignored for '-fgnu-runtime'" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include "../objc-obj-c++-shared/runtime.h"
@class MyWindow;
@interface MyDocument : Object {
@interface MyDocument : TestsuiteObject {
MyWindow *_window;
}
@end
......@@ -29,7 +30,7 @@
@end
@interface MyTextFileDocument : MyFileDocument {
Object *_textStorage;
TestsuiteObject *_textStorage;
struct __tfdFlags {
unsigned int immutable:1;
unsigned int lineEnding:2;
......
/* This program tests use of property provided setter/getter functions. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../../objc-obj-c++-shared/Object1.mm" } */
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
@interface Bar : Object
@interface Bar : TestsuiteObject
{
int iVar;
}
......
......@@ -2,13 +2,14 @@
provide a suitable method. */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
@protocol Zot
-(void) zot;
@end
@interface Foo : Object <Zot>
@interface Foo : TestsuiteObject <Zot>
@end
int foo()
......
......@@ -3,10 +3,12 @@
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" } { "" } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.mm" } */
#include <objc/Protocol.h>
#include "../objc-obj-c++-shared/runtime.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/Protocol1.h"
@interface MyClass
- - name;
@end
@protocol NoInstanceMethods
+ + testMethod;
......@@ -19,16 +21,9 @@
int
main()
{
#ifdef __OBJC2__
protocol_getMethodDescription(@protocol(NoInstanceMethods), @selector(name), NO, YES);
protocol_getMethodDescription(@protocol(NoInstanceMethods), @selector(name), NO, NO);
protocol_getMethodDescription(@protocol(NoClassMethods), @selector(name), NO, YES);
protocol_getMethodDescription(@protocol(NoClassMethods), @selector(name), NO, NO);
#else
[@protocol(NoInstanceMethods) descriptionForInstanceMethod: @selector(name)];
[@protocol(NoInstanceMethods) descriptionForClassMethod: @selector(name)];
[@protocol(NoClassMethods) descriptionForInstanceMethod: @selector(name)];
[@protocol(NoClassMethods) descriptionForClassMethod: @selector(name)];
#endif
protocol_getMethodDescription (@protocol(NoInstanceMethods), @selector(name), YES, YES);
protocol_getMethodDescription (@protocol(NoInstanceMethods), @selector(name), YES, NO);
protocol_getMethodDescription (@protocol(NoClassMethods), @selector(name), YES, YES);
protocol_getMethodDescription (@protocol(NoClassMethods), @selector(name), YES, NO);
return 0;
}
......@@ -6,10 +6,7 @@
#include <stdio.h>
#include <stdlib.h>
#ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h>
#endif
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/runtime.h"
#include <objc/Protocol.h>
/* The encoded parameter sizes will be rounded up to match pointer alignment. */
......@@ -34,9 +31,7 @@
Protocol *proto;
struct objc_method_description *meth;
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
struct objc_method_description meth_object;
#endif
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
static void scan_initial(const char *pattern) {
......@@ -48,22 +43,18 @@ static void scan_initial(const char *pattern) {
int main(void) {
proto = @protocol(Retain);
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto, @selector(address:with:),
YES, YES);
meth_object = protocol_getMethodDescription (proto,
@selector(address:with:), YES, YES);
meth = &meth_object;
#else
meth = [proto descriptionForInstanceMethod: @selector(address:with:)];
#endif
scan_initial("O@%u@%u:%uNR@%uo^^S%u");
CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(unsigned));
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto, @selector(retainArgument:with:),
YES, NO);
meth_object = protocol_getMethodDescription (proto,
@selector(retainArgument:with:), YES, NO);
meth = &meth_object;
#else
meth = [proto descriptionForClassMethod: @selector(retainArgument:with:)];
#endif
scan_initial("Vv%u@%u:%uOo@%un^*%u");
CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(char **));
return 0;
......
......@@ -4,7 +4,7 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
......@@ -19,7 +19,7 @@
- - init;
@end
@interface Foo: Object
@interface Foo: TestsuiteObject
{ @public int val; }
- init;
@end
......@@ -37,7 +37,7 @@ template <typename T> struct Holder
Holder(void) { obj = [[T alloc] init]; }
~Holder(void) { [obj free]; --counter; }
id <Init, Zone> getObjId(void) { return obj; }
Object <Zone, Init> *getObj(void) { return obj; }
TestsuiteObject <Zone, Init> *getObj(void) { return obj; }
};
typedef Holder <Foo <Init, Zone> > FooHolder;
......@@ -66,4 +66,4 @@ int main (void) {
CHECK_IF(FooHolder::counter == 0);
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -2,7 +2,7 @@
/* { dg-options "-Wselector" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
@interface Foo
@end
......
/* { dg-options "" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
int main()
{
......
/* { dg-options "" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
int main()
{
......
......@@ -2,10 +2,9 @@
/* { dg-do compile } */
/* { dg-options "-Wunused-but-set-variable" } */
#import "../objc-obj-c++-shared/Object1.h"
#include <objc/objc-api.h>
#import "../objc-obj-c++-shared/TestsuiteObject.m"
@interface obj : Object
@interface obj : TestsuiteObject
{
int value;
}
......@@ -13,7 +12,7 @@
- (void) setValue: (int)number;
@end
@implementation obj : Object
@implementation obj : TestsuiteObject
- (int) value { return value; }
- (void) setValue: (int)number { value = number; }
......
......@@ -5,7 +5,8 @@
/* { dg-options "-fconstant-string-class=Foo" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
#include "../../objc-obj-c++-shared/Object1.h"
#include <objc/Object.h>
#include "../../objc-obj-c++-shared/objc-test-suite-types.h"
@interface Foo: Object {
char *cString;
......@@ -18,11 +19,7 @@
+ (Foo *) getString: (int) which;
@end
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Class _FooClassReference;
#else
struct objc_class _FooClassReference;
#endif
TNS_STRING_REF_T _FooClassReference; /* Only used by NeXT. */
@implementation Bar
+ (Foo *) getString: (int) which {
......
/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */
/* { dg-do compile } */
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/next-mapping.h"
#include "../../objc-obj-c++-shared/runtime.h"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#endif
......@@ -30,4 +29,4 @@ id test_invalid7 = @"te" @"s" @@"t"; /* { dg-error "repeated .@. bef
id test_invalid8 = @"te" @@"s" @"t"; /* { dg-error "repeated .@. before Objective-C string" } */
id test_invalid9 = @"te" @"s" @"t" @; /* { dg-error "stray .@. in program" } */
id test_invalidA = @"te" @ st; /* { dg-error "stray .@. in program" } */
/* { dg-error "expected" "" { target *-*-* } 32 } */
/* { dg-error "expected" "" { target *-*-* } 31 } */
......@@ -4,11 +4,11 @@
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class MyWpModule;
@compatibility_alias MyObject Object;
@compatibility_alias MyObject TestsuiteObject;
@compatibility_alias FictitiousModule MyWpModule;
@protocol MySelTarget
......
/* Make sure that @synchronized parses and a very basic test runs. */
/* { dg-options "-fobjc-exceptions -fgnu-runtime" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
int main (void)
{
Object *a = [Object new];
Object *b = [Object new];
Object *c = [Object new];
TestsuiteObject *a = [TestsuiteObject new];
TestsuiteObject *b = [TestsuiteObject new];
TestsuiteObject *c = [TestsuiteObject new];
/* This single-threaded test just checks that @synchronized() uses a
recursive mutex, and that the runtime at least doesn't crash
......
......@@ -3,12 +3,12 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
@interface Base: Object
@interface Base: TestsuiteObject
- (int) meth;
@end
......@@ -47,4 +47,4 @@ int main (void) {
CHECK_IF(count == 0);
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -4,12 +4,12 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
@interface ObjCClass : Object
@interface ObjCClass : TestsuiteObject
{
@public
int info;
......@@ -78,4 +78,4 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -3,7 +3,7 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.mm ../objc-obj-c++-shared/nsconstantstring-class-impl.mm" } */
/* { dg-additional-sources "../objc-obj-c++-shared/nsconstantstring-class-impl.mm" } */
#include <stdarg.h>
#include <stdlib.h>
......@@ -15,8 +15,8 @@
#include "../objc-obj-c++-shared/nsconstantstring-class.h"
#endif
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include "../objc-obj-c++-shared/runtime.h"
#define CHECK_IF(expr) if(!(expr)) abort()
......@@ -42,7 +42,7 @@ int abc(TYPE *xyz, Array *array) {
return [xyz count] + [array count];
}
@interface Array: Object {
@interface Array: TestsuiteObject {
id *arr;
int count;
}
......@@ -72,7 +72,7 @@ int abc(TYPE *xyz, Array *array) {
@end
int main(void) {
CHECK_IF(!strcmp ([@"Object" cString], getDesc<Object>()));
CHECK_IF(!strcmp ([@"TestsuiteObject" cString], getDesc<TestsuiteObject>()));
CHECK_IF(!strcmp ([@"Array" cString], getDesc<Array>()));
Array* a1 = [Array arrayWithObjects:@"One", @"Two", @"Three", nil];
......
......@@ -6,14 +6,10 @@
#include <stdio.h>
#include <string.h>
#include "../objc-obj-c++-shared/Protocol1.h"
#ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h>
#endif
#include "../objc-obj-c++-shared/runtime.h"
extern "C" void abort();
@protocol CommonProtocol
-(oneway void)methodCall_On:(in bycopy id)someValue_On;
......@@ -48,25 +44,32 @@ extern "C" void abort();
Protocol *proto = @protocol(CommonProtocol);
struct objc_method_description *meth;
struct objc_method_description meth_object;
int main()
{
meth = [proto descriptionForInstanceMethod: @selector(methodCall_On:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_On:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4On@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_nO:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_nO:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4nO@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_Oo:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_Oo:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4Oo@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_oO:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oO:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4oO@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_rn:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_rn:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4rn@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_oOn:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oOn:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4oOn@8"))
abort();
return 0;
......
......@@ -6,7 +6,8 @@
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include <objc/Object.h>
#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface NSString: Object
@end
......
......@@ -7,7 +7,8 @@
/* { dg-options "-fconstant-string-class=XStr" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=XStr" { target *-*-darwin* } } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include <objc/Object.h>
#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface XString: Object {
@protected
......
......@@ -5,28 +5,29 @@
/* { dg-do run } */
/* { dg-options "-fconstant-string-class=Foo" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm" } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <objc/objc.h>
@interface Foo: Object {
@interface Foo: TestsuiteObject {
char *cString;
unsigned int len;
}
- (char *)customString;
@end
#ifdef __NEXT_RUNTIME__
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Class _FooClassReference;
#else
struct objc_class _FooClassReference;
#endif
#endif
@implementation Foo : Object
@implementation Foo : TestsuiteObject
- (char *)customString {
return cString;
}
......
......@@ -4,24 +4,25 @@
/* { dg-do run { target *-*-darwin* } } */
/* { dg-options "-fconstant-string-class=Foo" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm" } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
@interface Foo: Object {
@interface Foo: TestsuiteObject {
char *cString;
unsigned int len;
}
@end
#ifdef __NEXT_RUNTIME__
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Class _FooClassReference;
#else
struct objc_class _FooClassReference;
#endif
#endif
@implementation Foo : Object
@implementation Foo : TestsuiteObject
- (char *)customString {
return cString;
}
......
......@@ -5,7 +5,8 @@
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include <objc/Object.h>
#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface NSConstantString: Object {
char *cString;
......
......@@ -3,10 +3,7 @@
/* { dg-do run } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm ../../../objc-obj-c++-shared/nsconstantstring-class-impl.mm" } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include "../../../objc-obj-c++-shared/next-mapping.h"
/* { dg-additional-sources "../../../objc-obj-c++-shared/nsconstantstring-class-impl.mm" } */
#include <string.h>
#include <stdlib.h>
......
......@@ -2,14 +2,13 @@
/* { dg-require-effective-target tls } */
/* { dg-add-options tls } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm" } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
extern "C" {
extern void abort ();
}
@interface tsObj: Object {
@interface tsObj: TestsuiteObject {
int ai ;
}
......
// { dg-do run }
// { dg-xfail-run-if "OBJC2 runtime" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "-fgnu-runtime" } }
// { dg-additional-sources "../../objc-obj-c++-shared/Object1.mm" }
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
int main(void)
{
[Object class];
[TestsuiteObject class];
return 0;
}
......@@ -4,14 +4,14 @@
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <stdio.h>
#include <setjmp.h>
@interface Frob: Object
@interface Frob: TestsuiteObject
@end
@implementation Frob: Object
@implementation Frob: TestsuiteObject
@end
static int exc_control = 0;
......
......@@ -4,7 +4,7 @@
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol Proto1
- (int)meth1;
......@@ -14,11 +14,11 @@
- (int)meth2;
@end
@interface MyClass: Object <Proto2> {
@interface MyClass: TestsuiteObject <Proto2> {
int a;
}
- (int)meth2;
- (Object *)parm1: (id)p1 parm2: (id<Proto1>)p2;
- (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2;
@end
MyClass *mc1, *mc2;
......@@ -27,7 +27,7 @@ MyClass *mc1, *mc2;
- (int)meth2 {
return a;
}
- (Object *)parm1: (id)p1 parm2: (id<Proto1>)p2 {
- (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2 {
@try {
mc2 = p2; /* { dg-warning "type .id <Proto1>. does not conform to the .Proto2. protocol" } */
}
......
......@@ -4,10 +4,10 @@
/* { dg-do run } */
/* { dg-xfail-run-if "PR23616" { *-*-* } { "-fgnu-runtime" } { "-fnext-runtime" } } */
/* { dg-xfail-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" "-fgnu-runtime" } { "" } }
/* { dg-xfail-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" "-fgnu-runtime" } { "" } } */
/* { dg-options "-fobjc-exceptions" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdio.h>
#include <stdlib.h>
......@@ -18,10 +18,10 @@
#define CHECK_IF(expr) if(!(expr)) abort()
@interface Frob: Object
@interface Frob: TestsuiteObject
@end
@implementation Frob: Object
@implementation Frob: TestsuiteObject
@end
static Frob* _connection = nil;
......@@ -29,7 +29,7 @@ static Frob* _connection = nil;
//--------------------------------------------------------------------
void test (Object* sendPort)
void test (TestsuiteObject* sendPort)
{
int cleanupPorts = 1;
Frob* receivePort = nil;
......@@ -56,7 +56,7 @@ void test (Object* sendPort)
printf ("cleanupPorts = %d\n", cleanupPorts);
printf ("---\n");
@throw [Object new];
@throw [TestsuiteObject new];
}
@catch(Frob *obj) {
printf ("Exception caught by incorrect handler!\n");
......@@ -75,7 +75,7 @@ void test (Object* sendPort)
}
int main (void) {
test((Object *)-1);
test((TestsuiteObject *)-1);
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -5,14 +5,14 @@
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
const char *foo(void)
{
@try {
return "foo";
}
@catch (Object* theException) {
@catch (TestsuiteObject* theException) {
return [theException name];
}
}
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
int main (int argc, const char * argv[]) {
Object * pool = [Object new];
TestsuiteObject * pool = [TestsuiteObject new];
int a;
if ( 1 ) {
@try {
a = 1;
}
@catch (Object *e) {
@catch (TestsuiteObject *e) {
a = 2;
}
@finally {
......
......@@ -3,9 +3,9 @@
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Derived: Object
@interface Derived: TestsuiteObject
- (id) meth;
@end
......
......@@ -8,7 +8,7 @@
/* { dg-prune-output ".*internal compiler error.*" } */
/* { dg-options "-fobjc-exceptions -O2" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#include <stdio.h>
......@@ -35,13 +35,13 @@ void foo (int arg1, float *arg2)
local6 = 18.0;
pi = &gi2;
pf = &gf2;
obj2 = obj1 = [Object new];
obj2 = obj1 = [TestsuiteObject new];
arg1 = 17;
arg2 = &gf2;
@throw [Object new];
@throw [TestsuiteObject new];
}
@catch (Object *obj) {
@catch (TestsuiteObject *obj) {
if (local1 != 123 || local2 != 345 || local3 != 5.0
|| local4 != 6.0 || local5 != 17 || local6 != 18.0) {
printf("Abort 1\n");
......@@ -66,4 +66,4 @@ int main(void) {
foo(15, &gf1);
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
/* Typedefs of ObjC types should work without any bogus warnings. */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
typedef Object MyObject;
typedef TestsuiteObject MyObject;
int main (int argc, const char * argv[])
{
Object* a = nil;
TestsuiteObject* a = nil;
MyObject* b = a;
Object* c = b;
TestsuiteObject* c = b;
return 0;
}
......
......@@ -2,13 +2,13 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdarg.h>
#include <stdlib.h>
/* Test methods with "C-style" trailing arguments, with or without ellipsis. */
@interface MathClass: Object
@interface MathClass: TestsuiteObject
/* sum positive numbers; -1 ends the list */
+ (int) sum: (int) firstNumber, int secondNumber, ...;
+ (int) prod: (int) firstNumber, int secondNumber, int thirdNumber;
......@@ -72,4 +72,4 @@ int main (void)
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
/* Compatibility code between APIs and ABIs for the objc test suite.
Copyright (C) 2010, 2011 Free Software Foundation, Inc.
Contributed by Iain Sandoe
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/*
* Implementation of a compatibility layer for the ObjC* test-suite.
*
* Four cases:
* GNU
* Uses the 'old' Object with API and ABI = 0.
* Compatibility methods are added.
* NeXT pre-Darwin9
* Uses the 'old' Object with API and ABI = 0.
* NeXT Darwin >= 9 with no implementation of ABI 2
* Uses API 2 and ABI 0 for m32, uses the 'old' Object'
* Uses API 2 for m64 but only compile tests can be expected to work.
* NeXT Darwin >= 9 with __OBJC2__
* Uses API 2 and ABI 0 for m32, uses the 'old' Object'
* Uses API 2 and ABI 2 - the libobjc implementation of Object is very
* basic, and we add a category to expand this for test-suite use.
*/
#ifndef _OBJC_OBJECT1_IMPLEMENTATION_H_
#define _OBJC_OBJECT1_IMPLEMENTATION_H_
#include "Object1.h"
#ifndef __NEXT_RUNTIME__
/* Save us from repeating this. */
@implementation Object (TEST_SUITE_ADDITIONS)
+ + initialize
{
return self;
}
@end
#else
/* For NeXT pre-Darwin 9 or m32 we need do nothing. */
# if NEXT_OBJC_ABI_VERSION >= 2
/* Pick up the API=2 header. */
# include <objc/runtime.h>
# ifndef __OBJC2__
/* On a Darwin system >= 9 when there is no __OBJC2__ compiler, the testcases
will not link. So we provide a dummy Object for this purpose. */
@implementation Object
+ (Class) class
{
return self;
}
- (BOOL)isEqual: (id)anObject
{
return self == anObject;
}
@end
# endif /* __OBJC2__ */
/* In any case, since the library does not provide a complete (enough)
implementation we need to provide the additions. */
@implementation Object (TEST_SUITE_ADDITIONS)
+ + initialize
{
return self;
}
- init
{
return self;
}
- (Class) class
{
return isa;
}
+ (Class) superclass
{
return class_getSuperclass(object_getClass(self));
}
+ new
{
return [[self alloc] init];
}
+ free
{
return nil;
}
- free
{
return object_dispose(self);
}
+ alloc
{
return class_createInstance (self, 0);
}
- (Class) 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;
}
#ifdef __cplusplus
extern "C" {
#endif
extern int printf (const char *, ...);
extern void abort (void);
#ifdef __cplusplus
}
#endif
/* This is a helper to catch cases where we need to add more functionality
to our test-suite category - more informative than fail with 'does not
respond to forward:' */
- forward: (SEL)sel : (marg_list)args
{
const char * onam = object_getClassName (self);
const char * snam = sel_getName (sel);
printf ("%s: tried to forward: %s\n", onam, snam);
abort ();
}
@end
# endif /* NEXT_OBJC_ABI_VERSION >= 2 */
# endif /* __NEXT_RUNTIME__ */
#endif /* _OBJC_OBJECT1_IMPLEMENTATION_H_ */
/* Compatibility code between APIs and ABIs for the objc test suite.
Copyright (C) 2010, 2011 Free Software Foundation, Inc.
Contributed by Iain Sandoe
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/*
* Compatibility header.
*
* Four cases:
* GNU
* Uses the 'old' Object with API and ABI = 0.
* Compatibility methods are added.
* NeXT pre-Darwin9
* Uses the 'old' Object with API and ABI = 0.
* NeXT Darwin >= 9 with no implementation of ABI 2
* Uses API 2 and ABI 0 for m32, uses the 'old' Object'
* Uses API 2 for m64 but only compile tests can be expected to work.
* NeXT Darwin >= 9 with __OBJC2__
* Uses API 2 and ABI 0 for m32, uses the 'old' Object'
* Uses API 2 and ABI 2 - the libobjc implementation of Object is very
* basic, and we add a category to expand this for test-suite use.
*/
#ifndef _OBJC_OBJECT1_H_
#define _OBJC_OBJECT1_H_
#ifndef __NEXT_RUNTIME__
/* Case 1 = GNU. */
# include <objc/Object.h>
/* NeXT requires a +initialize (or forward:) method, and it makes testcases more
readable if the conditional code can be reduced, so we add one to the GNU tests
too. This saves us from having to introduce it every time. */
@interface Object (TEST_SUITE_ADDITIONS)
+ + initialize;
@end
#else /* NeXT */
# include "next-abi.h"
# if !defined(NEXT_OBJC_ABI_VERSION) || (NEXT_OBJC_ABI_VERSION < 2)
/* Cases 2, Case 3/m32 and 4/m32 are handled as default. */
# include <objc/Object.h>
# else
# include <objc/objc.h>
/* This is a cut-down Object with only the methods currently required
by the testsuite declared. The implementation is provided in
Object1-implementation.h
*/
/* The m64 libobjc implementation of Object provides only the 'class' and
isEqual: methods.
We add the others required as a test-suite category.
Please leave the unimplemented methods as comments - so that they can
be inserted as required by future tests. */
@interface Object
{
Class isa;
}
+ (Class) class;
- (BOOL)isEqual: (id)anObject;
@end
/* Dummy definition. */
typedef void * marg_list;
@interface Object (TEST_SUITE_ADDITIONS)
+ + initialize;
- - init;
+ + new;
+ + free;
- - free;
+ + alloc;
//- copy;
//+ allocFromZone:(void *)zone;
//- copyFromZone:(void *)zone;
//- (void *)zone;
- (Class) class;
+ (Class) superclass;
//+ (const char *) name;
//- superclass;
- (const char *) name;
//- self;
//- (unsigned int) hash;
/* Testing inheritance relationships */
//- (BOOL) isKindOf: aClassObject;
//- (BOOL) isMemberOf: aClassObject;
//- (BOOL) isKindOfClassNamed: (const char *)aClassName;
//- (BOOL) isMemberOfClassNamed: (const char *)aClassName;
/* Testing class functionality */
//+ (BOOL) instancesRespondTo:(SEL)aSelector;
//- (BOOL) respondsTo:(SEL)aSelector;
/* Testing protocol conformance */
- (BOOL) conformsTo: (Protocol *)aProtocolObject;
//+ (BOOL) conformsTo: (Protocol *)aProtocolObject;
/* Obtaining method descriptors from protocols */
//- (struct objc_method_description *) descriptionForMethod:(SEL)aSel;
//+ (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel;
/* Obtaining method handles */
//- (IMP) methodFor:(SEL)aSelector;
//+ (IMP) instanceMethodFor:(SEL)aSelector;
/* Sending messages determined at run time */
//- perform:(SEL)aSelector;
//- perform:(SEL)aSelector with:anObject;
//- perform:(SEL)aSelector with:object1 with:object2;
/* Posing */
//+ poseAs: aClassObject;
/* Enforcing intentions */
//- subclassResponsibility:(SEL)aSelector;
//- notImplemented:(SEL)aSelector;
/* Error handling */
//- doesNotRecognize:(SEL)aSelector;
//- error:(const char *)aString, ...;
/* Debugging */
//- (void) printForDebugger:(void *)stream;
/* Archiving */
//- awake;
//- write:(void *)stream;
//- read:(void *)stream;
//+ (int) version;
//+ setVersion: (int) aVersion;
/* Forwarding */
- - forward: (SEL)sel : (marg_list)args;
//- performv: (SEL)sel : (marg_list)args;
@end
# endif /* NeXT case 3 & 4 m64 */
# endif /* NEXT */
#endif /* _OBJC_OBJECT1_H_ */
/* This will generate compatibility code for the test-suite provided as a
category on Object.
*/
#include "Object1-implementation.h"
/* This will generate compatibility code for the test-suite provided as a
category on Object.
*/
#import "Object1-implementation.h"
/*
* 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_ */
/* Very simple root class for writing testcases.
Copyright (C) 2011 Free Software Foundation, Inc.
Contributed by Nicola Pero
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#ifndef _TESTSUITE_OBJECT_H_
#define _TESTSUITE_OBJECT_H_
/* We use this root class instead of Object to keep the tests
independent of the runtime being used. Keep it simple. */
@interface TestsuiteObject
{
Class isa;
}
/* Required by the NeXT runtime. Does nothing. */
+ (id) initialize;
/* Creating instances. */
+ (id) new;
+ (id) alloc;
- (id) init;
- (void) free;
/* Auxiliary methods. */
+ (Class) class;
+ (Class) superclass;
+ (const char *)name;
- (const char *)name;
@end
#endif /* _TESTSUITE_OBJECT_H_ */
/* Very simple root class for writing testcases.
Copyright (C) 2011 Free Software Foundation, Inc.
Contributed by Nicola Pero
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/* This is the implementation, but in all simple testcases we
recommend simply including it in the testcase. */
#include "TestsuiteObject.h"
#include "runtime.h"
@implementation TestsuiteObject
+ (id) initialize
{
return self;
}
+ (id) new
{
return [[self alloc] init];
}
+ (id) alloc
{
return class_createInstance (self, 0);
}
- (id) init
{
return self;
}
- (void) free
{
object_dispose (self);
}
+ (Class) class
{
return self;
}
+ (Class) superclass
{
return class_getSuperclass (self);
}
+ (const char *)name
{
return class_getName (self);
}
- (const char *)name
{
return class_getName (isa);
}
@end
/* Compatibility header between runtimes and APIs.
Copyright (C) 2010, 2011 Free Software Foundation, Inc.
Original Authors: Ziemowit Laski <zlaski@apple.com>
David Ayers <d.ayers@inode.at>
re-work for ObjC2 by Iain Sandoe <iains@gcc.gnu.org>
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#ifndef _OBJC_NEXT_MAPPING_H_
#define _OBJC_NEXT_MAPPING_H_
/* This file provides a two-way mapping of API names for the original
GNU & NeXT APIs.
It is being expanded to provide mapping (where possible) between between the
older API and API-2.
*/
#include "objc-test-suite-types.h"
#ifndef __NEXT_RUNTIME__
# define CLASSFIELD class_pointer
# define CLASSPTRFIELD(x) (x)->class_pointer
# define SUPERCLASS superClass
# define OBJC_GETCLASS objc_get_class
# ifdef __objc_api_INCLUDE_GNU
# define class_createInstance(C, S) class_create_instance(C)
# endif
# define method_get_types(M) (M)->method_types
#else /* NeXT */
/* Include next-abi.h to set NEXT_OBJC_USE_NEW_INTERFACE etc.*/
# include "next-abi.h"
# ifdef NEXT_OBJC_USE_NEW_INTERFACE
/* API=2. */
# include <objc/runtime.h>
# else
/* API=0. */
# include <objc/objc-class.h>
# endif
# define CLASSPTRFIELD(x) (x)->isa
# define SUPERCLASS superclass
# define OBJC_GETCLASS objc_getClass
# 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)
# define objc_lookup_class(N) objc_lookUpClass(N)
# 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 /* OLD API */
# 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 /* NEXT_OBJC_USE_NEW_INTERFACE */
# endif /*__NEXT_RUNTIME__ */
#endif /* _OBJC_NEXT_MAPPING_H_ */
\ No newline at end of file
......@@ -21,17 +21,8 @@ along with GCC; see the file COPYING3. If not see
#ifndef _OBJC_TEST_SUITE_TYPES_H_
#define _OBJC_TEST_SUITE_TYPES_H_
#ifdef __cplusplus
#define ProtoBool bool
#else
#define ProtoBool _Bool
#endif
#ifndef __NEXT_RUNTIME__
#define METHOD Method_t
#define IVAR_T struct objc_ivar
/* dummy const string class ref. */
typedef void * TNS_STRING_REF_T;
......@@ -52,16 +43,12 @@ typedef void * TNS_STRING_REF_T;
#define NULL 0
#endif
#define METHOD Method
/* Where there are equivalent interfaces between APIs we substitute
a macro or typedef. */
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
typedef void * PMETH;
#define IVAR_T Ivar
#else
typedef struct objc_method * PMETH;
#define IVAR_T struct objc_ivar
#endif
#ifdef __OBJC2__
......@@ -77,4 +64,4 @@ typedef struct objc_class TNS_STRING_REF_T;
#endif
#endif /*__NEXT_RUNTIME__ */
#endif /* _OBJC_TEST_SUITE_TYPES_H_ */
\ No newline at end of file
#endif /* _OBJC_TEST_SUITE_TYPES_H_ */
/* Wrapper around <objc/runtime.h>
Copyright (C) 2011 Free Software Foundation, Inc.
Contributed by Nicola Pero
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#ifndef _TESTSUITE_RUNTIME_H_
#define _TESTSUITE_RUNTIME_H_
/* Include this file where you'd normally include <objc/runtime.h>.
Older versions of the NeXT runtime do not have <objc/runtime.h> and
you need to include <objc/objc-runtime.h> instead. This file takes
care of figuring out if that's the case. */
#ifndef __NEXT_RUNTIME__
/*
GNU Objective-C runtime (libobjc).
*/
# include <objc/runtime.h>
#else
/*
NeXT Objective-C runtime.
*/
/* Include next-abi.h to determine which version of the runtime we are
dealing with. TODO: If this is the only place including it, maybe
it could be copied here ? */
# include "next-abi.h"
# ifdef NEXT_OBJC_USE_NEW_INTERFACE
/* New NeXT runtime, with an API that should be basically identical to
the GNU Objective-C one. */
# include <objc/runtime.h>
# else
/* Old NeXT runtime, with an API similar, but not identical to the new
one. To start with, different headers need to be included. */
# include <objc/objc-class.h>
# include <objc/objc-runtime.h>
/* Not all functions are available in the old NeXT runtime. A few
that we need are not, and here we provide an implementation on top
of the old NeXT API. */
# define class_isMetaClass(C) (CLS_GETINFO((struct objc_class *)C, CLS_META)? YES: NO)
# define class_getName(C) object_getClassName(C)
# define class_getSuperclass(C) (((struct objc_class *)C)->super_class)
# define method_getImplementation(M) (((Method)M)->method_imp)
# define method_getTypeEncoding(M) (((Method)M)->method_types)
# define object_getClass(O) (*(struct objc_class **)O)
#include <objc/Protocol.h>
BOOL class_conformsToProtocol (Class class_, Protocol *protocol)
{
struct objc_protocol_list *p;
int i;
for (p = class_->protocols; p; p = p->next)
for (i = 0; i < p->count; i++)
if ([p->list[i] conformsTo: protocol])
return YES;
return NO;
}
#define protocol_getName(P) [P name]
#define protocol_isEqual(P,Q) [P isEqual: Q]
struct objc_method_description protocol_getMethodDescription (Protocol *protocol,
SEL selector,
BOOL requiredMethod,
BOOL instanceMethod)
{
struct objc_method_description *tmp;
struct objc_method_description result;
if (instanceMethod)
{
tmp = [protocol descriptionForInstanceMethod: selector];
result = *tmp;
}
else
{
tmp = [protocol descriptionForClassMethod: selector];
result = *tmp;
}
return result;
}
# endif /* NEXT_OBJC_USE_NEW_INTERFACE */
# endif /* __NEXT_RUNTIME__ */
#endif /* _TESTSUITE_RUNTIME_H_ */
/* { dg-do compile } */
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
/* { dg-do compile } */
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
/* { dg-do compile } */
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
/* { dg-do compile } */
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
/* { dg-do compile } */
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object {
@interface obj : TestsuiteObject {
@public
int var;
}
......
......@@ -4,14 +4,14 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort();
@interface Base: Object
@interface Base: TestsuiteObject
{
int full;
int full2: 32;
......@@ -80,4 +80,3 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -4,7 +4,7 @@
/* { dg-options "-Wpadded" } */
/* { dg-do run } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
extern int strcmp(const char *str1, const char *str2);
......@@ -12,7 +12,7 @@ extern int strcmp(const char *str1, const char *str2);
enum Enum { one, two, three, four };
@interface Base: Object {
@interface Base: TestsuiteObject {
unsigned a: 2;
int b: 3;
enum Enum c: 4;
......
......@@ -7,7 +7,7 @@
/* { dg-options "-Wpadded" } */
/* { dg-do run } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
#include <stdlib.h>
......@@ -15,7 +15,7 @@
enum Enum { zero, one, two, three, four };
@interface Base: Object {
@interface Base: TestsuiteObject {
@public
unsigned a: 2;
int b: 3;
......
......@@ -5,7 +5,7 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
......@@ -23,7 +23,7 @@ Point MakePoint ( float x , float y ) {
return p;
}
@interface Base: Object
@interface Base: TestsuiteObject
- ( void ) translateOriginToPoint : ( Point ) translation ;
@end
......@@ -75,4 +75,4 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -2,16 +2,24 @@
/* 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 "../objc-obj-c++-shared/TestsuiteObject.h"
#include "../objc-obj-c++-shared/runtime.h"
#include <stddef.h>
/* FIXME: This is temporary. At the moment, the compiler, when
compiling for the GNU runtime and doing method checks, only
recognizes objc_get_class(), and not objc_getClass(). So
temporarily force objc_get_class() to be used. */
#ifndef __NEXT_RUNTIME__
# define objc_getClass(C) objc_get_class(C)
#endif
@protocol Func
+ (int) class_func0;
- (int) instance_func0;
@end
@interface Derived: Object
@interface Derived: TestsuiteObject
+ (int) class_func1;
+ (int) class_func2;
+ (int) class_func3;
......@@ -39,7 +47,7 @@
+ (int) class_func1
{
int i = (size_t)[self class_func0]; /* { dg-warning ".Derived. may not respond to .\\+class_func0." } */
return i + (size_t)[super class_func0]; /* { dg-warning ".Object. may not respond to .\\+class_func0." } */
return i + (size_t)[super class_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func0." } */
}
+ (int) class_func2
{
......@@ -50,7 +58,7 @@
}
+ (int) class_func3
{
return [(Object <Func> *)super class_func0];
return [(TestsuiteObject <Func> *)super class_func0];
}
+ (int) class_func4
{
......@@ -59,20 +67,20 @@
+ (int) class_func5
{
int i = (size_t)[Derived class_func0]; /* { dg-warning ".Derived. may not respond to .\\+class_func0." } */
return i + (size_t)[Object class_func0]; /* { dg-warning ".Object. may not respond to .\\+class_func0." } */
return i + (size_t)[TestsuiteObject class_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func0." } */
}
+ (int) class_func6
{
return (size_t)[objc_get_class("Object") class_func1]; /* { dg-warning ".Object. may not respond to .\\+class_func1." } */
return (size_t)[objc_getClass("TestsuiteObject") class_func1]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func1." } */
}
+ (int) class_func7
{
return [objc_get_class("Derived") class_func1];
return [objc_getClass("Derived") class_func1];
}
- (int) instance_func1
{
int i = (size_t)[self instance_func0]; /* { dg-warning ".Derived. may not respond to .\\-instance_func0." } */
return i + (size_t)[super instance_func0]; /* { dg-warning ".Object. may not respond to .\\-instance_func0." } */
return i + (size_t)[super instance_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-instance_func0." } */
}
- (int) instance_func2
{
......@@ -80,7 +88,7 @@
}
- (int) instance_func3
{
return [(Object <Func> *)super instance_func0];
return [(TestsuiteObject <Func> *)super instance_func0];
}
- (int) instance_func4
{
......@@ -89,15 +97,15 @@
- (int) instance_func5
{
int i = (size_t)[Derived instance_func1]; /* { dg-warning ".Derived. may not respond to .\\+instance_func1." } */
return i + (size_t)[Object instance_func1]; /* { dg-warning ".Object. may not respond to .\\+instance_func1." } */
return i + (size_t)[TestsuiteObject instance_func1]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+instance_func1." } */
}
- (int) instance_func6
{
return (size_t)[objc_get_class("Object") class_func1]; /* { dg-warning ".Object. may not respond to .\\+class_func1." } */
return (size_t)[objc_getClass("TestsuiteObject") class_func1]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func1." } */
}
- (int) instance_func7
{
return [objc_get_class("Derived") class_func1];
return [objc_getClass("Derived") class_func1];
}
@end
......@@ -108,7 +116,7 @@
i += [self class_func1];
i += [self categ_class_func2];
i += (size_t)[self categ_instance_func1]; /* { dg-warning ".Derived. may not respond to .\\+categ_instance_func1." } */
return i + (size_t)[super class_func0]; /* { dg-warning ".Object. may not respond to .\\+class_func0." } */
return i + (size_t)[super class_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func0." } */
}
+ (int) categ_class_func2
{
......@@ -121,11 +129,11 @@
{
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 *-*-* } 124 } */
i += (size_t)[(TestsuiteObject <Func> *)self categ_instance_func2]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-categ_instance_func2." } */
/* { dg-warning ".\\-categ_instance_func2. not found in protocol" "" { target *-*-* } 132 } */
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." } */
return i + (size_t)[super instance_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-instance_func0." } */
}
- (int) categ_instance_func2
{
......
......@@ -5,12 +5,12 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
@interface Base: Object
@interface Base: TestsuiteObject
+ (int) class_func1;
- (int) instance_func1;
@end
......@@ -54,4 +54,3 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -4,24 +4,18 @@
/* { dg-do run } */
/* { dg-xfail-run-if "need OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern int strcmp(const char *s1, const char *s2);
extern void abort(void);
#ifdef __NEXT_RUNTIME__
#define SUPERCLASS superclass
#else
#define SUPERCLASS superClass
#endif
#define CHECK_IF(expr) if(!(expr)) abort()
@interface MyObject: Object
@interface MyObject: TestsuiteObject
+ (Class)whatever1;
@end
@implementation MyObject
+ (Class)whatever1 { return [super SUPERCLASS]; }
+ (Class)whatever1 { return [super superclass]; }
@end
@interface MyObject (ThisWontCompile)
......@@ -29,7 +23,7 @@ extern void abort(void);
@end
@implementation MyObject (ThisWontCompile)
+(Class)whatever2 { return [super SUPERCLASS]; }
+(Class)whatever2 { return [super superclass]; }
@end
int main (int argc, const char * argv[])
......@@ -37,15 +31,9 @@ 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
CHECK_IF(!strcmp( object_getClassName( w1 ), "TestsuiteObject"));
CHECK_IF(!strcmp( object_getClassName( w2 ), "TestsuiteObject"));
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -3,7 +3,7 @@
/* { dg-do compile } */
#include <objc/objc.h>
#include <objc/objc-api.h>
#include "../objc-obj-c++-shared/runtime.h"
@protocol MyProto1
+(void)doItClass1;
......
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol Foo
- (id)meth1;
- (id)meth2:(int)arg;
@end
@interface Derived1: Object
@interface Derived1: TestsuiteObject
@end
@interface Derived2: Object
@interface Derived2: TestsuiteObject
+ (Derived1 *)new;
@end
id<Foo> func(void) {
Object *o = [Object new];
return o; /* { dg-warning "class .Object. does not implement the .Foo. protocol" } */
TestsuiteObject *o = [TestsuiteObject new];
return o; /* { dg-warning "class .TestsuiteObject. does not implement the .Foo. protocol" } */
}
@implementation Derived2
......
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Derived: Object
@interface Derived: TestsuiteObject
@end
extern Object* foo(void);
extern TestsuiteObject* foo(void);
static Derived *test(void)
{
Derived *m = foo(); /* { dg-warning "initialization from distinct Objective\\-C type" } */
......
/* When assigning function pointers, allow for covariant return types
and contravariant argument types. */
/* { dg-do compile } */
#include <objc/Object.h>
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class Derived;
Object *ExternFunc (Object *filePath, Object *key);
typedef id FuncSignature (Object *arg1, Derived *arg2);
TestsuiteObject *ExternFunc (TestsuiteObject *filePath, TestsuiteObject *key);
typedef id FuncSignature (TestsuiteObject *arg1, Derived *arg2);
@interface Derived: Object
@interface Derived: TestsuiteObject
+ (void)registerFunc:(FuncSignature *)function;
@end
......
/* { dg-do compile } */
/* Another gimplifier ICE... */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface MyView: Object {
@interface MyView: TestsuiteObject {
int _frame;
}
- (void)_finalize;
......
......@@ -5,14 +5,14 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
//#include <objc/objc.h>
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort();
@interface Base: Object {
@interface Base: TestsuiteObject {
@public
int a;
float b;
......@@ -67,4 +67,4 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -5,11 +5,11 @@
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdio.h>
#include <stdlib.h>
@interface Cls : Object
@interface Cls : TestsuiteObject
+ (int) meth1;
+ (int) meth2;
+ (void) doTests;
......@@ -48,4 +48,4 @@ int main(void) {
/* { 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"
......@@ -17,22 +17,14 @@
/* { dg-do run } */
/* { 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
#else
#include <objc/objc-api.h>
#define METHOD Method_t
#define method_get_types(M) (M)->method_types
#endif
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include "../objc-obj-c++-shared/runtime.h"
extern int sscanf(const char *str, const char *format, ...);
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
@interface Foo: Object
@interface Foo: TestsuiteObject
typedef struct { float x, y; } XXPoint;
typedef struct { float width, height; } XXSize;
typedef struct _XXRect { XXPoint origin; XXSize size; } XXRect;
......@@ -74,31 +66,29 @@ unsigned offs1, offs2, offs3, offs4, offs5, offs6, offs7;
int main(void) {
Foo *foo = [[Foo alloc] init];
Class fooClass = objc_get_class("Foo");
METHOD meth;
Class fooClass = objc_getClass("Foo");
Method meth;
const char *string;
meth = class_get_instance_method(fooClass, @selector(setRect:withInt:));
meth = class_getInstanceMethod(fooClass, @selector(setRect:withInt:));
offs2 = 9999;
sscanf(method_get_types(meth), "@%u@%u:%u{_XXRect={?=ff}{?=ff}}%ui%u", &offs1, &offs2, &offs3,
sscanf(method_getTypeEncoding(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_get_instance_method(fooClass, @selector(char:float:double:long:));
meth = class_getInstanceMethod(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(method_get_types(meth), string, &offs1, &offs2, &offs3,
sscanf(method_getTypeEncoding(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"
......@@ -6,12 +6,13 @@
#include <stdio.h>
#include <stdlib.h>
#ifndef __NEXT_RUNTIME__
# include <objc/objc-api.h>
#include "../objc-obj-c++-shared/runtime.h"
#ifdef __cplusplus
#define ProtoBool bool
#else
#define ProtoBool _Bool
#endif
#include "../objc-obj-c++-shared/objc-test-suite-types.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include <objc/Protocol.h>
extern int sscanf(const char *str, const char *format, ...);
extern void abort(void);
......@@ -36,9 +37,7 @@ typedef struct _XXRect { XXPoint origin; XXSize size; struct _XXRect *next; } XX
Protocol *proto;
struct objc_method_description *meth;
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
struct objc_method_description meth_object;
#endif
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
static void scan_initial(const char *pattern) {
......@@ -51,13 +50,9 @@ static void scan_initial(const char *pattern) {
int main(void) {
const char *string;
proto = @protocol(Proto);
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(char:float:double:unsigned:short:long:), YES, YES);
meth = &meth_object;
#else
meth = [proto descriptionForInstanceMethod: @selector(char:float:double:unsigned:short:long:)];
#endif
if (sizeof (long) == 8)
string = "v%u@%u:%uc%uf%ud%uI%us%uq%u";
else
......@@ -66,23 +61,15 @@ int main(void) {
CHECK_IF(offs3 == offs2 + sizeof(int) && offs4 == offs3 + sizeof(float));
CHECK_IF(offs5 == offs4 + sizeof(double) && offs6 == offs5 + sizeof(unsigned));
CHECK_IF(offs7 == offs6 + sizeof(int) && totsize == offs7 + sizeof(long));
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(setRect:withBool:withInt:), YES, YES);
meth = &meth_object;
#else
meth = [proto descriptionForInstanceMethod: @selector(setRect:withBool:withInt:)];
#endif
scan_initial("^v%u@%u:%u{_XXRect={?=ff(__XXAngle=II)}{?=dd}^{_XXRect}}%uB%ui%u");
CHECK_IF(offs3 == offs2 + sizeof(XXRect) && offs4 == offs3 + sizeof(int));
CHECK_IF(totsize == offs4 + sizeof(int));
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(getEnum:enum:bool:), YES, NO);
meth = &meth_object;
#else
meth = [proto descriptionForClassMethod: @selector(getEnum:enum:bool:)];
#endif
/* Here we have the complication that 'enum Enum' could be encoded
as 'i' on __NEXT_RUNTIME_, and (most likely) as 'I' on the GNU
......@@ -100,13 +87,9 @@ int main(void) {
CHECK_IF(offs3 == offs2 + sizeof(XXPoint *) && offs4 == offs3 + sizeof(enum Enum));
CHECK_IF(totsize == offs4 + sizeof(int)); /* 'ObjCBool' is really 'char' */
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(getBool:), YES, NO);
meth = &meth_object;
#else
meth = [proto descriptionForClassMethod: @selector(getBool:)];
#endif
scan_initial("^^B%u@%u:%u^*%u");
CHECK_IF(totsize == offs2 + sizeof(ObjCBool **));
return 0;
......
......@@ -4,13 +4,8 @@
/* { dg-do run } */
/* { 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__
#include <objc/objc-class.h>
#else
#include <objc/objc-api.h>
#endif
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include "../objc-obj-c++-shared/runtime.h"
extern void abort(void);
extern int strcmp(const char *s1, const char *s2);
......@@ -31,7 +26,7 @@ struct Nested {
struct Innermost innermost;
};
@interface Int1: Object {
@interface Int1: TestsuiteObject {
signed char a, b;
Int2 *int2;
struct Nested nested;
......@@ -50,28 +45,28 @@ struct Nested {
@implementation Int2
@end
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Ivar *ivar;
#else
#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
struct objc_ivar *ivar;
#else
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
#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
CHECK_IF(!strcmp(ivar->ivar_name, name));
CHECK_IF(!strcmp(ivar->ivar_type, type));
#else
CHECK_IF(!strcmp(ivar_getName(*ivar), name));
CHECK_IF(!strcmp(ivar_getTypeEncoding(*ivar), type));
#endif
ivar++;
}
int main(void) {
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
ivar = class_copyIvarList ((Class)objc_get_class("Int1"), NULL);
#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
ivar = ((Class)objc_getClass("Int1"))->ivars->ivar_list;
#else
ivar = ((Class)objc_get_class("Int1"))->ivars->ivar_list;
ivar = class_copyIvarList ((Class)objc_getClass("Int1"), NULL);
#endif
check_ivar("a", "c");
check_ivar("b", "c");
......@@ -79,10 +74,10 @@ int main(void) {
check_ivar("nested",
"{Nested=\"a\"f\"b\"f\"next\"@\"Int1\"\"innermost\"{Innermost=\"a\"C\"b\"C\"encl\"^{Nested}}}");
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
ivar = class_copyIvarList ((Class)objc_get_class("Int2"), NULL);
#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
ivar = ((Class)objc_getClass("Int2"))->ivars->ivar_list;
#else
ivar = ((Class)objc_get_class("Int2"))->ivars->ivar_list;
ivar = class_copyIvarList ((Class)objc_getClass("Int2"), NULL);
#endif
check_ivar("innermost", "^{Innermost=CC^{Nested}}");
check_ivar("base", "@\"Int1\"");
......@@ -90,4 +85,3 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -9,21 +9,13 @@
/* Contributed by Alexander Malmberg <alexander@malmberg.org> */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include "../objc-obj-c++-shared/runtime.h"
#include <stdlib.h>
#include <stdio.h>
#define CHECK_IF(expr) if(!(expr)) abort()
#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
@interface Test : Object
@interface Test : TestsuiteObject
{ float j; }
-(void) test2: (int [5])a with: (int [])b;
-(id) test3: (Test **)b; /* { dg-message "previous declaration of .\\-\\(id\\)test3:\\(Test \\*\\*\\)b." } */
......@@ -47,8 +39,8 @@ int offs1, offs2, offs3, offs4, offs5, offs6;
int main(int argc, char **argv)
{
Class testClass = objc_get_class("Test");
METHOD meth;
Class testClass = objc_getClass("Test");
Method meth;
cc[0] = [Test new];
CHECK_IF (bb[3] == 3);
......@@ -58,16 +50,16 @@ int main(int argc, char **argv)
[*c test2: bb with: bb + 5];
CHECK_IF (bb[3] == 5);
meth = class_get_instance_method(testClass, @selector(test2:with:));
meth = class_getInstanceMethod(testClass, @selector(test2:with:));
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
sscanf(method_get_types(meth), "v%d@%d:%d[%di]%d^i%d", &offs1, &offs2, &offs3,
sscanf(method_getTypeEncoding(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_get_instance_method(testClass, @selector(test3:));
meth = class_getInstanceMethod(testClass, @selector(test3:));
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
sscanf(method_get_types(meth), "v%d@%d:%d[%d[%d{Test=#f}]]%d", &offs1, &offs2, &offs3,
sscanf(method_getTypeEncoding(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);
......
......@@ -9,7 +9,7 @@
#include <string.h>
#include <stdlib.h>
#include <objc/Object.h>
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/runtime.h"
#define CHECK_IF(E) if (!(E)) abort ()
......
......@@ -6,8 +6,8 @@
/* { dg-options "-Wno-deprecated-declarations" } */
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include "../objc-obj-c++-shared/runtime.h"
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
......@@ -99,10 +99,10 @@ typedef struct {
unsigned int parameterMask;
} NSErrorUserInfoFormatter;
typedef Object MyObj;
typedef Object *MyPtr;
typedef TestsuiteObject MyObj;
typedef TestsuiteObject *MyPtr;
@interface Foo: Object {
@interface Foo: TestsuiteObject {
NSATSGlyphStorageRun r;
}
- (NSError *)_errorWithOSStatus:(OSStatus)inOSStatus ref1:(const FSRef *)inRef1 ref2:(const struct FSRef *)inRef2
......@@ -114,7 +114,7 @@ typedef Object *MyPtr;
- (id)str1:(const char *)str1 str2:(char *)str2 str3:(char *const)str3 str4:(const char *const)str4;
- (oneway void)foo1:(Foo *)foo1 foo2:(const Foo *)foo2 foo3:(Foo *const)foo3 foo4:(const Foo *const)foo4;
- (in const char *)sel1:(const SEL)sel1 id1:(const id)id1;
- (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3;
- (inout id)obj1:(const MyPtr)obj1 obj2:(TestsuiteObject *const)obj2 obj3:(MyObj *const)obj3;
+ (ComponentInstance)_defaultScriptingComponent;
- (NSString *)_formatCocoaErrorString:(NSString *)formatString parameters:(const char *)parameters
applicableFormatters:(NSErrorUserInfoFormatter **)formatters count:(int)numFormatters;
......@@ -156,7 +156,7 @@ NSRange globalRange;
- (in const char *)sel1:(const SEL)sel1 id1:(const id)id1 {
return "Hello";
}
- (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3 {
- (inout id)obj1:(const MyPtr)obj1 obj2:(TestsuiteObject *const)obj2 obj3:(MyObj *const)obj3 {
return self;
}
+ (ComponentInstance)_defaultScriptingComponent {
......@@ -222,7 +222,7 @@ int main(void) {
CHECK_IF (!strcmp (meth->method_types, "rn*16@0:4r:8r@12"));
meth = class_getInstanceMethod (fooClass, @selector(obj1:obj2:obj3:));
CHECK_IF (!strcmp (meth->method_types, "N@20@0:4r@8@12^{Object=#}16"));
CHECK_IF (!strcmp (meth->method_types, "N@20@0:4r@8@12^{TestsuiteObject=#}16"));
meth = class_getClassMethod (fooClass, @selector(_defaultScriptingComponent));
CHECK_IF (!strcmp (meth->method_types, "^{ComponentInstanceRecord=[1l]}8@0:4"));
......
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
#include <objc/encoding.h>
#include <objc/runtime.h>
#include <stdlib.h>
struct f
......
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
#include <objc/encoding.h>
#include <objc/runtime.h>
#include <stdlib.h>
union f
......
......@@ -2,15 +2,14 @@
/* { dg-do run } */
/* { dg-options "-fobjc-exceptions" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
/* This test checks the syntax @catch (...) which catches any
exceptions. Check that code using it runs correctly. */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
@interface MyObject : Object
@interface MyObject : TestsuiteObject
@end
@implementation MyObject
......@@ -45,7 +44,7 @@ int main (void)
if (test ([MyObject new]) != 5)
abort ();
if (test ([Object new]) != 6)
if (test ([TestsuiteObject new]) != 6)
abort ();
return 0;
......
......@@ -6,14 +6,14 @@
/* { dg-options "-mfix-and-continue" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
@class MyTarget, MySet;
int global_value = 0;
@interface MyTargetBuildContext : Object
@interface MyTargetBuildContext : TestsuiteObject
{
MyTarget * _target;
unsigned _cacheInvalDisableCount;
......@@ -31,7 +31,7 @@ int global_value = 0;
+ (MySet *)_headerFileExtensions;
@end
@interface MyCountedSet: Object {
@interface MyCountedSet: TestsuiteObject {
@public
int cardinality;
}
......@@ -52,7 +52,7 @@ int global_value = 0;
}
@end
@implementation MyTargetBuildContext : Object
@implementation MyTargetBuildContext : TestsuiteObject
- (id)initWithTarget:(MyTarget *)target
{
self = [super init];
......@@ -90,4 +90,3 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -6,18 +6,18 @@
/* { dg-do assemble { target *-*-darwin* } } */
/* { dg-options "-mfix-and-continue" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Foo: Object
+ (Object *)indexableFileTypes;
@interface Foo: TestsuiteObject
+ (TestsuiteObject *)indexableFileTypes;
@end
@implementation Foo
+ (Object *)indexableFileTypes
+ (TestsuiteObject *)indexableFileTypes
{
static Object *fileTypes = 0;
static TestsuiteObject *fileTypes = 0;
if(!fileTypes) {
fileTypes = [Object new];
fileTypes = [TestsuiteObject new];
}
return fileTypes;
}
......
......@@ -4,10 +4,9 @@
/* { dg-do run } */
/* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
/* { dg-options "-Wall" } */
#import "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort (void);
/*
......@@ -19,7 +18,7 @@ struct __objcFastEnumerationState
unsigned long extra[5];
};
*/
@interface Object (NSFastEnumeration)
@interface TestsuiteObject (NSFastEnumeration)
- (unsigned long)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state
objects:(id *)stackbuf
count:(unsigned int)len;
......@@ -44,7 +43,7 @@ int main (void)
abort ();
/* Test that if nothing is done, object is set to nil. */
object = [Object new];
object = [TestsuiteObject new];
for (object in array)
;
......
......@@ -5,10 +5,9 @@
/* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m ../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
/* { dg-additional-sources "../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#else
......@@ -32,7 +31,7 @@ struct __objcFastEnumerationState
enumeration. You create the array with some objects; you can
mutate the array, and you can fast-enumerate it.
*/
@interface MyArray : Object
@interface MyArray : TestsuiteObject
{
unsigned int length;
id *objects;
......@@ -45,7 +44,7 @@ struct __objcFastEnumerationState
count:(unsigned long)len;
@end
@implementation MyArray : Object
@implementation MyArray : TestsuiteObject
- (id) initWithLength: (unsigned int)l
objects: (id *)o
{
......@@ -90,7 +89,7 @@ struct __objcFastEnumerationState
int main (void)
{
MyArray *array;
Object *object;
TestsuiteObject *object;
int test_variable, counter, i;
id *objects;
......
......@@ -7,8 +7,7 @@
works, but how do we tell the testsuite to test for it ?
*/
#import "../objc-obj-c++-shared/Object1.h"
#import "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#endif
......@@ -30,7 +29,7 @@ struct __objcFastEnumerationState
enumeration. You create the array with some objects; you can
mutate the array, and you can fast-enumerate it.
*/
@interface MyArray : Object
@interface MyArray : TestsuiteObject
{
unsigned int length;
id *objects;
......@@ -43,7 +42,7 @@ struct __objcFastEnumerationState
count:(unsigned long)len;
@end
@implementation MyArray : Object
@implementation MyArray : TestsuiteObject
- (id) initWithLength: (unsigned int)l
objects: (id *)o
{
......@@ -90,7 +89,7 @@ struct __objcFastEnumerationState
int main (void)
{
MyArray *array;
Object *object;
TestsuiteObject *object;
int counter, i;
id *objects;
......
......@@ -5,10 +5,9 @@
/* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m ../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
/* { dg-additional-sources "../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
#import "../objc-obj-c++-shared/Object1.h"
#import "../objc-obj-c++-shared/next-mapping.h"
#import "../objc-obj-c++-shared/TestsuiteObject.m"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#else
......@@ -32,7 +31,7 @@ struct __objcFastEnumerationState
enumeration. You create the array with some objects; you can
mutate the array, and you can fast-enumerate it.
*/
@interface MyArray : Object
@interface MyArray : TestsuiteObject
{
unsigned int length;
id *objects;
......@@ -45,7 +44,7 @@ struct __objcFastEnumerationState
count:(unsigned long)len;
@end
@implementation MyArray : Object
@implementation MyArray : TestsuiteObject
- (id) initWithLength: (unsigned int)l
objects: (id *)o
{
......
......@@ -5,10 +5,9 @@
/* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m ../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
/* { dg-additional-sources "../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
#import "../objc-obj-c++-shared/Object1.h"
#import "../objc-obj-c++-shared/next-mapping.h"
#import "../objc-obj-c++-shared/TestsuiteObject.m"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#else
......@@ -30,7 +29,7 @@ typedef struct
enumeration. You create the array with some objects; you can
mutate the array, and you can fast-enumerate it.
*/
@interface MyArray : Object
@interface MyArray : TestsuiteObject
{
unsigned int length;
id *objects;
......@@ -43,7 +42,7 @@ typedef struct
count:(unsigned long)len;
@end
@implementation MyArray : Object
@implementation MyArray : TestsuiteObject
- (id) initWithLength: (unsigned int)l
objects: (id *)o
{
......
/* Test basic Objective-C foreach syntax. This tests warnings and errors. */
/* { dg-do compile } */
#import "../objc-obj-c++-shared/Object1.h"
#import "../objc-obj-c++-shared/next-mapping.h"
#import "../objc-obj-c++-shared/TestsuiteObject.h"
#import <objc/objc.h>
#undef nil
#define nil ((id)0)
/*
struct __objcFastEnumerationState
......@@ -13,7 +15,7 @@ struct __objcFastEnumerationState
unsigned long extra[5];
};
*/
@interface Object (NSFastEnumeration)
@interface TestsuiteObject (NSFastEnumeration)
- (unsigned long)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state
objects:(id *)stackbuf
count:(unsigned int)len;
......@@ -46,7 +48,7 @@ int main (void)
;
for (12 in array) /* { dg-error "invalid iterating variable in fast enumeration" } */
; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 48 } */
; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 50 } */
for (object in 12) /* { dg-error "collection in fast enumeration is not an object" } */
;
......
/* Test basic Objective-C foreach syntax. This tests warnings and errors. */
/* { dg-do compile } */
#import "../objc-obj-c++-shared/Object1.h"
#import "../objc-obj-c++-shared/next-mapping.h"
#import "../objc-obj-c++-shared/TestsuiteObject.h"
#import <objc/objc.h>
#undef nil
#define nil ((id)0)
/*
struct __objcFastEnumerationState
{
......@@ -13,7 +14,7 @@ struct __objcFastEnumerationState
unsigned long extra[5];
};
*/
@interface Object (NSFastEnumeration)
@interface TestsuiteObject (NSFastEnumeration)
- (unsigned long)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state
objects:(id *)stackbuf
count:(unsigned int)len;
......@@ -36,10 +37,10 @@ int main (void)
id object = nil;
for (typedef int my_typedef in array) /* { dg-error "declaration of non-variable" } */
; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 38 } */
; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 39 } */
for (function () in nil) /* { dg-error "invalid iterating variable in fast enumeration" } */
; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 41 } */
; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 42 } */
for (object_function () in nil) /* { dg-error "invalid iterating variable in fast enumeration" } */
;
......
/* { dg-do compile } */
#import "../objc-obj-c++-shared/Object1.h"
#include <objc/objc-api.h>
#import "../objc-obj-c++-shared/TestsuiteObject.h"
@interface obj : Object
@interface obj : TestsuiteObject
{
@public
int v1;
......@@ -18,7 +17,7 @@
- (void) setValue: (int)number;
@end
@implementation obj : Object
@implementation obj : TestsuiteObject
- (int) value { return v1; }
- (void) setValue: (int)number { v1 = number; }
......@@ -33,5 +32,5 @@ void foo (void)
a->v2 = 1;
a->v3 = [a value] - a->v2; /* { dg-warning ".v3. is @protected" } */
a->v4 = a->v3 - 1; /* { dg-warning ".v4. is @private" } */
/* { dg-warning ".v3. is @protected" "" { target *-*-* } 35 } */
/* { dg-warning ".v3. is @protected" "" { target *-*-* } 34 } */
}
......@@ -2,7 +2,7 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern int strcmp(const char *, const char *);
extern void abort(void);
......@@ -10,7 +10,7 @@ extern void abort(void);
typedef float (*floatfunc)(float, float);
@interface MyObject : Object
@interface MyObject : TestsuiteObject
{
@public
int (*ivar)(int, int, int);
......@@ -47,5 +47,3 @@ int main ()
return(0);
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -5,10 +5,9 @@
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include <stdlib.h>
/* provide an Object class for NeXT runtimes 10.5 and above */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
@interface Func: Object
@interface Func: TestsuiteObject
+ (int) processNumber:(int)a and:(int)b usingFunction:(int(int,int))func;
@end
......@@ -38,4 +37,3 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -261,7 +261,7 @@ switchfiles (int fields)
/* { dg-do run } */\n\
/* { dg-options \"-w -I%s -fgnu-runtime\" } */\n", srcdir);
}
fprintf(outfile, "#include <objc/encoding.h> \n\
fprintf(outfile, "#include <objc/runtime.h> \n\
#include \"struct-layout-1.h\"\n\
\n\
int fails; \n\
......
......@@ -4,9 +4,9 @@
/* { dg-do compile } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
#include <objc/Object.h>
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface FooBar: Object
@interface FooBar: TestsuiteObject
- (void)boo;
@end
......
......@@ -3,12 +3,12 @@
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
#include <objc/Object.h>
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <string.h>
#include <stdlib.h>
int main(int argc, void **args)
{
[Object new];
[TestsuiteObject new];
return 0;
}
......@@ -12,11 +12,11 @@
#include <objc/Protocol.h>
#ifdef __NEXT_RUNTIME__
#include <objc/objc-runtime.h>
#include <objc/objc-api.h>
#else
#include <objc/encoding.h>
#include <objc/runtime.h>
#endif
#include <objc/objc-api.h>
#include <objc/objc.h>
#ifndef __NEXT_RUNTIME__
......
/* Ensure there are no bizarre difficulties with accessing the 'isa' field of objects. */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include "../objc-obj-c++-shared/runtime.h"
@interface Object (Test)
@interface TestsuiteObject (Test)
- (Class) test1: (id)object;
@end
@interface Derived: Object
@interface Derived: TestsuiteObject
- (Class) test2: (id)object;
@end
@implementation Object (Test)
@implementation TestsuiteObject (Test)
Class test1(id object) {
#ifdef __NEXT_RUNTIME__
......
......@@ -3,13 +3,13 @@
/* { dg-do compile } */
/* { dg-options "-Wpadded -Wpacked" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Derived1: Object
@interface Derived1: TestsuiteObject
{ }
@end
@interface Derived2: Object
@interface Derived2: TestsuiteObject
- (id) foo;
@end
......@@ -4,10 +4,10 @@
/* { dg-do compile } */
/* { dg-options "-Wpadded" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
/* Implement a class, so that the metadata generation happens. */
@interface MyClass : Object
@interface MyClass : TestsuiteObject
@end
@implementation MyClass
......
......@@ -3,9 +3,9 @@
/* Author: Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Sprite: Object {
@interface Sprite: TestsuiteObject {
int sprite, spree;
}
+ (void)setFoo:(int)foo;
......
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
#include <stdlib.h>
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
typedef struct MyWidget {
int a;
......@@ -15,13 +14,13 @@ MyWidget gWidget = { 17 };
- (MyWidget *)widget;
@end
@interface Foo: Object
@interface Foo: TestsuiteObject
@end
@interface Bar: Foo <MyProto>
@end
@interface Container: Object
@interface Container: TestsuiteObject
+ (MyWidget *)elementForView:(Foo *)view;
@end
......@@ -38,7 +37,8 @@ MyWidget gWidget = { 17 };
+ (MyWidget *)elementForView:(Foo *)view
{
MyWidget *widget = (MyWidget *) nil;
if ([view conformsTo:@protocol(MyProto)]) {
if (class_conformsToProtocol (object_getClass (view),
@protocol(MyProto))) {
widget = [(Foo <MyProto> *)view widget];
}
return widget;
......
......@@ -5,14 +5,14 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
static double d = 4.5920234e2;
@interface Foo : Object
@interface Foo : TestsuiteObject
-(void) brokenType: (int)x floatingPoint: (double)y;
@end
......@@ -32,4 +32,3 @@ int main(void)
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -6,12 +6,7 @@
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include <objc/objc.h>
#ifdef __NEXT_RUNTIME__
#define OBJC_GETCLASS objc_getClass
#else
#define OBJC_GETCLASS objc_get_class
#endif
#include "../objc-obj-c++-shared/runtime.h"
extern void abort(void);
extern int strcmp(const char *, const char *);
......@@ -48,16 +43,14 @@ extern int strcmp(const char *, const char *);
@end
@implementation Root
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
- (const char *) method1 { return "Root::-method1"; }
+ (const char *) method2 { return "Root::+method2"; }
@end
int main(void)
{
Class obj = OBJC_GETCLASS("Derived");
Class obj = objc_getClass("Derived");
/* None of the following should elicit compiler-time warnings. */
......
......@@ -4,7 +4,9 @@
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
#include "../objc-obj-c++-shared/runtime.h"
@class NSString;
......@@ -13,19 +15,19 @@
+ (BOOL)usesUserKeyEquivalents;
@end
@interface NSMenuItem : Object <NSMenuItem> {
@interface NSMenuItem : TestsuiteObject <NSMenuItem> {
@private
id _menu;
}
@end
@interface NSResponder : Object <NSMenuItem>
@interface NSResponder : TestsuiteObject <NSMenuItem>
{
id _nextResponder;
}
@end
@interface Object(NSMenuValidation)
@interface TestsuiteObject(NSMenuValidation)
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
@end
......
......@@ -3,9 +3,9 @@
/* { dg-do compile } */
/* { dg-options "-Wreturn-type -Wextra" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Foo: Object
@interface Foo: TestsuiteObject
- (id) meth1;
- (void) meth2;
@end
......@@ -15,7 +15,7 @@ extern int bar;
@implementation Foo
- (id) meth1 {
if (bar)
return [Object new];
return [TestsuiteObject new];
return; /* { dg-warning "'return' with no value, in function returning non-void" } */
}
- (void) meth2 {
......
......@@ -3,7 +3,7 @@
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class NotKnown;
......
......@@ -2,10 +2,9 @@
they should. */
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <string.h>
#include <stdlib.h>
......@@ -19,7 +18,7 @@ char *strcpy_like_callee(const char *s) {
typedef char io_string_t[512];
typedef char *(func_type)(const char *);
@interface DeviceObject: Object
@interface DeviceObject: TestsuiteObject
- (void) func:(func_type)func stucPathInIORegistry:(io_string_t)ioRegPath;
@end
@implementation DeviceObject
......
......@@ -4,17 +4,17 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
@interface Int1: Object
@interface Int1: TestsuiteObject
+ (int) classMeth;
- (int) instanceMeth;
@end
@interface Int2: Object
@interface Int2: TestsuiteObject
+ (int) classMeth;
- (int) instanceMeth;
@end
......@@ -45,4 +45,3 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -5,16 +5,16 @@
/* { dg-do compile { target { *-*-darwin* && { ! lp64 } } } } */
/* { dg-skip-if "" { *-*-darwin* } { "-fgnu-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
typedef Object ObjectTypedef1;
typedef TestsuiteObject ObjectTypedef1;
typedef ObjectTypedef1 ObjectTypedef2;
@compatibility_alias ObjectAlias1 ObjectTypedef2;
@compatibility_alias ObjectAlias2 ObjectAlias1;
typedef ObjectAlias2 ObjectTypedef3;
void foo(void) {
id obj = [Object new];
id obj = [TestsuiteObject new];
obj = [ObjectTypedef1 new];
obj = [ObjectTypedef2 new];
obj = [ObjectTypedef3 new];
......
......@@ -4,7 +4,7 @@
/* { dg-do compile } */
/* { dg-options "-Wstrict-selector-match" } */
#include "../objc-obj-c++-shared/Protocol1.h"
#include <objc/Protocol.h>
@interface Base
- (unsigned)port;
......
......@@ -3,11 +3,11 @@
/* { dg-do compile } */
/* { dg-options "-Wstrict-selector-match" } */
#include "../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Class1
- (void)setWindow:(Object *)wdw;
- (void)setWindow:(TestsuiteObject *)wdw;
@end
@interface Class2
......@@ -15,14 +15,14 @@
@end
id foo(void) {
Object *obj = [[Object alloc] init];
TestsuiteObject *obj = [[TestsuiteObject alloc] init];
id obj2 = obj;
[obj setWindow:nil]; /* { dg-warning ".Object. may not respond to .\\-setWindow:." } */
[obj setWindow:nil]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-setWindow:." } */
/* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 20 } */
/* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 20 } */
/* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 20 } */
[obj2 setWindow:nil]; /* { dg-warning "multiple methods named .\\-setWindow:. found" } */
/* { dg-message "using .\\-\\(void\\)setWindow:\\(Object \\*\\)wdw." "" { target *-*-* } 10 } */
/* { dg-message "using .\\-\\(void\\)setWindow:\\(TestsuiteObject \\*\\)wdw." "" { target *-*-* } 10 } */
/* { dg-message "also found .\\-\\(void\\)setWindow:\\(Class1 \\*\\)window." "" { target *-*-* } 14 } */
return obj;
......
......@@ -5,10 +5,10 @@
/* { dg-options "-Wstrict-selector-match" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol MyObject
- (id)initWithData:(Object *)data;
- (id)initWithData:(TestsuiteObject *)data;
@end
@protocol SomeOther
......@@ -19,9 +19,9 @@
- (id)initWithData:(id<MyObject, MyCoding>)data;
@end
@interface NTGridDataObject: Object <MyCoding>
@interface NTGridDataObject: TestsuiteObject <MyCoding>
{
Object<MyCoding> *_data;
TestsuiteObject<MyCoding> *_data;
}
+ (NTGridDataObject*)dataObject:(id<MyObject, MyCoding>)data;
@end
......@@ -34,7 +34,7 @@
{
NTGridDataObject *result = [[NTGridDataObject alloc] initWithData:data];
/* { dg-warning "multiple methods named .\\-initWithData:. found" "" { target *-*-* } 35 } */
/* { dg-message "using .\\-\\(id\\)initWithData:\\(Object \\*\\)data." "" { target *-*-* } 11 } */
/* { dg-message "using .\\-\\(id\\)initWithData:\\(TestsuiteObject \\*\\)data." "" { target *-*-* } 11 } */
/* { dg-message "also found .\\-\\(id\\)initWithData:\\(id <MyObject, MyCoding>\\)data." "" { target *-*-* } 19 } */
/* { dg-message "also found .\\-\\(id\\)initWithData:\\(int\\)data." "" { target *-*-* } 15 } */
......
......@@ -3,10 +3,10 @@
/* { dg-options "-O0" } */
/* Radar 4015820 */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
void foo(void) {
Object *o;
TestsuiteObject *o;
[o++ free];
}
/* { dg-final { scan-assembler-not "L_objc_msgSend\\\$non_lazy_ptr" } } */
......@@ -6,11 +6,12 @@
/* { dg-options "-fobjc-gc" } */
/* { dg-prune-output "cc1obj: warning: '-fobjc-gc' is ignored for '-fgnu-runtime'" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
@class MyWindow;
@interface MyDocument : Object {
@interface MyDocument : TestsuiteObject {
MyWindow *_window;
}
@end
......@@ -29,7 +30,7 @@
@end
@interface MyTextFileDocument : MyFileDocument {
Object *_textStorage;
TestsuiteObject *_textStorage;
struct __tfdFlags {
unsigned int immutable:1;
unsigned int lineEnding:2;
......
......@@ -2,6 +2,7 @@
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
#include <objc/runtime.h>
#include <objc/Protocol.h>
#include <stdlib.h>
......@@ -17,7 +18,15 @@
int main (int argc, char **argv)
{
if ([@protocol(b) descriptionForInstanceMethod: @selector(aMethod)] == NULL)
struct objc_method_description m;
m = protocol_getMethodDescription (@protocol(b), @selector(aMethod), YES, YES);
if (m.name != NULL)
abort ();
m = protocol_getMethodDescription (@protocol(a), @selector(aMethod), YES, YES);
if (m.name == NULL)
abort ();
return 0;
......
......@@ -6,16 +6,13 @@
#include <objc/Protocol.h>
#ifdef __OBJC2__
/* The ObjC V2 "Object" does not provide -class. */
@interface Object (TS_CAT)
- - class;
- - test;
@end
@implementation Object (TS_CAT)
- - class { return isa; }
- - test { return self; }
@end
#endif
@protocol A
@end
......@@ -28,8 +25,8 @@
int main ()
{
[@protocol(A) class];
[@protocol(B) class];
[@protocol(A) test];
[@protocol(B) test];
return 0;
}
......
......@@ -8,7 +8,17 @@ typedef unsigned char BOOL;
{
Class isa;
}
- (BOOL)isEqual:anObject;
@end
@interface Object (Test)
- (BOOL)testIsEqual:anObject;
@end
@implementation Object (Test)
- (BOOL)testIsEqual:anObject
{
return self == anObject;
}
@end
#ifdef __NEXT_RUNTIME__
......@@ -30,7 +40,7 @@ extern void *_NSConstantStringClassReference;
void function (void)
{
if ([@"strings" isEqual: (id)0])
if ([@"strings" testIsEqual: (id)0])
{
;
}
......
/* This program tests use of property provided setter/getter functions. */
/* { dg-options "-std=c99" } */
/* { dg-do run } */
/* { dg-additional-sources "../../objc-obj-c++-shared/Object1.m" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
@interface Bar : Object
@interface Bar : TestsuiteObject
{
int iVar;
}
......
......@@ -2,13 +2,14 @@
provide a suitable method. */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
@protocol Zot
-(void) zot;
@end
@interface Foo : Object <Zot>
@interface Foo : TestsuiteObject <Zot>
@end
int foo()
......
......@@ -3,9 +3,12 @@
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-obj-c++-shared/runtime.h"
@interface MyClass
- - name;
@end
@protocol NoInstanceMethods
+ + testMethod;
......@@ -18,9 +21,9 @@
int
main()
{
[@protocol(NoInstanceMethods) descriptionForInstanceMethod: @selector(name)];
[@protocol(NoInstanceMethods) descriptionForClassMethod: @selector(name)];
[@protocol(NoClassMethods) descriptionForInstanceMethod: @selector(name)];
[@protocol(NoClassMethods) descriptionForClassMethod: @selector(name)];
protocol_getMethodDescription (@protocol(NoInstanceMethods), @selector(name), YES, YES);
protocol_getMethodDescription (@protocol(NoInstanceMethods), @selector(name), YES, NO);
protocol_getMethodDescription (@protocol(NoClassMethods), @selector(name), YES, YES);
protocol_getMethodDescription (@protocol(NoClassMethods), @selector(name), YES, NO);
return 0;
}
......@@ -4,11 +4,8 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/runtime.h"
#include <objc/Protocol.h>
#ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h>
#endif
#include "../objc-obj-c++-shared/next-mapping.h"
/* The encoded parameter sizes will be rounded up to match pointer alignment. */
#define ROUND(s,a) (a * ((s + a - 1) / a))
......@@ -34,9 +31,7 @@ extern void abort(void);
Protocol *proto;
struct objc_method_description *meth;
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
struct objc_method_description meth_object;
#endif
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
static void scan_initial(const char *pattern) {
......@@ -48,22 +43,18 @@ static void scan_initial(const char *pattern) {
int main(void) {
proto = @protocol(Retain);
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(address:with:), YES, YES);
meth = &meth_object;
#else
meth = [proto descriptionForInstanceMethod: @selector(address:with:)];
#endif
scan_initial("O@%u@%u:%uNR@%uo^^S%u");
CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(unsigned));
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(retainArgument:with:), YES, NO);
meth = &meth_object;
#else
meth = [proto descriptionForClassMethod: @selector(retainArgument:with:)];
#endif
scan_initial("Vv%u@%u:%uOo@%un^*%u");
CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(char **));
return 0;
......
......@@ -2,7 +2,7 @@
/* { dg-options "-Wselector" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
@interface Foo
@end
......
......@@ -2,10 +2,9 @@
/* { dg-do compile } */
/* { dg-options "-Wunused-but-set-variable" } */
#import "../objc-obj-c++-shared/Object1.h"
#include <objc/objc-api.h>
#import "../objc-obj-c++-shared/TestsuiteObject.m"
@interface obj : Object
@interface obj : TestsuiteObject
{
int value;
}
......@@ -13,7 +12,7 @@
- (void) setValue: (int)number;
@end
@implementation obj : Object
@implementation obj : TestsuiteObject
- (int) value { return value; }
- (void) setValue: (int)number { value = number; }
......
......@@ -3,13 +3,13 @@
/* { dg-options "" } */
/* { dg-do run } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort();
@interface Foo: Object {
@interface Foo: TestsuiteObject {
int a, b;
float c, d;
}
......@@ -18,17 +18,16 @@ extern void abort(void);
@implementation Foo
@end
typedef Object MyObject;
typedef TestsuiteObject MyObject;
typedef struct Foo Foo_type;
@compatibility_alias AliasObject Object;
@compatibility_alias AliasObject TestsuiteObject;
int main(void) {
CHECK_IF(sizeof(Foo) > sizeof(Object) && sizeof(Object) > 0);
CHECK_IF(sizeof(Foo) > sizeof(TestsuiteObject) && sizeof(TestsuiteObject) > 0);
CHECK_IF(sizeof(Foo) == sizeof(Foo_type));
CHECK_IF(sizeof(Object) == sizeof(MyObject));
CHECK_IF(sizeof(Object) == sizeof(AliasObject));
CHECK_IF(sizeof(TestsuiteObject) == sizeof(MyObject));
CHECK_IF(sizeof(TestsuiteObject) == sizeof(AliasObject));
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -5,11 +5,7 @@
@interface TestClass
{
#ifdef __OBJC2__
Class isa;
#else
id isa;
#endif
}
- (int)D;
@end
......
......@@ -3,10 +3,7 @@
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include <objc/objc.h>
#ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h>
#endif
#include "../../objc-obj-c++-shared/next-mapping.h"
#include "../../objc-obj-c++-shared/runtime.h"
extern void abort (void);
......@@ -27,9 +24,7 @@ extern void abort (void);
{
return 4;
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
......@@ -38,13 +33,13 @@ int main (void)
TestClass *test;
Class testClass;
testClass = objc_get_class ("TestClass");
testClass = objc_getClass ("TestClass");
if (testClass == Nil)
{
abort ();
}
test = (TestClass *)(class_create_instance (testClass));
test = (TestClass *)(class_createInstance (testClass, 0));
if (test == nil)
{
abort ();
......
......@@ -3,7 +3,7 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
......@@ -16,12 +16,12 @@ struct bstruct {
float a, b, c, d, e, f;
} globb = { 1, 2, 3, 4, 5, 6 };
@interface foo : Object
@interface foo : TestsuiteObject
- (struct astruct) stret;
- (struct bstruct) stretb;
@end
@implementation foo : Object
@implementation foo : TestsuiteObject
- (struct astruct) stret { return globa; }
- (struct bstruct) stretb { return globb; }
@end
......@@ -62,4 +62,3 @@ int main(void)
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -6,7 +6,7 @@
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-require-effective-target ilp32 } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
struct astruct {
float a, b;
......@@ -17,12 +17,12 @@ struct bstruct {
float a, b, c, d, e, f;
} globb = { 1, 2, 3, 4, 5, 6 };
@interface foo : Object
@interface foo : TestsuiteObject
- (struct astruct) stret;
- (struct bstruct) stretb;
@end
@implementation foo : Object
@implementation foo : TestsuiteObject
- (struct astruct) stret { return glob; }
- (struct bstruct) stretb { return globb; }
@end
......@@ -46,4 +46,3 @@ struct astruct afunc(foo *foo_obj) {
/* { dg-final { scan-assembler-not "objc_msgSend\[^_S\]" } } */
/* { dg-final { scan-assembler-not "objc_msgSendSuper\[^_\]" } } */
/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */
/* { dg-do compile } */
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/next-mapping.h"
#include "../../objc-obj-c++-shared/runtime.h"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#endif
......@@ -30,4 +29,4 @@ id test_invalid7 = @"te" @"s" @@"t"; /* { dg-error "repeated .@. bef
id test_invalid8 = @"te" @@"s" @"t"; /* { dg-error "repeated .@. before Objective-C string" } */
id test_invalid9 = @"te" @"s" @"t" @; /* { dg-error "stray .@. in program" } */
id test_invalidA = @"te" @ st; /* { dg-error "stray .@. in program" } */
/* { dg-error "expected" "" { target *-*-* } 32 } */
/* { dg-error "expected" "" { target *-*-* } 31 } */
......@@ -4,12 +4,12 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
@interface _Child: Object
@interface _Child: TestsuiteObject
+ (int) flashCache;
@end
......@@ -21,10 +21,10 @@
+ (int) flushCache2;
@end
int _Object = 23; /* Should not conflict with @interface Object. */
int _TestsuiteObject = 23; /* Should not conflict with @interface TestsuiteObject. */
@implementation _Child
+ (int) flashCache { return 12 + _Object; }
+ (int) flashCache { return 12 + _TestsuiteObject; }
@end
@implementation Child
......@@ -43,4 +43,3 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -3,11 +3,11 @@
should be traversed to find the @interface. */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class MyWpModule;
@compatibility_alias MyObject Object;
@compatibility_alias MyObject TestsuiteObject;
@compatibility_alias FictitiousModule MyWpModule;
@protocol MySelTarget
......
......@@ -2,7 +2,7 @@
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
void foo(id sem)
{
......
/* Make sure that @synchronized parses and a very basic test runs. */
/* { dg-options "-fobjc-exceptions -fgnu-runtime" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
int main (void)
{
Object *a = [Object new];
Object *b = [Object new];
Object *c = [Object new];
TestsuiteObject *a = [TestsuiteObject new];
TestsuiteObject *b = [TestsuiteObject new];
TestsuiteObject *c = [TestsuiteObject new];
/* This single-threaded test just checks that @synchronized() uses a
recursive mutex, and that the runtime at least doesn't crash
......
......@@ -4,9 +4,9 @@
/* { dg-require-effective-target ilp32 } */
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Protocol1.h"
#include <stdio.h>
#include <string.h>
#include "../objc-obj-c++-shared/runtime.h"
extern void abort();
......@@ -44,25 +44,32 @@ extern void abort();
Protocol *proto = @protocol(CommonProtocol);
struct objc_method_description *meth;
struct objc_method_description meth_object;
int main()
{
meth = [proto descriptionForInstanceMethod: @selector(methodCall_On:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_On:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4On@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_nO:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_nO:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4nO@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_Oo:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_Oo:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4Oo@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_oO:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oO:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4oO@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_rn:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_rn:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4rn@8"))
abort();
meth = [proto descriptionForInstanceMethod: @selector(methodCall_oOn:)];
meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oOn:), YES, YES);
meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4oOn@8"))
abort();
return 0;
......
/* { dg-do run } */
/* See if -forward::/-performv:: is able to work. */
/* See if -forward:: is able to work. */
/* { dg-xfail-run-if "PR36610" { ! { { i?86-*-* x86_64-*-* } && ilp32 } } { "-fgnu-runtime" } { "" } } */
/* { dg-skip-if "Needs OBJC2 Implementation" { *-*-darwin* && { lp64 } } { "-fnext-runtime" } { "" } } */
/* There is no implementation of forward: in the NeXT m64 libobjc/Object
neither have we implemented this in our extensions - so we have to skip it
for now. */
#include <stdio.h>
#include <stdlib.h>
#ifndef __NEXT_RUNTIME__
# include <objc/objc-api.h>
#endif
#include <objc/Object.h>
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
#define VALUETOUSE 1234567890
id forwarder, receiver;
@interface Forwarder: Object
@interface Forwarder: TestsuiteObject
{
id receiver;
}
......@@ -27,7 +21,7 @@ id forwarder, receiver;
@end
@interface Receiver:Object
@interface Receiver:TestsuiteObject
{
int foo;
}
......@@ -44,6 +38,7 @@ id forwarder, receiver;
--display
{
printf ("Executing display\n");
/* Check to see if we are really the reciever. */
if (self != receiver)
abort ();
......@@ -62,18 +57,24 @@ id forwarder, receiver;
receiver = theReceiver;
return self;
}
#ifdef __NEXT_RUNTIME__
- forward: (SEL)theSel: (marg_list)theArgFrame
#else
-(retval_t) forward: (SEL)theSel: (arglist_t)theArgFrame
#endif
-(void *) forward: (SEL)theSel: (void *)theArgFrame
{
/* If we have a reciever try to perform on that object */
if (receiver)
return [receiver performv: theSel: theArgFrame];
{
/* Simple forward that works for methods with no
arguments. */
typedef id (*method_with_no_args) (id receiver, SEL _cmd);
Method method = class_getInstanceMethod (object_getClass (receiver),
theSel);
method_with_no_args imp = (method_with_no_args)(method_getImplementation
(method));
return (*imp)(receiver, theSel);
}
/* Normally you'd emit an error here. */
printf ("Unrecognized selector\n");
return NULL;
}
@end
int main()
......
......@@ -6,7 +6,8 @@
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include <objc/Object.h>
#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface NSString: Object
@end
......
......@@ -7,7 +7,8 @@
/* { dg-options "-fconstant-string-class=XStr" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=XStr" { target *-*-darwin* } } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include <objc/Object.h>
#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface XString: Object {
@protected
......
......@@ -3,27 +3,28 @@
/* { dg-do run } */
/* { dg-options "-fconstant-string-class=Foo " } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.m" } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@interface Foo: Object {
@interface Foo: TestsuiteObject {
char *cString;
unsigned int len;
}
- (char *)customString;
@end
#ifdef __NEXT_RUNTIME__
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Class _FooClassReference;
#else
struct objc_class _FooClassReference;
#endif
#endif
@implementation Foo : Object
@implementation Foo : TestsuiteObject
- (char *)customString {
return cString;
}
......
......@@ -3,24 +3,25 @@
/* { dg-do run } */
/* { dg-options "-fconstant-string-class=Foo" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.m" } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
@interface Foo: Object {
@interface Foo: TestsuiteObject {
char *cString;
unsigned int len;
}
@end
#ifdef __NEXT_RUNTIME__
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Class _FooClassReference;
#else
struct objc_class _FooClassReference;
#endif
#endif
@implementation Foo : Object
@implementation Foo : TestsuiteObject
- (char *)customString {
return cString;
}
......
......@@ -5,7 +5,8 @@
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include <objc/Object.h>
#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface NSConstantString: Object {
char *cString;
......
......@@ -2,12 +2,11 @@
/* { dg-require-effective-target tls_runtime } */
/* { dg-add-options tls } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.m" } */
#include "../../../objc-obj-c++-shared/Object1.h"
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
extern void _exit(int);
@interface tsObj: Object {
@interface tsObj: TestsuiteObject {
int ai ;
}
......
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../../objc-obj-c++-shared/Object1.m" } */
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
int main(void)
{
[Object class];
[TestsuiteObject class];
return 0;
}
......@@ -3,14 +3,14 @@
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <stdio.h>
#include <setjmp.h>
@interface Frob: Object
@interface Frob: TestsuiteObject
@end
@implementation Frob: Object
@implementation Frob: TestsuiteObject
@end
static int exc_control = 0;
......
......@@ -4,7 +4,7 @@
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol Proto1
- (int)meth1;
......@@ -14,11 +14,11 @@
- (int)meth2;
@end
@interface MyClass: Object <Proto2> {
@interface MyClass: TestsuiteObject <Proto2> {
int a;
}
- (int)meth2;
- (Object *)parm1: (id)p1 parm2: (id<Proto1>)p2;
- (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2;
@end
MyClass *mc1, *mc2;
......@@ -27,7 +27,7 @@ MyClass *mc1, *mc2;
- (int)meth2 {
return a;
}
- (Object *)parm1: (id)p1 parm2: (id<Proto1>)p2 {
- (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2 {
@try {
mc2 = p2; /* { dg-warning "type .id <Proto1>. does not conform to the .Proto2. protocol" } */
}
......
......@@ -5,14 +5,14 @@
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
const char *foo(void)
{
@try {
return "foo";
}
@catch (Object* theException) {
@catch (TestsuiteObject* theException) {
return [theException name];
}
}
......
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
int main (int argc, const char * argv[]) {
Object * pool = [Object new];
TestsuiteObject * pool = [TestsuiteObject new];
int a;
if ( 1 ) {
......@@ -12,7 +12,7 @@ int main (int argc, const char * argv[]) {
@try {
a = 1;
}
@catch (Object *e) {
@catch (TestsuiteObject *e) {
a = 2;
}
@finally {
......
......@@ -3,9 +3,9 @@
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Derived: Object
@interface Derived: TestsuiteObject
- (id) meth;
@end
......
......@@ -4,20 +4,10 @@
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include "../objc-obj-c++-shared/runtime.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef __NEXT_RUNTIME__
#include <objc/objc-runtime.h>
#define METHOD Method
#else
#include <objc/objc-api.h>
#define METHOD Method_t
#define method_get_types(M) (M)->method_types
#endif
extern int sscanf(const char *str, const char *format, ...);
extern void abort(void);
......@@ -36,21 +26,21 @@ enum Enum { one, two, three, four };
@end
Class cls;
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(method_get_types(meth), pattern, &totsize, &offs0, &offs1, &offs2, &offs3,
sscanf(method_getTypeEncoding(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_get_class("ArrayTest");
cls = objc_getClass("ArrayTest");
meth = class_get_instance_method(cls, @selector(str:with:and:));
meth = class_getInstanceMethod(cls, @selector(str:with:and:));
/* Here we have the complication that 'enum Enum' could be encoded
as 'i' on __NEXT_RUNTIME_, and (most likely) as 'I' on the GNU
......@@ -67,7 +57,7 @@ int main(void) {
CHECK_IF(offs3 == offs2 + sizeof(signed char *) && offs4 == offs3 + sizeof(unsigned char *));
CHECK_IF(totsize == offs4 + sizeof(enum Enum *));
meth = class_get_instance_method(cls, @selector(meth1:with:with:));
meth = class_getInstanceMethod(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 *));
......
/* Typedefs of ObjC types should work without any bogus warnings. */
/* { dg-do compile } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
typedef Object MyObject;
typedef TestsuiteObject MyObject;
int main (int argc, const char * argv[])
{
Object* a = nil;
TestsuiteObject* a = nil;
MyObject* b = a;
Object* c = b;
TestsuiteObject* c = b;
return 0;
}
......
......@@ -2,14 +2,14 @@
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdarg.h>
#include <stdlib.h>
/* Test methods with "C-style" trailing arguments, with or without ellipsis. */
@interface MathClass: Object
@interface MathClass: TestsuiteObject
/* sum positive numbers; -1 ends the list */
+ (int) sum: (int)firstNumber, int secondNumber, ...;
+ (int) prod: (int) firstNumber, int secondNumber, int thirdNumber;
......@@ -70,4 +70,3 @@ int main (void)
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
......@@ -5,7 +5,7 @@
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-fzero-link" } */
#include "../objc-obj-c++-shared/Object1.h"
#include <objc/Object.h>
#include <objc/objc.h>
extern void abort(void);
......
......@@ -5,8 +5,7 @@
/* { dg-options "-fzero-link" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
//#import <objc/objc.h>
#include <objc/Object.h>
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort();
......@@ -25,4 +24,3 @@ int main(void) {
return 0;
}
#include "../objc-obj-c++-shared/Object1-implementation.h"
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.h"
int main(void)
{
[Object class];
[TestsuiteObject class];
}
/* 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 "../../objc-obj-c++-shared/runtime.h"
/* Test getting and calling the IMP of a method */
......@@ -11,11 +9,11 @@
{
Class isa;
}
- (int) next: (int)a;
+ (int) next: (int)a;
@end
@implementation TestClass
- (int) next: (int)a
+ (int) next: (int)a
{
return a + 1;
}
......@@ -27,10 +25,10 @@ int main (void)
SEL selector;
int (* imp) (id, SEL, int);
class = objc_get_class ("TestClass");
class = objc_getClass ("TestClass");
selector = @selector (next:);
imp = (int (*)(id, SEL, int))method_get_imp
(class_get_class_method (class, selector));
imp = (int (*)(id, SEL, int))method_getImplementation
(class_getClassMethod (class, selector));
if (imp (class, selector, 5) != 6)
{
......
/* 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-api.h>
#include "../../objc-obj-c++-shared/runtime.h"
/* Test the hidden argument _cmd to method calls */
......@@ -16,11 +15,9 @@
@implementation TestClass
+ (const char*) method
{
return sel_get_name (_cmd);
return sel_getName (_cmd);
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
......
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#include <stdlib.h>
#ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h>
#endif
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test that by using -> we can access ivars of other objects of the same
class */
@interface TestClass : Object
@interface TestClass : TestsuiteObject
{
int value;
}
- (int) value;
- (int) setValue: (int)number;
- (void) setValue: (int)number;
- (void) takeValueFrom: (TestClass *)object;
@end
@implementation TestClass : Object
@implementation TestClass : TestsuiteObject
{
int value;
}
......@@ -25,9 +22,9 @@
{
return value;
}
- (int) setValue: (int)number
- (void) setValue: (int)number
{
value = number;
value = number;
}
- (void) takeValueFrom: (TestClass *)object
{
......@@ -55,4 +52,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
#include <stdio.h>
#include <stdlib.h>
#ifndef __NEXT_RUNTIME__
#include <objc/encoding.h>
#else
#include "../../objc-obj-c++-shared/runtime.h"
/* The following header, together with the implementation included below,
emulate functionality provided by the GNU runtime but not available from
the NeXT runtime. */
#include "../../objc-obj-c++-shared/objc-test-suite-next-encode-assist.h"
#define objc_get_class(C) objc_getClass(C)
#endif
#ifndef __OBJC2__
#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
void print_ivars (Class class)
{
struct objc_ivar_list* ivars = class->ivars;
......@@ -62,17 +59,67 @@ void compare_structures (Class class, const char* type)
printf ("%d ivars checked\n", i);
}
#else
void print_ivars (Class class)
{
unsigned int count, i;
Ivar *list = class_copyIvarList (class, &count);
for (i = 0; i < count; i++) {
printf ("ivar '%s', type '%s', offset %ud\n",
ivar_getName (list[i]),
ivar_getTypeEncoding (list[i]),
(unsigned int)ivar_getOffset (list[i]));
}
}
void compare_structures (Class class, const char* type)
{
struct objc_struct_layout layout;
unsigned int count;
Ivar *list = class_copyIvarList (class, &count);
int i = 0;
int position;
objc_layout_structure (type, &layout);
while (objc_layout_structure_next_member (&layout))
{
const char *ivar_type;
if (i > count)
{
printf ("too many ivars in type %s, layout = %s\n",
type, layout.type);
exit (1);
}
objc_layout_structure_get_info (&layout, &position, NULL, &ivar_type);
printf ("real ivar '%s' offset %ud\n",
ivar_getName (list[i]), (unsigned int)ivar_getOffset (list[i]));
printf ("computed type '%s' offset %d\n", ivar_type, position);
if ((unsigned int)position != (unsigned int)ivar_getOffset (list[i]))
{
printf ("offset %ud and computed position %d don't match on ivar '%s'"
" (i = %d)\n",
(unsigned int)ivar_getOffset (list[i]), position, ivar_getName (list[i]), i);
exit (1);
}
i++;
}
printf ("%d ivars checked\n", i);
}
#endif
int main ()
{
#ifndef __OBJC2__
struct class_vars
{
@defs (MyObject);
};
int size1, size2;
Class class = objc_get_class ("MyObject");
Class class = objc_getClass ("MyObject");
printf ("type = %s\n", @encode (struct class_vars));
print_ivars (class);
......@@ -83,10 +130,7 @@ int main ()
printf ("sizes don't match (computed %d, exact %d)\n", size1, size2);
abort ();
}
#endif
exit (0);
return 0;
}
#ifndef __OBJC2__
#include "../../objc-obj-c++-shared/objc-test-suite-next-encode-assist-impl.h"
#endif
......@@ -2,8 +2,7 @@
* Contributed by Nicola Pero <nicola@brainstorm.co.uk>
* Fri Feb 2 11:48:01 GMT 2001
*/
#include "../../objc-obj-c++-shared/Protocol1.h"
#include <objc/objc.h>
@protocol MyProtocol
- (bycopy id) bycopyMethod;
......@@ -13,7 +12,7 @@ int main (void)
{
[nil bycopyMethod];
exit (0);
return 0;
}
......@@ -2,14 +2,14 @@
* Contributed by Nicola Pero <nicola@brainstorm.co.uk>
* Fri Feb 2 11:48:01 GMT 2001
*/
#include "../../objc-obj-c++-shared/Protocol1.h"
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
@protocol MyProtocol
+ (bycopy id<MyProtocol>) bycopyMethod;
@end
@interface MyObject : Object <MyProtocol>
@interface MyObject : TestsuiteObject <MyProtocol>
@end
@implementation MyObject
......@@ -25,6 +25,6 @@ int main (void)
object = [MyObject bycopyMethod];
exit (0);
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
......@@ -9,27 +9,18 @@
* interfere with what we are testing, which is that the `bycopy'
* keyword generates the _F_BYCOPY qualifier for the return type. */
extern void exit (int) __attribute__ ((noreturn));
extern int printf (const char *, ...);
#include <objc/Protocol.h>
#ifndef __NEXT_RUNTIME__
#include <objc/encoding.h>
#endif
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/runtime.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
@protocol MyProtocol
+ (bycopy id<MyProtocol>) bycopyMethod;
@end
/* This no-op class to keep it compile under broken gcc 3.x */
@interface MyObject : Object <MyProtocol>
#ifdef __OBJC2__
+ (id) initialize;
+ (id) alloc;
+ + new;
- - init;
#endif
@interface MyObject : TestsuiteObject <MyProtocol>
@end
@implementation MyObject
......@@ -37,12 +28,6 @@ extern int printf (const char *, ...);
{
return [MyObject alloc];
}
#ifdef __OBJC2__
+ initialize {return self;}
+ alloc { return class_createInstance (self, 0);}
+ new { return [[self alloc] init]; }
- init {return self;}
#endif
@end
/* The following header, together with the implementation included below,
......@@ -52,7 +37,7 @@ extern int printf (const char *, ...);
int main (void)
{
struct objc_method_description *method;
struct objc_method_description method;
const char *method_types;
unsigned qualifiers;
Protocol *protocol;
......@@ -64,16 +49,18 @@ int main (void)
protocol = @protocol (MyProtocol);
/* Ask to the protocol for the description of the method bycopyMethod */
method = [protocol descriptionForClassMethod: @selector (bycopyMethod)];
if (method == NULL)
{
printf ("Could not find method bycopyMethod in protocol!\n");
exit (1);
}
method = protocol_getMethodDescription (protocol, @selector (bycopyMethod),
YES, NO);
/* Get the method types for the method - which encode return type,
arguments etc. */
method_types = method->types;
method_types = method.types;
if (method_types == NULL)
{
printf ("Could not find method bycopyMethod in protocol!\n");
return 1;
}
/* Get the qualifiers for the return type */
qualifiers = objc_get_type_qualifiers (method_types);
......@@ -82,7 +69,7 @@ int main (void)
if (! (qualifiers & _F_BYCOPY))
{
printf ("Failed - selector does not contain _F_BYCOPY qualifier!\n");
exit (1);
return 1;
}
/* Else, happy end */
......
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
@interface Foo : Object
@interface Foo : TestsuiteObject
+ + foo;
+ + bar;
@end
......
/* 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>
/* Tests creating a RootClass */
......
/* 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>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
......@@ -15,9 +13,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
@interface SubClass : RootClass
......@@ -72,10 +68,10 @@ int main (void)
test_that_class_has_instance_method ("SubSubClass", @selector (state));
test_that_class_has_instance_method ("SubSubClass", @selector (shift));
object = class_create_instance (objc_lookup_class ("SubClass"));
object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
......
/* 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>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
......@@ -16,9 +14,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
@interface SubClass : RootClass
......@@ -76,10 +72,10 @@ int main (void)
test_that_class_has_instance_method ("SubSubClass", @selector (state));
test_that_class_has_instance_method ("SubSubClass", @selector (shift));
object = class_create_instance (objc_lookup_class ("SubClass"));
object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
......
/* 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>
/* Tests creating a root class and a subclass with a class methods */
......@@ -13,9 +11,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
static int class_variable = 0;
......@@ -48,7 +44,7 @@ int main (void)
test_that_class_has_class_method ("SubClass", @selector (setState:));
test_that_class_has_class_method ("SubClass", @selector (state));
class = objc_lookup_class ("SubClass");
class = objc_getClass ("SubClass");
test_accessor_method (class, 0, -1, -1, 1, 1);
return 0;
......
/* 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>
/* Tests creating a root class and a subclass with a class accessor
methods and a subclass overriding the superclass' implementation
......@@ -15,9 +13,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
static int class_variable = 0;
......@@ -65,10 +61,10 @@ int main (void)
test_that_class_has_class_method ("SubSubClass", @selector (setState:));
test_that_class_has_class_method ("SubSubClass", @selector (state));
class = objc_lookup_class ("SubClass");
class = objc_getClass ("SubClass");
test_accessor_method (class, 0, -1, -1, 1, 1);
sub_class = objc_lookup_class ("SubSubClass");
sub_class = objc_getClass ("SubSubClass");
class_variable = 0;
test_accessor_method (sub_class, 1, -1, 0, 1, 2);
......
/* 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>
/* Tests creating a root class and a subclass with a class accessor
methods and a subclass overriding the superclass' implementation,
......@@ -15,9 +13,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
static int class_variable = 0;
......@@ -70,10 +66,10 @@ int main (void)
test_that_class_has_class_method ("SubSubClass", @selector (state));
test_that_class_has_class_method ("SubSubClass", @selector (shift));
class = objc_lookup_class ("SubClass");
class = objc_getClass ("SubClass");
test_accessor_method (class, 0, -1, -1, 1, 1);
sub_class = objc_lookup_class ("SubSubClass");
sub_class = objc_getClass ("SubSubClass");
class_variable = 0;
test_accessor_method (sub_class, 1, -1, 0, 1, 2);
......
/* 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>
/* Tests creating a root class and a subclass */
......
/* 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>
/* Tests creating a root class and a minimal subclass tree */
......
/* 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>
/* Tests creating a root class and a subclass with an ivar and
accessor methods */
......@@ -14,9 +12,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
@interface SubClass : RootClass
......@@ -50,7 +46,7 @@ int main (void)
test_that_class_has_instance_method ("SubClass", @selector (setState:));
test_that_class_has_instance_method ("SubClass", @selector (state));
object = class_create_instance (objc_lookup_class ("SubClass"));
object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, 1, 1, -3, -3);
return 0;
......
/* 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>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
......@@ -15,9 +13,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
@interface SubClass : RootClass
......@@ -66,10 +62,10 @@ int main (void)
test_that_class_has_instance_method ("SubSubClass", @selector (setState:));
test_that_class_has_instance_method ("SubSubClass", @selector (state));
object = class_create_instance (objc_lookup_class ("SubClass"));
object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
......
/* 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>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
......@@ -15,9 +13,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
@interface SubClass : RootClass
......@@ -66,10 +62,10 @@ int main (void)
test_that_class_has_instance_method ("SubSubClass", @selector (setState:));
test_that_class_has_instance_method ("SubSubClass", @selector (state));
object = class_create_instance (objc_lookup_class ("SubClass"));
object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
......
/* 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>
/* Tests creating a root class and a subclass with an ivar and
accessor methods; accessor methods implemented in a separate
......@@ -15,9 +13,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
@interface SubClass : RootClass
......@@ -64,7 +60,7 @@ int main (void)
test_that_class_has_instance_method ("SubClass", @selector (setState:));
test_that_class_has_instance_method ("SubClass", @selector (state));
object = class_create_instance (objc_lookup_class ("SubClass"));
object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, 1, 1, -3, -3);
return 0;
......
/* 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>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
......@@ -15,9 +13,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
@interface SubClass : RootClass
......@@ -69,10 +65,10 @@ int main (void)
test_that_class_has_instance_method ("SubSubClass", @selector (setState:));
test_that_class_has_instance_method ("SubSubClass", @selector (state));
object = class_create_instance (objc_lookup_class ("SubClass"));
object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
......
/* 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>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
......@@ -15,9 +13,7 @@
@end
@implementation RootClass
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
@interface SubClass : RootClass
......@@ -69,10 +65,10 @@ int main (void)
test_that_class_has_instance_method ("SubSubClass", @selector (setState:));
test_that_class_has_instance_method ("SubSubClass", @selector (state));
object = class_create_instance (objc_lookup_class ("SubClass"));
object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
......
......@@ -2,9 +2,7 @@
#include <stdio.h>
#include <stdlib.h>
#include "../../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
#include <objc/objc-api.h>
#include "../../objc-obj-c++-shared/runtime.h"
/*
* Standard Tests For Classes and Objects - abort upon failing; return
......@@ -14,13 +12,7 @@
/* Test that `class' is a Class */
static void test_is_class (Class class)
{
if (object_is_class (class) == NO)
{
printf ("test_is_class failed\n");
abort ();
}
if (class_is_class (class) == NO)
if (class_isMetaClass (object_getClass (class)) == NO)
{
printf ("test_is_class failed\n");
abort ();
......@@ -30,7 +22,7 @@ static void test_is_class (Class class)
/* Test that the superclass of `class' is `superclass' */
static void test_superclass (Class class, Class superclass)
{
if (class_get_super_class (class) != superclass)
if (class_getSuperclass (class) != superclass)
{
printf ("test_superclass failed\n");
abort ();
......@@ -40,7 +32,7 @@ static void test_superclass (Class class, Class superclass)
/* Test that the classname of `class' is `classname' */
static void test_class_name (Class class, const char *classname)
{
if (strcmp (class_get_class_name (class), classname))
if (strcmp (class_getName (class), classname))
{
printf ("test_class_name failed\n");
abort ();
......@@ -51,7 +43,7 @@ static void test_class_name (Class class, const char *classname)
static void test_allocate (Class class)
{
/* The object we create is leaked but who cares, this is only a test */
id object = class_create_instance (class);
id object = class_createInstance (class, 0);
if (object == nil)
{
......@@ -63,9 +55,9 @@ static void test_allocate (Class class)
/* Test that instances of `class' are instances and not classes */
static void test_instances (Class class)
{
id object = class_create_instance (class);
id object = class_createInstance (class, 0);
if (object_is_class (object) == YES)
if (class_isMetaClass (object_getClass (object)) == YES)
{
printf ("test_instances failed\n");
abort ();
......@@ -75,7 +67,7 @@ static void test_instances (Class class)
/* Test that we can deallocate instances of `class' */
static void test_deallocate (Class class)
{
id object = class_create_instance (class);
id object = class_createInstance (class, 0);
object_dispose (object);
}
......@@ -83,27 +75,15 @@ static void test_deallocate (Class class)
/* Test that the object and the class agree on what the class is */
static void test_object_class (Class class)
{
id object = class_create_instance (class);
id object = class_createInstance (class, 0);
if (object_get_class (object) != class)
if (object_getClass (object) != class)
{
printf ("test_object_class failed\n");
abort ();
}
}
/* Test that the object and the class agree on what the superclass is */
static void test_object_super_class (Class class)
{
id object = class_create_instance (class);
if (object_get_super_class (object) != class_get_super_class (class))
{
printf ("test_object_super_class failed\n");
abort ();
}
}
/*
* Runs all the tests in this file for the specified class
*/
......@@ -113,16 +93,12 @@ void test_class_with_superclass (const char *class_name,
Class class;
Class superclass;
/* We need at least a method call before playing with the internals,
so that the runtime will call __objc_resolve_class_links () */
[Object class];
/* class_name must be an existing class */
class = objc_lookup_class (class_name);
class = objc_getClass (class_name);
test_is_class (class);
/* But superclass_name can be "", which means `Nil' */
superclass = objc_lookup_class (superclass_name);
superclass = objc_getClass (superclass_name);
if (superclass != Nil)
{
test_is_class (superclass);
......@@ -135,5 +111,4 @@ void test_class_with_superclass (const char *class_name,
test_instances (class);
test_deallocate (class);
test_object_class (class);
test_object_super_class (class);
}
/* Contributed by Nicola Pero on Tue Mar 6 23:05:53 CET 2001 */
#include <objc/objc.h>
#include <objc/objc-api.h>
#include <stdio.h>
#include <stdlib.h>
#include "../../objc-obj-c++-shared/runtime.h"
/*
* Standard Tests For Methods of Classes and Objects - abort upon
......@@ -13,9 +12,9 @@
void test_that_class_has_instance_method (const char *class_name,
SEL selector)
{
Class class = objc_lookup_class (class_name);
Class class = objc_getClass (class_name);
if (class_get_instance_method (class, selector) == NULL)
if (class_getInstanceMethod (class, selector) == NULL)
{
printf ("test_class_has_instance_method failed\n");
abort ();
......@@ -26,9 +25,9 @@ void test_that_class_has_instance_method (const char *class_name,
void test_that_class_has_class_method (const char *class_name,
SEL selector)
{
Class meta_class = objc_get_meta_class (class_name);
Class class = objc_getClass (class_name);
if (class_get_class_method (meta_class, selector) == NULL)
if (class_getClassMethod (class, selector) == NULL)
{
printf ("test_class_has_class_method failed\n");
abort ();
......
......@@ -51,9 +51,7 @@ struct d
{
return 4;
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
......
......@@ -33,9 +33,7 @@ struct d
return u;
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
/* The second class */
......@@ -58,9 +56,7 @@ struct d
}
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
......
/* Contributed by Nicola Pero - Thu Mar 8 17:23:59 CET 2001 */
#import "../../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
@compatibility_alias MyObject Object;
@compatibility_alias MyObject TestsuiteObject;
int main (void)
{
......@@ -10,4 +9,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
#include <objc/objc-api.h>
/* Test very simple @encode */
......@@ -18,7 +17,7 @@ int main (void)
abort ();
}
if (strcmp ("@", @encode (Object *)))
if (strcmp ("@", @encode (TestsuiteObject *)))
{
abort ();
}
......
/* Contributed by Nicola Pero - Wed Dec 5 17:12:40 GMT 2001 */
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test using a bitfield enumeration ivar. */
......@@ -11,7 +10,7 @@ typedef enum
white
} color;
@interface TestClass: Object
@interface TestClass: TestsuiteObject
{
color c:2;
}
......@@ -48,4 +47,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Wed Dec 5 17:12:40 GMT 2001 */
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
typedef enum { black, white } color;
......@@ -11,7 +10,7 @@ typedef struct
color b:2;
} color_couple;
@interface TestClass: Object
@interface TestClass: TestsuiteObject
{
color_couple *c;
}
......@@ -50,4 +49,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
......@@ -4,7 +4,7 @@
#include <stdio.h>
#include <stdlib.h>
#import "../../../objc-obj-c++-shared/Object1.h"
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
/* The following is not required in actual user code; we include it
here to check that the compiler generates an internal definition of
......@@ -13,10 +13,10 @@
#define CHECK_IF(expr) if(!(expr)) abort()
@interface Frob: Object
@interface Frob: TestsuiteObject
@end
@implementation Frob: Object
@implementation Frob: TestsuiteObject
@end
static Frob* _connection = nil;
......@@ -24,7 +24,7 @@ static Frob* _connection = nil;
//--------------------------------------------------------------------
void test (Object* sendPort)
void test (TestsuiteObject* sendPort)
{
int cleanupPorts = 1;
Frob* receivePort = nil;
......@@ -51,7 +51,7 @@ void test (Object* sendPort)
printf ("cleanupPorts = %d\n", cleanupPorts);
printf ("---\n");
@throw [Object new];
@throw [TestsuiteObject new];
}
@catch(Frob *obj) {
printf ("Exception caught by incorrect handler!\n");
......@@ -71,7 +71,7 @@ void test (Object* sendPort)
int main (void) {
test((Object *)-1);
test((TestsuiteObject *)-1);
return 0;
}
#import "../../../objc-obj-c++-shared/Object1-implementation.h"
#include <stdio.h>
#include <stdlib.h>
//#import "../../../objc-obj-c++-shared/Object1.h"
#ifdef __OBJC2__
#include <objc/runtime.h>
@interface Object
+ + initialize;
+ + new;
- - free;
@end
@implementation Object
+ + initialize { return self; }
+ new { return class_createInstance (self, 0); }
- free { return object_dispose(self);}
@end
#else
#import "../../../objc-obj-c++-shared/Object1.h"
#endif
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
static int made_try = 0;
......@@ -42,7 +26,7 @@ thrower()
@try
{
thrower_try_body();
@throw [Object new];
@throw [TestsuiteObject new];
}
@finally
{
......@@ -73,4 +57,4 @@ main(int ac, char *av[])
abort ();
return 0;
}
//#import "../../../objc-obj-c++-shared/Object1-implementation.h"
/* Check that throwing an exception from a -forward:: works. */
/* Developed by Marcin Koziej <creep@desk.pl>. */
#include <stdio.h>
#include <stdlib.h>
#include <objc/Object.h>
#ifndef __NEXT_RUNTIME__
#import <objc/objc-api.h>
#endif
#ifdef __OBJC2__
@interface Object (TEST_SUITE_ADDITIONS)
+ + initialize;
+ + alloc;
+ + new;
- - init;
- - free;
@end
@implementation Object (TEST_SUITE_ADDITIONS)
+ + initialize { return self; }
+ alloc { return class_createInstance (self, 0); }
+ new { return [[self alloc] init]; }
- init { return self; }
- free { return object_dispose(self); }
@end
#endif
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
static int i;
__attribute__((objc_exception))
@interface Thrower : Object
@interface Thrower : TestsuiteObject
- - forward: (SEL) s : (void*) a;
@end
......@@ -36,7 +16,7 @@ __attribute__((objc_exception))
- - forward: (SEL) s : (void*) a
{
i++;
@throw [Object new];
@throw [TestsuiteObject new];
return nil;
}
@end
......
......@@ -13,9 +13,9 @@ int main(void)
#else
#include <objc/objc-api.h>
#include <objc/runtime.h>
#include <objc/objc-exception.h>
#include <objc/Object.h>
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
static unsigned int handlerExpected = 0;
......@@ -37,14 +37,14 @@ main(int argc, char *argv[])
@try
{
@throw [Object new];
@throw [TestsuiteObject new];
}
@catch (id exc)
{
handlerExpected = 1;
}
@throw [Object new];
@throw [TestsuiteObject new];
abort();
return 0;
}
......
......@@ -4,7 +4,7 @@
#include <stdlib.h>
#include <stdio.h>
#import "../../../objc-obj-c++-shared/Object1.h"
#import "../../../objc-obj-c++-shared/TestsuiteObject.m"
int gi1 = 9, gi2 = 19;
float gf1 = 9.0, gf2 = 19.0;
......@@ -29,13 +29,13 @@ void foo (int arg1, float *arg2)
local6 = 18.0;
pi = &gi2;
pf = &gf2;
obj2 = obj1 = [Object new];
obj2 = obj1 = [TestsuiteObject new];
arg1 = 17;
arg2 = &gf2;
@throw [Object new];
@throw [TestsuiteObject new];
}
@catch (Object *obj) {
@catch (TestsuiteObject *obj) {
if (local1 != 123 || local2 != 345 || local3 != 5.0 || local4 != 6.0
|| local5 != 17 || local6 != 18.0) {
printf("Abort 1\n");
......@@ -60,4 +60,4 @@ int main(void) {
foo(15, &gf1);
return 0;
}
#import "../../../objc-obj-c++-shared/Object1-implementation.h"
......@@ -13,9 +13,9 @@ int main(void)
#else
#include <objc/objc-api.h>
#include <objc/runtime.h>
#include <objc/objc-exception.h>
#include <objc/Object.h>
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
static unsigned int handlerExpected = 0;
......@@ -27,13 +27,13 @@ my_exception_matcher(Class match_class, id exception)
return 1;
}
@interface A : Object
@interface A : TestsuiteObject
@end
@implementation A
@end
@interface B : Object
@interface B : TestsuiteObject
@end
@implementation B
......
#include <objc/objc.h>
#include <objc/Object.h>
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#ifdef __NEXT_RUNTIME__
/* This test only runs for the GNU runtime. */
......@@ -24,7 +24,7 @@ int main (void)
{
@throw nil;
}
@catch (Object *exc)
@catch (TestsuiteObject *exc)
{
abort ();
}
......
#include <stdlib.h>
#import "../../../objc-obj-c++-shared/Object1.h"
#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
/* do nothing except prove we can compile and link code calling the
ecceptions mechanism */
......@@ -8,12 +8,10 @@ int main(void)
{
@try {
int a = 1 ;
@throw [Object new];
@throw [TestsuiteObject new];
}
@catch (Object *obj) {
@catch (TestsuiteObject *obj) {
return 0;
}
abort();
}
#import "../../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Tests defining a protocol and a class adopting it */
......@@ -10,7 +10,7 @@
- (void) setEnabled: (BOOL)flag;
@end
@interface Feature : Object <Enabling>
@interface Feature : TestsuiteObject <Enabling>
{
const char *name;
BOOL isEnabled;
......@@ -42,4 +42,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test defining a protocol, a class adopting it, and using an object
of type `id <protocol>'. */
......@@ -11,7 +11,7 @@
- (void) setEnabled: (BOOL)flag;
@end
@interface Feature : Object <Enabling>
@interface Feature : TestsuiteObject <Enabling>
{
const char *name;
BOOL isEnabled;
......@@ -43,4 +43,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test defining two protocol, a class adopting both of them,
and using an object of type `id <Protocol1, Protocol2>' */
......@@ -15,7 +15,7 @@
- (int) importance;
@end
@interface Feature : Object <Enabling, Evaluating>
@interface Feature : TestsuiteObject <Enabling, Evaluating>
{
const char *name;
BOOL isEnabled;
......@@ -56,4 +56,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test defining a protocol, a class adopting it in a category */
......@@ -9,7 +9,7 @@
- (int) importance;
@end
@interface Feature : Object
@interface Feature : TestsuiteObject
@end
@implementation Feature
......@@ -38,4 +38,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
......@@ -2,7 +2,7 @@
#include <stdlib.h>
#include <objc/Protocol.h>
#include "../../objc-obj-c++-shared/next-mapping.h"
#include "../../objc-obj-c++-shared/runtime.h"
/* Test defining a protocol, and accessing it using @protocol */
......@@ -25,11 +25,7 @@ int main (void)
{
Protocol *protocol = @protocol (Evaluating);
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if (strcmp (protocol_getName(protocol), "Evaluating"))
#else
if (strcmp ([protocol name], "Evaluating"))
#endif
{
abort ();
}
......
......@@ -2,7 +2,7 @@
#include <stdlib.h>
#include <objc/Protocol.h>
#include "../../objc-obj-c++-shared/next-mapping.h"
#include "../../objc-obj-c++-shared/runtime.h"
/* Test defining a protocol, and accessing it using @protocol */
......@@ -17,11 +17,7 @@ int main (void)
{
Protocol *protocol = @protocol (Evaluating);
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if (strcmp (protocol_getName(protocol), "Evaluating"))
#else
if (strcmp ([protocol name], "Evaluating"))
#endif
{
abort ();
}
......
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Protocol1.h"
#include <objc/Protocol.h>
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test defining two protocols, one incorporating the other one. */
......@@ -14,7 +15,7 @@
@end
/* A class adopting the protocol */
@interface Test : Object <Processing>
@interface Test : TestsuiteObject <Processing>
{
BOOL didConfigure;
BOOL didProcess;
......@@ -41,4 +42,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
#import "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
@interface Foo : Object
@interface Foo : TestsuiteObject
+ + bar;
@end
......
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
@interface Object (StopProtocol)
@interface TestsuiteObject (StopProtocol)
- (void) stop;
@end
......
......@@ -9,10 +9,10 @@
*/
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
@interface A : Object
@interface A : TestsuiteObject
@end
@interface B : A
......
......@@ -30,9 +30,7 @@
{
return [self sumInteger: a withInteger: b withInteger: c];
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
......
......@@ -22,9 +22,7 @@
return test ();
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
int main (void)
......
......@@ -3,7 +3,7 @@
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
#include <stdio.h>
#include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
int bappy (int (*blargh) (int a, int b, int c))
......@@ -11,7 +11,7 @@ int bappy (int (*blargh) (int a, int b, int c))
return blargh (4, 7, 2) + 3;
}
@interface Foo: Object
@interface Foo: TestsuiteObject
+ (int)foo;
@end
......
/* 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> */
#ifdef __NEXT_RUNTIME__
#include <objc/objc-class.h>
#include <objc/Object.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 method_get_imp(M) (((Method)M)->method_imp)
#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)
#define class_get_super_class(C) (((struct objc_class *)C)->super_class)
#define object_get_super_class(O) class_get_super_class(*(struct objc_class **)O)
#define objc_lookup_class(N) objc_lookUpClass(N)
#define object_get_class(O) (*(struct objc_class **)O)
#define class_is_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_CLASS)? YES: NO)
#define class_is_meta_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_META)? YES: NO)
#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))
/* 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;
}
/*
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 (struct objc_method *mth)
{
int i = 0;
const char *type = mth->method_types;
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 (struct objc_method *mth)
{
const char *type = objc_skip_typespec (mth->method_types);
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 (struct objc_method *m,
arglist_t argframe,
const char **type)
{
*type = m->method_types;
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 (struct objc_method *m,
arglist_t argframe, int arg,
const char **type)
{
const char *t = objc_skip_argspec (m->method_types);
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 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.
*/
struct objc_class _NSConstantStringClassReference;
@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__ */
/* Contributed by Nicola Pero - Fri Aug 30 12:55:37 2002 */
#include <objc/objc.h>
#include <objc/Object.h>
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test that calling a method of a nil object results in
nothing to happen (but not a crash), and nil to be
returned. */
@interface TestClass : Object
@interface TestClass : TestsuiteObject
- (void) testVoid;
- (id) testId;
......
/* Contributed by Nicola Pero - Fri Mar 9 19:39:15 CET 2001 */
#import "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
#import <objc/objc.h>
/* Test that using the same name for different things makes no
problem */
@interface TestClass : Object
@interface TestClass : TestsuiteObject
{
int test;
}
......@@ -39,4 +39,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
......@@ -3,7 +3,6 @@
* Tue Sep 19 4:29AM
*/
#include "../../objc-obj-c++-shared/Protocol1.h"
#include <objc/objc.h>
@protocol MyProtocol
......@@ -25,7 +24,7 @@ int main (void)
[object methodA];
exit (0);
return 0;
}
......@@ -2,7 +2,7 @@
* Contributed by Nicola Pero <n.pero@mi.flashnet.it>
* Tue Sep 19 4:34AM
*/
#include "../../objc-obj-c++-shared/Protocol1.h"
#include <objc/objc.h>
@protocol MyProtocol
......@@ -17,16 +17,14 @@
{
printf ("methodA\n");
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
int main (void)
{
[MyObject methodA];
exit (0);
return 0;
}
/* Contributed by Nicola Pero - Tue Jul 3 10:55:21 BST 2001 */
#ifdef __NEXT_RUNTIME__
# include "../../objc-obj-c++-shared/next-mapping.h"
#else
# include <objc/objc-api.h>
#endif
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/runtime.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* This test demonstrate a failure in object_is_class which was fixed */
/* Create a class whose instance variables mirror the struct used for
Class structures in the runtime ... yes we're feeling evil today */
@interface EvilClass : Object
@interface EvilClass : TestsuiteObject
{
Class super_class;
const char* name;
......@@ -35,7 +32,7 @@ int main (void)
EvilClass *evilObject = [EvilClass new];
/* Now check that the object is not a class object */
if (object_is_class (evilObject))
if (class_isMetaClass (object_getClass (evilObject)))
{
printf ("object_is_class failed\n");
abort ();
......@@ -43,4 +40,3 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Tue Jul 3 10:55:21 BST 2001 */
#ifdef __NEXT_RUNTIME__
# include "../../objc-obj-c++-shared/next-mapping.h"
#else
# include <objc/objc-api.h>
#endif
#include "../../objc-obj-c++-shared/Object1.h"
#include "../../objc-obj-c++-shared/runtime.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* This test demonstrate a failure in object_is_meta_class which was fixed */
@interface EvilClass : Object
@interface EvilClass : TestsuiteObject
{
Class super_class;
const char* name;
......@@ -33,7 +30,8 @@ int main (void)
EvilClass *evilObject = [EvilClass new];
/* Now check that the object is not a meta class object */
if (object_is_meta_class (evilObject))
if (class_isMetaClass (object_getClass (evilObject))
&& class_isMetaClass (evilObject))
{
printf ("object_is_meta_class failed\n");
abort ();
......@@ -41,4 +39,4 @@ int main (void)
return 0;
}
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Fri Mar 9 19:39:15 CET 2001 */
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
/* Test the @private, @protected, @public keyworks for ivars. We only
check syntax. */
@interface TestClass : Object
@interface TestClass : TestsuiteObject
{
int a;
......
/* Contributed by Nicola Pero - Fri Jun 4 03:16:17 BST 2004 */
/* Test that a protocol is equal to itself. */
#include "../../objc-obj-c++-shared/Protocol1.h"
#include <objc/Protocol.h>
#include "../../objc-obj-c++-shared/runtime.h"
@protocol Foo
- (void)foo;
......@@ -10,11 +11,7 @@ int main (void)
{
Protocol *protocol = @protocol(Foo);
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if ( !protocol_isEqual (protocol, protocol))
#else
if (! [protocol isEqual: protocol])
#endif
if (!protocol_isEqual (protocol, protocol))
{
abort ();
}
......
/* Contributed by Nicola Pero - Fri Jun 4 03:16:17 BST 2004 */
/* Test that protocols with different names are different. */
#include "../../objc-obj-c++-shared/Protocol1.h"
#include "../../objc-obj-c++-shared/runtime.h"
#include <objc/Protocol.h>
@protocol Foo1
- (void)foo1;
......@@ -13,11 +13,7 @@
int main (void)
{
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if (protocol_isEqual (@protocol(Foo1), @protocol(Foo2)))
#else
if ([@protocol(Foo1) isEqual: @protocol(Foo2)])
#endif
{
abort ();
}
......
/* Contributed by Nicola Pero - Fri Jun 4 03:16:17 BST 2004 */
/* Test that a protocol is not equal to nil. */
#include "../../objc-obj-c++-shared/Protocol1.h"
#include "../../objc-obj-c++-shared/runtime.h"
#include <objc/Protocol.h>
@protocol Foo
- (void)foo;
......@@ -9,11 +9,7 @@
int main (void)
{
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if (protocol_isEqual (@protocol(Foo), nil))
#else
if ([@protocol(Foo) isEqual: nil])
#endif
{
abort ();
}
......
/* Contributed by David Ayers - Fri Jun 4 03:16:17 BST 2004 */
/* Test that a protocol is not equal to something which is not a protocol. */
#include "../../objc-obj-c++-shared/Protocol1.h"
#include "../../objc-obj-c++-shared/runtime.h"
#include <objc/Protocol.h>
@protocol Foo
- (void)foo;
......@@ -10,11 +10,7 @@
int main (void)
{
/* A Protocol object should not be equal to a Class object. */
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if (protocol_isEqual (@protocol(Foo), objc_getClass("Protocol")))
#else
if ([@protocol(Foo) isEqual: [Protocol class]])
#endif
if (protocol_isEqual (@protocol(Foo), (id)objc_getClass("Protocol")))
{
abort ();
}
......
......@@ -17,9 +17,7 @@
return self;
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
......
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#import "../../objc-obj-c++-shared/next-mapping.h"
#import "../../objc-obj-c++-shared/runtime.h"
#import <objc/objc.h>
/* Test that instance methods of root classes are available as class
......@@ -18,9 +18,7 @@
{
return self;
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
@interface NormalClass : RootClass
......@@ -31,7 +29,7 @@
int main (void)
{
Class normal = objc_get_class ("NormalClass");
Class normal = objc_getClass ("NormalClass");
if (normal == Nil)
{
......
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#include <objc/objc.h>
#include <objc/objc-api.h>
#include <objc/Object.h>
#include "../../objc-obj-c++-shared/runtime.h"
#include "../../objc-obj-c++-shared/TestsuiteObject.m"
int main (void)
{
......@@ -9,11 +9,7 @@ int main (void)
char *selname;
selector = @selector (alloc);
#ifdef __NEXT_RUNTIME__
selname = sel_getName (selector);
#else
selname = sel_get_name (selector);
#endif
if (strcmp (selname, "alloc"))
abort ();
......
......@@ -19,9 +19,7 @@ static int test = 1;
return test;
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
int main (void)
......
......@@ -22,9 +22,7 @@ static int test (void)
return test ();
}
#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
#endif
@end
int main (void)
......
#import "../../objc-obj-c++-shared/Object1.h"
#import "../../objc-obj-c++-shared/TestsuiteObject.m"
int main(void)
{
[Object class];
[TestsuiteObject class];
return 0;
}
#import "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#include <objc/objc.h>
#include <objc/objc-api.h>
#include <stdarg.h>
/* Test method with variable number of arguments */
......@@ -32,9 +31,7 @@
return sum;
}
#ifdef __NEXT_RUNTIME__
+ + initialize { return self; }
#endif
@end
int main (void)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment