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
/* { 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;
......
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