Commit d764a8e6 by Iain Sandoe Committed by Nicola Pero

Added support for the 64-bit Apple Objective-C runtime

From-SVN: r170260
parent 0a8134ca
2011-02-17 Iain Sandoe <iains@gcc.gnu.org>
* config/darwin-c.c (darwin_cpp_builtins): Define __OBJC2__ for
objc_abi == 2.
* config/darwin.c (output_objc_section_asm_op): Added support for
ABI v1 and v2.
(is_objc_metadata): New.
(darwin_objc2_section): New.
(darwin_objc1_section): New.
(machopic_select_section): Added support for ABI v1 and v2.
(darwin_emit_objc_zeroed): New.
(darwin_output_aligned_bss): Detect objc metadata and treat it
appropriately.
(darwin_asm_output_aligned_decl_common): Same.
(darwin_asm_output_aligned_decl_local): Same.
* config/darwin-sections.def: Updated for ABI v1 and v2.
* config/darwin.h (SUBTARGET_C_COMMON_OVERRIDE_OPTIONS): When
compiling Objective-C code for the NeXT runtime, default to using
ABI version 0 for 32-bit, and version 2 for 64-bit.
2011-02-17 Joseph Myers <joseph@codesourcery.com> 2011-02-17 Joseph Myers <joseph@codesourcery.com>
* common.opt (optimize_fast): New Variable. * common.opt (optimize_fast): New Variable.
......
...@@ -629,6 +629,9 @@ darwin_cpp_builtins (cpp_reader *pfile) ...@@ -629,6 +629,9 @@ darwin_cpp_builtins (cpp_reader *pfile)
builtin_define ("__strong="); builtin_define ("__strong=");
builtin_define ("__weak="); builtin_define ("__weak=");
} }
if (flag_objc_abi == 2)
builtin_define ("__OBJC2__");
} }
/* Handle C family front-end options. */ /* Handle C family front-end options. */
......
...@@ -94,7 +94,7 @@ DEF_SECTION (mod_term_section, 0, ".mod_term_func", 0) ...@@ -94,7 +94,7 @@ DEF_SECTION (mod_term_section, 0, ".mod_term_func", 0)
DEF_SECTION (constructor_section, 0, ".constructor", 0) DEF_SECTION (constructor_section, 0, ".constructor", 0)
DEF_SECTION (destructor_section, 0, ".destructor", 0) DEF_SECTION (destructor_section, 0, ".destructor", 0)
/* Objective-C (V1) sections. */ /* Objective-C ABI=0 (Original version) sections. */
DEF_SECTION (objc_class_section, 0, ".objc_class", 1) DEF_SECTION (objc_class_section, 0, ".objc_class", 1)
DEF_SECTION (objc_meta_class_section, 0, ".objc_meta_class", 1) DEF_SECTION (objc_meta_class_section, 0, ".objc_meta_class", 1)
DEF_SECTION (objc_category_section, 0, ".objc_category", 1) DEF_SECTION (objc_category_section, 0, ".objc_category", 1)
...@@ -112,7 +112,7 @@ DEF_SECTION (objc_module_info_section, 0, ".objc_module_info", 1) ...@@ -112,7 +112,7 @@ DEF_SECTION (objc_module_info_section, 0, ".objc_module_info", 1)
DEF_SECTION (objc_protocol_section, 0, ".objc_protocol", 1) DEF_SECTION (objc_protocol_section, 0, ".objc_protocol", 1)
DEF_SECTION (objc_string_object_section, 0, ".objc_string_object", 1) DEF_SECTION (objc_string_object_section, 0, ".objc_string_object", 1)
DEF_SECTION (objc_constant_string_object_section, 0, DEF_SECTION (objc_constant_string_object_section, 0,
".section __OBJC, __cstring_object, regular, no_dead_strip", 1) ".section __OBJC, __cstring_object, regular, no_dead_strip", 0)
/* Fix-and-Continue image marker. */ /* Fix-and-Continue image marker. */
DEF_SECTION (objc_image_info_section, 0, DEF_SECTION (objc_image_info_section, 0,
...@@ -156,3 +156,40 @@ DEF_SECTION (darwin_exception_section, SECTION_NO_ANCHOR, ...@@ -156,3 +156,40 @@ DEF_SECTION (darwin_exception_section, SECTION_NO_ANCHOR,
DEF_SECTION (darwin_eh_frame_section, SECTION_NO_ANCHOR, DEF_SECTION (darwin_eh_frame_section, SECTION_NO_ANCHOR,
".section " EH_FRAME_SECTION_NAME ",__eh_frame" ".section " EH_FRAME_SECTION_NAME ",__eh_frame"
EH_FRAME_SECTION_ATTR, 0) EH_FRAME_SECTION_ATTR, 0)
/* Sections for ObjC ABI=1 (ObjC 'V1' extensions) */
DEF_SECTION (objc1_class_ext_section, 0,
".section __OBJC, __class_ext, regular, no_dead_strip", 1)
DEF_SECTION (objc1_prop_list_section, 0,
".section __OBJC, __property, regular, no_dead_strip", 1)
DEF_SECTION (objc1_protocol_ext_section, 0,
".section __OBJC, __protocol_ext, regular, no_dead_strip", 1)
/* Sections for ObjC ABI=2 (m64). */
DEF_SECTION (objc2_message_refs_section, 0,
".section __DATA, __objc_msgrefs, regular, no_dead_strip", 1)
DEF_SECTION (objc2_classdefs_section, 0, ".section __DATA, __objc_data", 1)
DEF_SECTION (objc2_metadata_section, 0, ".section __DATA, __objc_const", 1)
DEF_SECTION (objc2_classrefs_section, 0,
".section __DATA, __objc_classrefs, regular, no_dead_strip", 1)
DEF_SECTION (objc2_classlist_section, 0,
".section __DATA, __objc_classlist, regular, no_dead_strip", 1)
DEF_SECTION (objc2_categorylist_section, 0,
".section __DATA, __objc_catlist, regular, no_dead_strip", 1)
DEF_SECTION (objc2_selector_refs_section, 0,
".section __DATA, __objc_selrefs, literal_pointers, no_dead_strip", 1)
DEF_SECTION (objc2_nonlazy_class_section, 0,
".section __DATA, __objc_nlclslist, regular, no_dead_strip", 1)
DEF_SECTION (objc2_nonlazy_category_section, 0,
".section __DATA, __objc_nlcatlist, regular, no_dead_strip", 1)
DEF_SECTION (objc2_protocollist_section, 0,
".section __DATA, __objc_protolist, regular, no_dead_strip", 1)
DEF_SECTION (objc2_protocolrefs_section, 0,
".section __DATA, __objc_protorefs, regular, no_dead_strip", 1)
DEF_SECTION (objc2_super_classrefs_section, 0,
".section __DATA, __objc_superrefs, regular, no_dead_strip", 1)
DEF_SECTION (objc2_image_info_section, 0,
".section __DATA, __objc_imageinfo, regular, no_dead_strip", 1)
DEF_SECTION (objc2_constant_string_object_section, 0,
".section __DATA, __objc_stringobj, regular, no_dead_strip", 1)
...@@ -140,6 +140,16 @@ extern GTY(()) int darwin_ms_struct; ...@@ -140,6 +140,16 @@ extern GTY(()) int darwin_ms_struct;
} while (0) } while (0)
#define SUBTARGET_C_COMMON_OVERRIDE_OPTIONS do { \ #define SUBTARGET_C_COMMON_OVERRIDE_OPTIONS do { \
/* Unless set, force ABI=2 for NeXT and m64, 0 otherwise. */ \
if (!global_options_set.x_flag_objc_abi) \
global_options.x_flag_objc_abi \
= (flag_next_runtime && TARGET_64BIT) ? 2 : 0; \
/* Objective-C family ABI 2 is only valid for next/m64 at present. */ \
if (global_options_set.x_flag_objc_abi && flag_next_runtime) \
if (TARGET_64BIT && global_options.x_flag_objc_abi < 2) \
error_at (UNKNOWN_LOCATION, "%<-fobjc-abi-version%> >= 2 is only" \
" supported on %<-m64%> targets for" \
" %<-fnext-runtime%>"); \
/* Sort out ObjC exceptions: If the runtime is NeXT we default to \ /* Sort out ObjC exceptions: If the runtime is NeXT we default to \
sjlj for m32 only. */ \ sjlj for m32 only. */ \
if (!global_options_set.x_flag_objc_sjlj_exceptions) \ if (!global_options_set.x_flag_objc_sjlj_exceptions) \
...@@ -599,7 +609,7 @@ int darwin_label_is_anonymous_local_objc_name (const char *name); ...@@ -599,7 +609,7 @@ int darwin_label_is_anonymous_local_objc_name (const char *name);
} \ } \
else if (xname[0] == '+' || xname[0] == '-') \ else if (xname[0] == '+' || xname[0] == '-') \
fprintf (FILE, "\"%s\"", xname); \ fprintf (FILE, "\"%s\"", xname); \
else if (darwin_label_is_anonymous_local_objc_name (xname)) \ else if (darwin_label_is_anonymous_local_objc_name (xname)) \
fprintf (FILE, "L%s", xname); \ fprintf (FILE, "L%s", xname); \
else if (!strncmp (xname, ".objc_class_name_", 17)) \ else if (!strncmp (xname, ".objc_class_name_", 17)) \
fprintf (FILE, "%s", xname); \ fprintf (FILE, "%s", xname); \
......
2011-02-17 Iain Sandoe <iains@gcc.gnu.org>
* config-lang.in (gtfiles): Updated.
* Make-lang.in (START_HDRS): New.
(OBJC_OBJS): Added new object files.
(objc/objc-act.o): Updated prerequisites.
(objc/objc-lang.o): Updated prerequisites.
(objc/objc-runtime-shared-support.o): New.
(objc/objc-gnu-runtime-abi-01.o): New.
(objc/objc-next-runtime-abi-01.o): New.
(objc/objc-next-runtime-abi-02.o): New.
* objc-runtime-hooks.h: New.
* objc-runtime-shared-support.h: New.
* objc-runtime-shared-support.c: New.
* objc-gnu-runtime-abi-01.c: New.
* objc-next-metadata-tags.h: New.
* objc-next-runtime-abi-01.c: New.
* objc-next-runtime-abi-02.c: New.
* objc-lang.c: Include c-lang.h.
(LANG_HOOKS_EH_PERSONALITY): Removed.
* objc-act.h: Moved many declarations and code from objc-act.c
into objc-act.h to make them available outside objc-act.c.
(objc_eh_runtime_type): Removed.
(objc_eh_personality): Removed.
(CLASS_HAS_EXCEPTION_ATTR): New.
(OCTI_SUPER_SUPERFIELD_ID): New.
(OCTI_V1_PROP_LIST_TEMPL): New.
(OCTI_V1_PROP_NAME_ATTR_CHAIN): New.
(super_superclassfield_id): New.
(objc_prop_list_ptr): New.
(prop_names_attr_chain): New.
* objc-act.c: Include new runtime headers. Moved many #defines
and declarations into objc-act.h and
objc-runtime-shared-support.h. Made some corresponding functions
non-static, and moved some others into
objc-runtime-shared-support.c. Moved metadata generation code
into the new runtime hook files.
(ivar_offset_hash_list): New.
(objc_init): Call generate_struct_value_by_array() before doing
any runtime initialization. Create the appropriate runtime hook
structures.
(init_objc): Removed. Code moved directly into objc_init.
(finish_objc): Removed. Code moved directly into
objc_write_global_declarations.
(objc_write_global_declarations): Do the warn_selector checks
before emitting metadata. Use a runtime hook to emit the
metadata. Do not emit the metadata or do -gen-decls processing if
-fsyntax-only or we are producing a PCH.
(build_objc_exception_stuff): Renamed to
build_common_objc_exception_stuff. Remove TREE_NOTHROW flag from
objc_exception_throw_decl.
(synth_module_prologue): Call runtime initialize hook instead of
building runtime declarations here. Use the
default_constant_string_class_name runtime hook to set the
constant string class name.
(objc_build_string_object): Call the setup_const_string_class_decl
runtime hook instead of setup_string_decl. Call the
build_const_string_constructor runtime hook instead of building
the string object here.
(get_objc_string_decl): Added prop_names_attr case. Removed
gcc_unreachable() at the end.
(objc_begin_catch_clause): Distinguish between @catch (...) and
@catch (id x). Call the begin_catch runtime hook instead of
building the CATCH_EXPR here.
(objc_finish_catch_clause): Call the finish_catch runtime hook
instead of adding the catch here.
(objc_finish_try_stmt): Call the finish_try_stmt runtime hook
instead of doing it here.
(objc_build_throw_stmt): Bail out early for error_mark_node. Call
the build_exc_ptr runtime hook instead of objc_build_exc_ptr.
Call the build_throw_stmt runtime hook instead of building the
throw call here.
(objc_generate_cxx_cdtors): Set has_cxx_cdtors for the GNU runtime
as well.
(get_arg_type_list): Call the get_arg_type_list_base runtime hook
instead of building the list of arguments here.
(receiver_is_class_object): Call the receiver_is_class_object
runtime hook instead of doing the check here. Call the
tag_getclass runtime hook instead of using TAG_GETCLASS.
(objc_finish_message_expr): Call the build_objc_method_call
runtime hook.
(objc_build_protocol_expr): Call the get_protocol_reference
runtime hook.
(objc_build_selector_expr): Call the build_selector_reference
runtime hook.
(build_ivar_reference): Call the build_ivar_reference runtime
hook.
(hash_init): Set up ivar_offset_hash_list.
(start_class): Recognize the objc_exception attribute and store
it.
(continue_class): Use the class_decl and metaclass_decl runtime
hooks.
(build_objc_property_accessor_helpers): Renamed to
build_common_objc_property_accessor_helpers. Do not build
objc_copyStruct_decl, objc_getPropertyStruct_decl and
objc_setPropertyStruct_decl.
(objc_synthesize_getter): Check what struct setter/getter helper
is available instead of checking the type of runtime.
(get_super_receiver): Use the super_superclassfield_ident runtime
hook. Added assert. Use the get_class_super_ref and
get_category_super_ref runtime hooks.
(objc_v2_encode_prop_attr): New.
2011-01-17 Nicola Pero <nicola.pero@meta-innovation.com> 2011-01-17 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/47314 PR objc/47314
......
# Top level -*- makefile -*- fragment for GNU Objective-C # Top level -*- makefile -*- fragment for GNU Objective-C
# Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2007, # Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2007,
# 2008, 2009, 2010 Free Software Foundation, Inc. # 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
#This file is part of GCC. #This file is part of GCC.
...@@ -43,11 +43,18 @@ objc: cc1obj$(exeext) ...@@ -43,11 +43,18 @@ objc: cc1obj$(exeext)
# Tell GNU make to ignore these if they exist. # Tell GNU make to ignore these if they exist.
.PHONY: objc .PHONY: objc
START_HDRS = $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
c-lang.h langhooks.h c-family/c-objc.h objc/objc-act.h
# Use maximal warnings for this front end. # Use maximal warnings for this front end.
objc-warn = $(STRICT_WARN) objc-warn = $(STRICT_WARN)
# Language-specific object files for Objective C. # Language-specific object files for Objective C.
OBJC_OBJS = objc/objc-lang.o objc/objc-act.o OBJC_OBJS = objc/objc-lang.o objc/objc-act.o \
objc/objc-runtime-shared-support.o \
objc/objc-gnu-runtime-abi-01.o \
objc/objc-next-runtime-abi-01.o \
objc/objc-next-runtime-abi-02.o \
objc_OBJS = $(OBJC_OBJS) cc1obj-checksum.o objc_OBJS = $(OBJC_OBJS) cc1obj-checksum.o
...@@ -66,17 +73,32 @@ cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o $(BACKEND) $( ...@@ -66,17 +73,32 @@ cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o $(BACKEND) $(
# Objective C language specific files. # Objective C language specific files.
objc/objc-lang.o : objc/objc-lang.c \ objc/objc-lang.o : objc/objc-lang.c $(START_HDRS) \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \ $(GGC_H) $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-objc.h \
$(GGC_H) langhooks.h $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-objc.h \ c-objc-common.h
c-objc-common.h c-family/c-objc.h objc/objc-act.h
objc/objc-runtime-shared-support.o : objc/objc-runtime-shared-support.c \
objc/objc-act.o : objc/objc-act.c \ $(START_HDRS) objc/objc-runtime-shared-support.h $(OBSTACK_H) \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ objc/objc-next-metadata-tags.h gt-objc-objc-runtime-shared-support.h
$(TARGET_H) $(C_TREE_H) $(DIAGNOSTIC_CORE_H) toplev.h $(FLAGS_H) \
objc/objc-act.h input.h $(FUNCTION_H) output.h debug.h langhooks.h \ objc/objc-gnu-runtime-abi-01.o: objc/objc-gnu-runtime-abi-01.c $(START_HDRS) \
$(LANGHOOKS_DEF_H) $(HASHTAB_H) $(C_PRAGMA_H) gt-objc-objc-act.h \ objc/objc-runtime-hooks.h $(GGC_H) \
$(GIMPLE_H) c-lang.h c-family/c-objc.h objc/objc-runtime-shared-support.h gt-objc-objc-gnu-runtime-abi-01.h toplev.h
objc/objc-next-runtime-abi-01.o: objc/objc-next-runtime-abi-01.c $(START_HDRS) \
$(GGC_H) objc/objc-runtime-hooks.h \
objc/objc-next-metadata-tags.h gt-objc-objc-next-runtime-abi-01.h output.h \
objc/objc-runtime-shared-support.h $(TARGET_H)
objc/objc-next-runtime-abi-02.o: objc/objc-next-runtime-abi-02.c $(START_HDRS) \
$(GGC_H) objc/objc-runtime-hooks.h \
objc/objc-next-metadata-tags.h gt-objc-objc-next-runtime-abi-02.h $(TARGET_H) \
objc/objc-runtime-shared-support.h $(OBSTACK_H)
objc/objc-act.o : objc/objc-act.c $(START_HDRS) $(GGC_H) \
$(DIAGNOSTIC_CORE_H) toplev.h $(FLAGS_H) input.h $(FUNCTION_H) output.h debug.h \
$(LANGHOOKS_DEF_H) $(HASHTAB_H) $(C_PRAGMA_H) gt-objc-objc-act.h $(OBSTACK_H) \
$(GIMPLE_H) objc/objc-runtime-shared-support.h objc/objc-runtime-hooks.h
objc.srcextra: objc.srcextra:
......
# Top level configure fragment for GNU Objective-C # Top level configure fragment for GNU Objective-C
# Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2010 # Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2010,
# Free Software Foundation, Inc. # 2011 Free Software Foundation, Inc.
#This file is part of GCC. #This file is part of GCC.
...@@ -33,4 +33,4 @@ target_libs=target-libobjc ...@@ -33,4 +33,4 @@ target_libs=target-libobjc
# Most of the object files for cc1obj actually come from C. # Most of the object files for cc1obj actually come from C.
lang_requires="c" lang_requires="c"
gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/c-parser.c \$(srcdir)/c-tree.h \$(srcdir)/c-decl.c \$(srcdir)/c-objc-common.c \$(srcdir)/c-family/c-common.c \$(srcdir)/c-family/c-common.h \$(srcdir)/c-family/c-objc.h \$(srcdir)/c-family/c-cppbuiltin.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/objc/objc-act.c" gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/objc/objc-act.c \$(srcdir)/objc/objc-runtime-shared-support.c \$(srcdir)/objc/objc-gnu-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-02.c \$(srcdir)/c-parser.c \$(srcdir)/c-tree.h \$(srcdir)/c-decl.c \$(srcdir)/c-lang.h \$(srcdir)/c-objc-common.c \$(srcdir)/c-family/c-common.c \$(srcdir)/c-family/c-common.h \$(srcdir)/c-family/c-objc.h \$(srcdir)/c-family/c-cppbuiltin.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c"
This source diff could not be displayed because it is too large. You can view the blob instead.
/* Language-dependent hooks for Objective-C. /* Language-dependent hooks for Objective-C.
Copyright 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2010 Copyright 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Ziemowit Laski <zlaski@apple.com> Contributed by Ziemowit Laski <zlaski@apple.com>
...@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see
#include "langhooks.h" #include "langhooks.h"
#include "langhooks-def.h" #include "langhooks-def.h"
#include "c-objc-common.h" #include "c-objc-common.h"
#include "c-lang.h"
enum c_language_kind c_language = clk_objc; enum c_language_kind c_language = clk_objc;
static void objc_init_ts (void); static void objc_init_ts (void);
...@@ -51,13 +52,6 @@ static void objc_init_ts (void); ...@@ -51,13 +52,6 @@ static void objc_init_ts (void);
#undef LANG_HOOKS_INIT_TS #undef LANG_HOOKS_INIT_TS
#define LANG_HOOKS_INIT_TS objc_init_ts #define LANG_HOOKS_INIT_TS objc_init_ts
#ifndef OBJCPLUS
#undef LANG_HOOKS_EH_PERSONALITY
#define LANG_HOOKS_EH_PERSONALITY objc_eh_personality
#undef LANG_HOOKS_EH_RUNTIME_TYPE
#define LANG_HOOKS_EH_RUNTIME_TYPE objc_eh_runtime_type
#endif
/* Each front end provides its own lang hook initializer. */ /* Each front end provides its own lang hook initializer. */
struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
......
/* Declarations for meta-data attribute tags.
Copyright (C) 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/>. */
/* These are identifiers used to flag meta-data attributes such that they
survive LTO and might be placed in correct sections for the target. */
enum objc_runtime_tree_index
{
OCTI_RT_OBJC_META,
OCTI_RT_META_BASE,
OCTI_RT_META_CLASS,
OCTI_RT_META_METACLASS,
OCTI_RT_META_CATEGORY,
OCTI_RT_META_PROTOCOL,
OCTI_RT_META_CLASS_CLS_VARS,
OCTI_RT_META_CLASS_NST_VARS,
OCTI_RT_META_CLASS_CLS_METH,
OCTI_RT_META_CLASS_NST_METH,
OCTI_RT_META_CATEG_CLS_METH,
OCTI_RT_META_CATEG_NST_METH,
OCTI_RT_META_PROTO_CLS_METH,
OCTI_RT_META_PROTO_NST_METH,
OCTI_RT_META_CLASS_PROT,
OCTI_RT_META_CATEG_PROT,
OCTI_RT_META_PROT_REFS,
OCTI_RT_META_MSG_REFS,
OCTI_RT_META_SEL_REFS,
OCTI_RT_META_CLSLST_REFS,
OCTI_RT_META_CLASS_REF,
OCTI_RT_META_SUPER_REF,
OCTI_RT_META_CLSLST_NLZY_LAB,
OCTI_RT_META_CLSLST_LAB,
OCTI_RT_META_LAB_PROTOLIST,
OCTI_RT_META_LAB_NLZY_CAT,
OCTI_RT_META_LAB_CAT,
OCTI_RT_META_PROPERTY_LIST,
OCTI_RT_META_PROTOCOL_EXT,
OCTI_RT_META_CLASS_EXT,
OCTI_RT_META_CLASS_NAME,
OCTI_RT_META_METHD_NAME,
OCTI_RT_META_METHD_TYPE,
OCTI_RT_META_PROPN_ATTR,
OCTI_RT_META_MODULES,
OCTI_RT_META_SYMTAB,
OCTI_RT_META_INFO,
OCTI_RT_META_EHTYPE,
OCTI_RT_META_CONST_STR,
OCTI_RT_META_MAX
};
/* Tags for the META data so that the backend can put them in the correct
sections for targets/runtimes (Darwin/NeXT) that require this.
This information also survives LTO - which might produce mixed language
output. */
/* Objective-C meta data attribute tag */
#define objc_meta objc_rt_trees[OCTI_RT_OBJC_META]
/* Attribute values, base = default section. */
#define meta_base objc_rt_trees[OCTI_RT_META_BASE]
/* CLASS. */
#define meta_class objc_rt_trees[OCTI_RT_META_CLASS]
/* METACLASS. */
#define meta_metaclass objc_rt_trees[OCTI_RT_META_METACLASS]
/* CLASS. */
#define meta_category objc_rt_trees[OCTI_RT_META_CATEGORY]
/* PROTOCOL. */
#define meta_protocol objc_rt_trees[OCTI_RT_META_PROTOCOL]
/* Class class vars section. */
#define meta_clac_vars objc_rt_trees[OCTI_RT_META_CLASS_CLS_VARS]
/* Class instance vars section. */
#define meta_clai_vars objc_rt_trees[OCTI_RT_META_CLASS_NST_VARS]
/* Class class methods section. */
#define meta_clac_meth objc_rt_trees[OCTI_RT_META_CLASS_CLS_METH]
/* Class instance methods section. */
#define meta_clai_meth objc_rt_trees[OCTI_RT_META_CLASS_NST_METH]
/* Category class methods section. */
#define meta_catc_meth objc_rt_trees[OCTI_RT_META_CATEG_CLS_METH]
/* Category instance methods section. */
#define meta_cati_meth objc_rt_trees[OCTI_RT_META_CATEG_NST_METH]
#define meta_proto_cls_meth \
objc_rt_trees[OCTI_RT_META_PROTO_CLS_METH]
#define meta_proto_nst_meth \
objc_rt_trees[OCTI_RT_META_PROTO_NST_METH]
/* Class protocols. */
#define meta_clas_prot objc_rt_trees[OCTI_RT_META_CLASS_PROT]
/* Category protocols. */
#define meta_catg_prot objc_rt_trees[OCTI_RT_META_CATEG_PROT]
/* Protocol references. */
#define meta_proto_ref objc_rt_trees[OCTI_RT_META_PROT_REFS]
/* Message refs. */
#define meta_mref objc_rt_trees[OCTI_RT_META_MSG_REFS]
/* Selector refs. */
#define meta_sel_refs objc_rt_trees[OCTI_RT_META_SEL_REFS]
/* Class list refs. */
#define meta_class_ref objc_rt_trees[OCTI_RT_META_CLSLST_REFS]
#define meta_class_reference \
objc_rt_trees[OCTI_RT_META_CLASS_REF]
#define meta_superclass_ref \
objc_rt_trees[OCTI_RT_META_SUPER_REF]
/* Class list Label. */
#define meta_label_classlist \
objc_rt_trees[OCTI_RT_META_CLSLST_LAB]
/* Class list Label (non lazy). */
#define meta_label_nonlazy_classlist \
objc_rt_trees[OCTI_RT_META_CLSLST_NLZY_LAB]
#define meta_label_categorylist \
objc_rt_trees[OCTI_RT_META_LAB_CAT]
#define meta_label_nonlazy_categorylist \
objc_rt_trees[OCTI_RT_META_LAB_NLZY_CAT]
#define meta_label_protocollist \
objc_rt_trees[OCTI_RT_META_LAB_PROTOLIST]
/* V1 - property list. */
#define meta_proplist objc_rt_trees[OCTI_RT_META_PROPERTY_LIST]
#define meta_protocol_extension \
objc_rt_trees[OCTI_RT_META_PROTOCOL_EXT]
#define meta_class_extension \
objc_rt_trees[OCTI_RT_META_CLASS_EXT]
/* String sections. */
#define meta_class_name objc_rt_trees[OCTI_RT_META_CLASS_NAME]
#define meta_meth_name objc_rt_trees[OCTI_RT_META_METHD_NAME]
#define meta_meth_type objc_rt_trees[OCTI_RT_META_METHD_TYPE]
#define meta_prop_name_attr \
objc_rt_trees[OCTI_RT_META_PROPN_ATTR]
#define meta_modules objc_rt_trees[OCTI_RT_META_MODULES]
#define meta_symtab objc_rt_trees[OCTI_RT_META_SYMTAB]
#define meta_info objc_rt_trees[OCTI_RT_META_INFO]
#define meta_ehtype objc_rt_trees[OCTI_RT_META_EHTYPE]
#define meta_const_str objc_rt_trees[OCTI_RT_META_CONST_STR]
#define OBJCMETA(DECL,VERS,KIND) \
if (VERS) \
DECL_ATTRIBUTES (DECL) = build_tree_list ((VERS), (KIND));
This source diff could not be displayed because it is too large. You can view the blob instead.
/* Hooks to abstract the runtime meta-data generation for Objective C.
Copyright (C) 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/>. */
#ifndef _OBJC_RUNTIME_HOOKS_H_
#define _OBJC_RUNTIME_HOOKS_H_
/* A set of hooks for the front end to obtain runtime-specific actions. */
/* Objective-C supports several runtime library variants:
"GNU" runtime selected by -fgnu-runtime (currently at API version 1).
"NeXT" runtime (selected by -fnext-runtime) and installed on OSX/Darwin
systems at API version 1 (for m32 code) and version 2 (for m64 code).
The runtimes require different data types/layouts, method call mechanisms
and so on, and the purpose of this interface is to abstract such
differences from the parser's perspective. */
typedef struct _objc_runtime_hooks_r
{
/* Initialize for this runtime. */
void (*initialize) (void);
const char *default_constant_string_class_name;
/* FIXME: Having to check this name should not be necessary. */
const char *tag_getclass;
/* id for superclass class field - named differently in the existing
runtimes. */
tree (*super_superclassfield_ident) (void);
/* Obtain a class decl for the identifier. */
tree (*class_decl) (tree);
/* Obtain a metaclass decl for the identifier. */
tree (*metaclass_decl) (tree);
/* Obtain a category decl for the identifier. */
tree (*category_decl) (tree);
/* Obtain a protocol decl for the identifier. */
tree (*protocol_decl) (tree);
/* Obtain a string decl, to be placed in the nominated string-section. */
tree (*string_decl) (tree, const char *, string_section);
/* Obtain a class reference, generating the fwd def. if necessary. */
tree (*get_class_reference) (tree);
/* build/get selector reference. */
tree (*build_selector_reference) (location_t, tree, tree);
/* Get a protocol reference, generating the forward def. if necessary. */
tree (*get_protocol_reference) (location_t, tree);
/* Get an ivar ref. re the base. */
tree (*build_ivar_reference) (location_t, tree, tree);
/* Get a reference to {meta}class' super. */
tree (*get_class_super_ref) (location_t, struct imp_entry *, bool);
/* Get a reference to Category {meta}class' super. */
tree (*get_category_super_ref) (location_t, struct imp_entry *, bool);
/* Receiver is class Object, check runtime-specific. */
tree (*receiver_is_class_object) (tree);
/* Get the start of a method argument type list (receiver, _cmd). */
tree (*get_arg_type_list_base) (tree, int, int);
/* Build method call. */
tree (*build_objc_method_call) (location_t, tree, tree, tree, tree, tree, int);
/* Check for or otherwise handle a request to check that the constant
string class reference is set-up & OK. */
bool (*setup_const_string_class_decl) (void);
/* Return the tree reprenting a const string constructor for the arg.
Most of the data are in global trees. */
tree (*build_const_string_constructor) (location_t, tree, int);
/* Exceptions. */
tree (*build_throw_stmt) (location_t, tree, bool);
tree (*build_exc_ptr) (struct objc_try_context **);
tree (*begin_catch) (struct objc_try_context **, tree, tree, tree, bool);
void (*finish_catch) (struct objc_try_context **, tree);
tree (*finish_try_stmt) (struct objc_try_context **);
/* Emit all the metadata required by the runtime - based on the tables built
during parsing. */
void (*generate_metadata) (void);
} objc_runtime_hooks;
/* For shared support that needs to access these. */
extern objc_runtime_hooks runtime;
/* One per runtime at present.
TODO: Make into some kind of configury-generated table. */
extern bool objc_gnu_runtime_abi_01_init (objc_runtime_hooks *);
extern bool objc_next_runtime_abi_01_init (objc_runtime_hooks *);
extern bool objc_next_runtime_abi_02_init (objc_runtime_hooks *);
#endif /* _OBJC_RUNTIME_HOOKS_H_ */
/* Support routines shared by all runtimes.
Copyright (C) 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/>. */
#ifndef _OBJC_RUNTIME_SHARED_SUPPORT_H_
#define _OBJC_RUNTIME_SHARED_SUPPORT_H_
/* Left in obj-act.c for now... */
extern tree objc_start_struct (tree);
extern tree objc_finish_struct (tree, tree);
extern tree add_field_decl (tree, const char *, tree **);
extern tree build_sized_array_type (tree, int);
extern tree lookup_interface (tree);
extern tree objc_build_constructor (tree, VEC(constructor_elt,gc) *);
extern tree start_var_decl (tree, const char *);
extern void finish_var_decl (tree, tree);
extern tree my_build_string (int, const char *);
extern tree my_build_string_pointer (int, const char *);
extern tree add_objc_string (tree ident, string_section);
extern tree get_objc_string_decl (tree, string_section);
extern void add_class_reference (tree);
#ifdef OBJCPLUS
extern void objc_start_function (tree, tree, tree, tree);
extern tree objc_get_parm_info (int);
#else
extern void objc_start_function (tree, tree, tree, struct c_arg_info *);
extern struct c_arg_info *objc_get_parm_info (int);
#endif
extern void objc_push_parm (tree);
extern tree get_arg_type_list (tree, int, int);
/* Stuff that should be migrated to shared support (or some v1-only file). */
extern void build_super_template (void);
extern tree objc_build_component_ref (tree, tree);
extern tree objc_v2_encode_prop_attr (tree);
extern tree build_descriptor_table_initializer (tree, tree);
extern tree build_method_prototype_list_template (tree, int);
extern tree build_protocol_initializer (tree, tree, tree, tree, tree);
/* Stuff that should be migrated to shared encode. */
extern tree encode_method_prototype (tree);
extern void encode_field_decl (tree, int, int);
/* Moved or new routines in objc-runtime-shared-support.c */
extern tree build_selector (tree);
extern tree build_method_template (void);
extern tree build_method_prototype_template (void);
extern tree build_method_list_template (tree, int);
extern tree build_dispatch_table_initializer (tree, tree);
extern void diagnose_missing_method (tree, location_t);
extern void build_next_selector_translation_table (void);
extern void generate_protocol_references (tree);
extern void build_module_descriptor (long, tree);
extern tree build_ivar_list_initializer (tree, tree);
extern tree build_ivar_list_template (tree, int);
extern tree build_ivar_template (void);
extern void generate_strings (void);
extern void dump_interface (FILE *, tree);
extern int generating_instance_variables;
extern FILE *gen_declaration_file;
#endif /* _OBJC_RUNTIME_SHARED_SUPPORT_H_ */
2011-02-17 Iain Sandoe <iains@gcc.gnu.org>
* Make-lang.in (START_HDRS): New.
(OBJCXX_OBJS): Added new object files from objc/.
(objcp/objcp-act.o): Updated prerequisites.
(objcp/objcp-lang.o): Updated prerequisites.
(objcp/objc-runtime-shared-support.o): New.
(objcp/objc-gnu-runtime-abi-01.o): New.
(objcp/objc-next-runtime-abi-01.o): New.
(objcp/objc-next-runtime-abi-02.o): New.
* config-lang.in (gtfiles): Updated.
* objcp-lang.c (objcxx_eh_personality): Removed.
(LANG_HOOKS_EH_PERSONALITY): Removed.
(LANG_HOOKS_EH_RUNTIME_TYPE): Removed.
(objcp_eh_personality_decl): Removed.
2011-02-07 Mike Stump <mikestump@comcast.net> 2011-02-07 Mike Stump <mikestump@comcast.net>
* Make-lang.in (obj-c++.tags): Don't include *.y. * Make-lang.in (obj-c++.tags): Don't include *.y.
......
# Top level -*- makefile -*- fragment for GNU Objective-C++ # Top level -*- makefile -*- fragment for GNU Objective-C++
# Copyright (C) 2005, 2007, 2008, 2009, 2010 # Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
# Contributed by Ziemowit Laski <zlaski@apple.com> # Contributed by Ziemowit Laski <zlaski@apple.com>
...@@ -44,12 +44,19 @@ obj-c++: cc1objplus$(exeext) ...@@ -44,12 +44,19 @@ obj-c++: cc1objplus$(exeext)
# Tell GNU make to ignore these if they exist. # Tell GNU make to ignore these if they exist.
.PHONY: obj-c++ .PHONY: obj-c++
START_HDRS = $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) \
langhooks.h c-family/c-objc.h objc/objc-act.h
# Use maximal warnings for this front end. Also, make ObjC and C++ # Use maximal warnings for this front end. Also, make ObjC and C++
# headers accessible. # headers accessible.
objcp-warn = $(STRICT_WARN) -DOBJCPLUS -I$(srcdir)/objc -I$(srcdir)/cp objcp-warn = $(STRICT_WARN) -DOBJCPLUS -I$(srcdir)/objc -I$(srcdir)/cp
# Language-specific object files for Objective C++. # Language-specific object files for Objective C++.
OBJCXX_OBJS = objcp/objcp-act.o objcp/objcp-lang.o objcp/objcp-decl.o \ OBJCXX_OBJS = objcp/objcp-act.o objcp/objcp-lang.o objcp/objcp-decl.o \
objcp/objc-runtime-shared-support.o \
objcp/objc-gnu-runtime-abi-01.o \
objcp/objc-next-runtime-abi-01.o \
objcp/objc-next-runtime-abi-02.o \
$(CXX_AND_OBJCXX_OBJS) $(CXX_AND_OBJCXX_OBJS)
obj-c++_OBJS = $(OBJCXX_OBJS) cc1objplus-checksum.o obj-c++_OBJS = $(OBJCXX_OBJS) cc1objplus-checksum.o
...@@ -69,23 +76,48 @@ cc1objplus$(exeext): $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBDEPS) ...@@ -69,23 +76,48 @@ cc1objplus$(exeext): $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBDEPS)
# Objective C++ language specific files. # Objective C++ language specific files.
objcp/objcp-lang.o : objcp/objcp-lang.c \ objcp/objcp-lang.o : objcp/objcp-lang.c $(START_HDRS) \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) \ $(C_COMMON_H) $(LANGHOOKS_DEF_H) cp/cp-objcp-common.h \
$(C_COMMON_H) $(LANGHOOKS_DEF_H) objc/objc-act.h cp/cp-objcp-common.h \ $(TARGET_H) gtype-objcp.h
$(TARGET_H) gtype-objcp.h c-family/c-objc.h
objcp/objcp-decl.o : objcp/objcp-decl.c \ objcp/objcp-decl.o : objcp/objcp-decl.c \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) \ $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) \
objc/objc-act.h objcp/objcp-decl.h c-family/c-objc.h objc/objc-act.h objcp/objcp-decl.h c-family/c-objc.h
objcp/objc-runtime-shared-support.o : objc/objc-runtime-shared-support.c \
$(START_HDRS) objc/objc-runtime-shared-support.h $(OBSTACK_H) \
objc/objc-next-metadata-tags.h gt-objc-objc-runtime-shared-support.h
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< \
$(OUTPUT_OPTION)
objcp/objc-gnu-runtime-abi-01.o: objc/objc-gnu-runtime-abi-01.c $(START_HDRS) \
objc/objc-runtime-hooks.h $(GGC_H) \
gt-objc-objc-gnu-runtime-abi-01.h toplev.h
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< \
$(OUTPUT_OPTION)
objcp/objc-next-runtime-abi-01.o: objc/objc-next-runtime-abi-01.c $(START_HDRS) \
$(GGC_H) objc/objc-runtime-hooks.h \
objc/objc-next-metadata-tags.h gt-objc-objc-next-runtime-abi-01.h output.h \
objc/objc-runtime-shared-support.h $(TARGET_H)
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< \
$(OUTPUT_OPTION)
objcp/objc-next-runtime-abi-02.o: objc/objc-next-runtime-abi-02.c $(START_HDRS) \
$(GGC_H) objc/objc-runtime-hooks.h \
objc/objc-next-metadata-tags.h gt-objc-objc-next-runtime-abi-02.h $(TARGET_H) \
objc/objc-runtime-shared-support.h $(OBSTACK_H)
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< \
$(OUTPUT_OPTION)
# The following must be an explicit rule; please keep in sync with the implicit # The following must be an explicit rule; please keep in sync with the implicit
# one in Makefile.in. # one in Makefile.in.
objcp/objcp-act.o : objc/objc-act.c \ objcp/objcp-act.o : objc/objc-act.c $(START_HDRS) $(GGC_H) \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) $(TM_P_H) \ $(RTL_H) $(EXPR_H) $(TARGET_H) $(DIAGNOSTIC_H) toplev.h $(FLAGS_H) \
$(EXPR_H) $(TARGET_H) $(CXX_TREE_H) $(DIAGNOSTIC_H) toplev.h $(FLAGS_H) \ input.h $(FUNCTION_H) output.h debug.h $(OBSTACK_H) \
objc/objc-act.h input.h $(FUNCTION_H) output.h debug.h langhooks.h \
objcp/objcp-decl.h $(LANGHOOKS_DEF_H) $(HASHTAB_H) gt-objc-objc-act.h \ objcp/objcp-decl.h $(LANGHOOKS_DEF_H) $(HASHTAB_H) gt-objc-objc-act.h \
$(GIMPLE_H) c-family/c-objc.h $(GIMPLE_H) objc/objc-runtime-hooks.h objc/objc-runtime-shared-support.h
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< \ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< \
$(OUTPUT_OPTION) $(OUTPUT_OPTION)
......
# Top level configure fragment for GNU Objective-C++. # Top level configure fragment for GNU Objective-C++.
# Copyright (C) 2005, 2007, 2010 Free Software Foundation, Inc. # Copyright (C) 2005, 2007, 2010, 2011 Free Software Foundation, Inc.
# Contributed by Ziemowit Laski <zlaski@apple.com> # Contributed by Ziemowit Laski <zlaski@apple.com>
#This file is part of GCC. #This file is part of GCC.
...@@ -37,4 +37,4 @@ build_by_default="no" ...@@ -37,4 +37,4 @@ build_by_default="no"
lang_requires="objc c++" lang_requires="objc c++"
subdir_requires="objc cp" subdir_requires="objc cp"
gtfiles="\$(srcdir)/objcp/objcp-decl.c \$(srcdir)/objc/objc-act.c \$(srcdir)/objc/objc-act.h \$(srcdir)/cp/rtti.c \$(srcdir)/cp/mangle.c \$(srcdir)/cp/name-lookup.h \$(srcdir)/cp/name-lookup.c \$(srcdir)/cp/cp-tree.h \$(srcdir)/cp/decl.h \$(srcdir)/cp/call.c \$(srcdir)/cp/decl.c \$(srcdir)/cp/decl2.c \$(srcdir)/cp/pt.c \$(srcdir)/cp/repo.c \$(srcdir)/cp/semantics.c \$(srcdir)/cp/tree.c \$(srcdir)/cp/parser.c \$(srcdir)/cp/method.c \$(srcdir)/cp/typeck2.c \$(srcdir)/c-family/c-common.c \$(srcdir)/c-family/c-common.h \$(srcdir)/c-family/c-objc.h \$(srcdir)/c-family/c-lex.c \$(srcdir)/c-family/c-cppbuiltin.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/cp/cp-objcp-common.c" gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/objc/objc-act.c \$(srcdir)/objc/objc-runtime-shared-support.c \$(srcdir)/objc/objc-gnu-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-02.c \$(srcdir)/cp/call.c \$(srcdir)/cp/cp-tree.h \$(srcdir)/cp/decl.h \$(srcdir)/cp/decl.c \$(srcdir)/cp/decl2.c \$(srcdir)/cp/mangle.c \$(srcdir)/cp/method.c \$(srcdir)/cp/name-lookup.h \$(srcdir)/cp/name-lookup.c \$(srcdir)/cp/cp-objcp-common.c \$(srcdir)/cp/parser.c \$(srcdir)/cp/pt.c \$(srcdir)/cp/repo.c \$(srcdir)/cp/rtti.c \$(srcdir)/cp/semantics.c \$(srcdir)/cp/tree.c \$(srcdir)/cp/typeck2.c \$(srcdir)/c-family/c-common.c \$(srcdir)/c-family/c-common.h \$(srcdir)/c-family/c-objc.h \$(srcdir)/c-family/c-lex.c \$(srcdir)/c-family/c-cppbuiltin.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c "
/* Language-dependent hooks for Objective-C++. /* Language-dependent hooks for Objective-C++.
Copyright 2005, 2007, 2008, 2010 Free Software Foundation, Inc. Copyright 2005, 2007, 2008, 2010, 2011 Free Software Foundation, Inc.
Contributed by Ziemowit Laski <zlaski@apple.com> Contributed by Ziemowit Laski <zlaski@apple.com>
This file is part of GCC. This file is part of GCC.
...@@ -18,7 +18,6 @@ You should have received a copy of the GNU General Public License ...@@ -18,7 +18,6 @@ You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#include "coretypes.h" #include "coretypes.h"
...@@ -35,7 +34,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -35,7 +34,6 @@ along with GCC; see the file COPYING3. If not see
enum c_language_kind c_language = clk_objcxx; enum c_language_kind c_language = clk_objcxx;
static void objcxx_init_ts (void); static void objcxx_init_ts (void);
static tree objcxx_eh_personality (void);
/* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h; /* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h;
consequently, there should be very few hooks below. */ consequently, there should be very few hooks below. */
...@@ -48,10 +46,6 @@ static tree objcxx_eh_personality (void); ...@@ -48,10 +46,6 @@ static tree objcxx_eh_personality (void);
#define LANG_HOOKS_GIMPLIFY_EXPR objc_gimplify_expr #define LANG_HOOKS_GIMPLIFY_EXPR objc_gimplify_expr
#undef LANG_HOOKS_INIT_TS #undef LANG_HOOKS_INIT_TS
#define LANG_HOOKS_INIT_TS objcxx_init_ts #define LANG_HOOKS_INIT_TS objcxx_init_ts
#undef LANG_HOOKS_EH_PERSONALITY
#define LANG_HOOKS_EH_PERSONALITY objcxx_eh_personality
#undef LANG_HOOKS_EH_RUNTIME_TYPE
#define LANG_HOOKS_EH_RUNTIME_TYPE build_eh_type_type
/* Each front end provides its own lang hook initializer. */ /* Each front end provides its own lang hook initializer. */
struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
...@@ -145,14 +139,4 @@ objcxx_init_ts (void) ...@@ -145,14 +139,4 @@ objcxx_init_ts (void)
init_shadowed_var_for_decl (); init_shadowed_var_for_decl ();
} }
static GTY(()) tree objcp_eh_personality_decl;
static tree
objcxx_eh_personality (void)
{
if (!objcp_eh_personality_decl)
objcp_eh_personality_decl = build_personality_function ("gxx");
return objcp_eh_personality_decl;
}
#include "gtype-objcp.h" #include "gtype-objcp.h"
2011-02-17 Iain Sandoe <iains@gcc.gnu.org>
* objc.dg/special/unclaimed-category-1.h: Updated for
new ABI support.
* objc.dg/special/unclaimed-category-1.m: Same.
* objc.dg/zero-link-1.m: Same.
* objc.dg/lookup-1.m: Same.
* objc.dg/torture/strings/const-str-9.m
* objc.dg/torture/strings/const-str-10.m: Same.
* objc.dg/torture/strings/const-str-11.m: Same.
* objc.dg/torture/forward-1.m: Same.
* objc.dg/zero-link-2.m: Same.
* objc.dg/encode-7-next-64bit.m: Same.
* objc.dg/method-4.m: Same.
* objc.dg/next-runtime-1.m: Same.
* objc.dg/image-info.m: Same.
* objc.dg/pr23214.m: Same.
* objc.dg/symtab-1.m: Same.
* obj-c++.dg/basic.m: Same.m
* obj-c++.dg/proto-lossage-3.m: Same.m
* obj-c++.dg/torture/strings/const-str-10.m: Same.m
* obj-c++.dg/torture/strings/const-str-11.m: Same.m
* obj-c++.dg/torture/strings/const-str-9.m: Same.m
* obj-c++.dg/method-11.m: Same.m
* objc/execute/enumeration-1.m: Same.
* objc/execute/object_is_class.m: Same.
* objc/execute/formal_protocol-2.m: Same.
* objc/execute/formal_protocol-4.m: Same.
* objc/execute/formal_protocol-6.m: Same.
* objc/execute/bycopy-3.m: Same.
* objc/execute/exceptions/catchall-1.m: Same.
* objc/execute/exceptions/finally-1.m: Same.
* objc/execute/exceptions/local-variables-1.m: Same.
* objc/execute/exceptions/foward-1.m: Same.
* objc/execute/bf-common.h
* objc/execute/enumeration-2.m: Same.
* objc/execute/formal_protocol-1.m: Same.
* objc/execute/formal_protocol-3.m: Same.
* objc/execute/formal_protocol-5.m: Same.
* objc/execute/accessing_ivars.m: Same.
* objc/execute/bycopy-2.m: Same.
* objc/execute/formal_protocol-7.m: Same.
* objc/execute/compatibility_alias.m: Same.
* objc/execute/no_clash.m: Same.
* objc/execute/object_is_meta_class.m: Same.
* objc/execute/exceptions/exceptions.exp: Load target-supports.exp
* objc/execute/class-tests-1.h: Include stdio.h.
* objc/execute/class-tests-2.h: Same.
* obj-c++.dg/try-catch-9.mm: xfail-run the test with both
runtimes.
* obj-c++.dg/try-catch-2.mm: Same.
2011-02-17 Jakub Jelinek <jakub@redhat.com> 2011-02-17 Jakub Jelinek <jakub@redhat.com>
PR c++/47783 PR c++/47783
......
// A basic sanity check for Objective-C++. // A basic sanity check for Objective-C++.
// { dg-do run } // { dg-do run }
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h"
//#include "../objc-obj-c++-shared/Object1.h"
#include <iostream> #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 : Object
- (void) greet: (const char *)msg; - (void) greet: (const char *)msg;
@end @end
@implementation Greeter @implementation Greeter
- (void) greet: (const char *)msg { std::cout << msg; } - (void) greet: (const char *)msg
{ std::cout << msg << __VERSION__ << std::endl;}
@end @end
int int
main () main ()
{ {
std::cout << "Hello from C++\n"; std::cout << "Hello from C++" << __VERSION__ << std::endl;
Greeter *obj = [Greeter new]; Greeter *obj = [Greeter new];
[obj greet: "Hello from Objective-C\n"]; [obj greet: "Hello from Objective-C++"];
} }
#include "../objc-obj-c++-shared/Object1-implementation.h" //#include "../objc-obj-c++-shared/Object1-implementation.h"
...@@ -22,5 +22,8 @@ void foo(void) { ...@@ -22,5 +22,8 @@ void foo(void) {
obj = [ObjectAlias2 new]; obj = [ObjectAlias2 new];
} }
/* { dg-final { scan-assembler "_OBJC_CLASS_REFERENCES_0" } } */ /* { dg-final { scan-assembler "_OBJC_ClassRefs_0" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler-not "_OBJC_CLASS_REFERENCES_1" } } */ /* { dg-final { scan-assembler "_OBJC_ClassRef_Object" { 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 } } } } } */
...@@ -19,9 +19,16 @@ ...@@ -19,9 +19,16 @@
int int
main() 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) descriptionForInstanceMethod: @selector(name)];
[@protocol(NoInstanceMethods) descriptionForClassMethod: @selector(name)]; [@protocol(NoInstanceMethods) descriptionForClassMethod: @selector(name)];
[@protocol(NoClassMethods) descriptionForInstanceMethod: @selector(name)]; [@protocol(NoClassMethods) descriptionForInstanceMethod: @selector(name)];
[@protocol(NoClassMethods) descriptionForClassMethod: @selector(name)]; [@protocol(NoClassMethods) descriptionForClassMethod: @selector(name)];
#endif
return 0; return 0;
} }
...@@ -29,6 +29,7 @@ extern struct objc_class _NSConstantStringClassReference; ...@@ -29,6 +29,7 @@ extern struct objc_class _NSConstantStringClassReference;
const NSConstantString *appKey = @"MyApp"; const NSConstantString *appKey = @"MyApp";
/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space 4\n\t.data" { target { *-*-darwin* && { lp64 } } } } } */ /* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._NSConstantString\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */
...@@ -29,6 +29,7 @@ extern struct objc_class _XStrClassReference; ...@@ -29,6 +29,7 @@ extern struct objc_class _XStrClassReference;
const XStr *appKey = @"MyApp"; const XStr *appKey = @"MyApp";
/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ /* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler ".quad\t__XStrClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space 4\n\t.data" { target { *-*-darwin* && { lp64 } } } } } */ /* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._XStr\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */
...@@ -21,6 +21,7 @@ extern struct objc_class _NSConstantStringClassReference; ...@@ -21,6 +21,7 @@ extern struct objc_class _NSConstantStringClassReference;
const NSConstantString *appKey = @"MyApp"; const NSConstantString *appKey = @"MyApp";
/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } }} } */ /* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space 4\n\t.data" { target { *-*-darwin* && { lp64 } } } } } */ /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._NSConstantString\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
/* Developed by Ziemowit Laski <zlaski@apple.com>. */ /* Developed by Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do run } */ /* { dg-do run } */
/* { dg-xfail-if "PR23616" { *-*-* } { "-fgnu-runtime" } { "-fnext-runtime" } } */ /* { 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" } */ /* { dg-options "-fobjc-exceptions" } */
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
/* Developed by Ziemowit Laski <zlaski@apple.com>. */ /* Developed by Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do run } */ /* { dg-do run } */
/* { dg-xfail-if "PR23616" { *-*-* } { "-fgnu-runtime" } { "-fnext-runtime" } } */ /* { 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-prune-output ".*internal compiler error.*" } */ /* { dg-prune-output ".*internal compiler error.*" } */
/* { dg-options "-fobjc-exceptions -O2" } */ /* { dg-options "-fobjc-exceptions -O2" } */
......
...@@ -2,16 +2,15 @@ ...@@ -2,16 +2,15 @@
/* { dg-do run { target *-*-darwin* } } */ /* { dg-do run { target *-*-darwin* } } */
/* { dg-require-effective-target lp64 } */ /* { dg-require-effective-target lp64 } */
/* { dg-options "-Wno-deprecated-declarations" } */
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
#include "../objc-obj-c++-shared/Object1.h"
#include "../objc-obj-c++-shared/next-mapping.h"
#include <stdbool.h> #include <stdbool.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <objc/Object.h>
#include "../objc-obj-c++-shared/next-mapping.h"
#define CHECK_IF(E) if (!(E)) abort () #define CHECK_IF(E) if (!(E)) abort ()
@class NSDictionary, NSFont, NSError, _NSATSTypesetterGuts, NSString, NSMenu, NSArray; @class NSDictionary, NSFont, NSError, _NSATSTypesetterGuts, NSString, NSMenu, NSArray;
...@@ -195,69 +194,70 @@ NSRange globalRange; ...@@ -195,69 +194,70 @@ NSRange globalRange;
int main(void) { int main(void) {
Class fooClass = objc_getClass ("Foo"); Class fooClass = objc_getClass ("Foo");
Method meth; Method meth;
struct objc_ivar_list *ivars; Ivar *ivars;
struct objc_ivar *ivar; unsigned int ivar_count;
Ivar ivar;
meth = class_getInstanceMethod (fooClass, @selector(_errorWithOSStatus:ref1:ref2:reading:)); meth = class_getInstanceMethod (fooClass, @selector(_errorWithOSStatus:ref1:ref2:reading:));
CHECK_IF (!strcmp (meth->method_types, "@44@0:8q16r^{FSRef=[80C]}24r^{FSRef=[80C]}32c40")); CHECK_IF (!strcmp (method_getTypeEncoding(meth), "@44@0:8q16r^{FSRef=[80C]}24r^{FSRef=[80C]}32c40"));
meth = class_getInstanceMethod (fooClass, @selector(_attributeRunForCharacterAtIndex:)); meth = class_getInstanceMethod (fooClass, @selector(_attributeRunForCharacterAtIndex:));
CHECK_IF (!strcmp (meth->method_types, "r^{?=@@QQ^Qffff{_NSRect={_NSPoint=ff}{_NSSize=ff}}q^qQ^Q@@@:::****{?=b1b1b1b1b1b27}}24@0:8Q16")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "r^{?=@@QQ^Qffff{_NSRect={_NSPoint=ff}{_NSSize=ff}}q^qQ^Q@@@:::****{?=b1b1b1b1b1b27}}24@0:8Q16"));
meth = class_getInstanceMethod (fooClass, @selector(_getATSTypesetterGuts:)); meth = class_getInstanceMethod (fooClass, @selector(_getATSTypesetterGuts:));
CHECK_IF (!strcmp (meth->method_types, "r@24@0:8r:16")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "r@24@0:8r:16"));
meth = class_getInstanceMethod (fooClass, @selector(resumeWithSuspensionID:and:)); meth = class_getInstanceMethod (fooClass, @selector(resumeWithSuspensionID:and:));
CHECK_IF (!strcmp (meth->method_types, "v32@0:8^{__NSAppleEventManagerSuspension=}16r^Q24")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "v32@0:8^{__NSAppleEventManagerSuspension=}16r^Q24"));
meth = class_getInstanceMethod (fooClass, @selector(anotherMeth:and:and:)); meth = class_getInstanceMethod (fooClass, @selector(anotherMeth:and:and:));
CHECK_IF (!strcmp (meth->method_types, "r@40@0:8r:16r@24r@32")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "r@40@0:8r:16r@24r@32"));
meth = class_getInstanceMethod (fooClass, @selector(str1:str2:str3:str4:)); meth = class_getInstanceMethod (fooClass, @selector(str1:str2:str3:str4:));
CHECK_IF (!strcmp (meth->method_types, "@48@0:8r*16*24*32r*40")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "@48@0:8r*16*24*32r*40"));
meth = class_getInstanceMethod (fooClass, @selector(foo1:foo2:foo3:foo4:)); meth = class_getInstanceMethod (fooClass, @selector(foo1:foo2:foo3:foo4:));
CHECK_IF (!strcmp (meth->method_types, "Vv48@0:8@16r@24@32r@40")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "Vv48@0:8@16r@24@32r@40"));
meth = class_getInstanceMethod (fooClass, @selector(sel1:id1:)); meth = class_getInstanceMethod (fooClass, @selector(sel1:id1:));
CHECK_IF (!strcmp (meth->method_types, "rn*32@0:8r:16r@24")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "rn*32@0:8r:16r@24"));
meth = class_getInstanceMethod (fooClass, @selector(obj1:obj2:obj3:)); meth = class_getInstanceMethod (fooClass, @selector(obj1:obj2:obj3:));
CHECK_IF (!strcmp (meth->method_types, "N@40@0:8r@16@24^{Object=#}32")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "N@40@0:8r@16@24^{Object=#}32"));
meth = class_getClassMethod (fooClass, @selector(_defaultScriptingComponent)); meth = class_getClassMethod (fooClass, @selector(_defaultScriptingComponent));
CHECK_IF (!strcmp (meth->method_types, "^{ComponentInstanceRecord=[1q]}16@0:8")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "^{ComponentInstanceRecord=[1q]}16@0:8"));
meth = class_getInstanceMethod (fooClass, @selector(_formatCocoaErrorString:parameters:applicableFormatters:count:)); meth = class_getInstanceMethod (fooClass, @selector(_formatCocoaErrorString:parameters:applicableFormatters:count:));
CHECK_IF (!strcmp (meth->method_types, "@44@0:8@16r*24^^{?}32i40")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "@44@0:8@16r*24^^{?}32i40"));
meth = class_getInstanceMethod (fooClass, @selector(formatter_func:run:)); meth = class_getInstanceMethod (fooClass, @selector(formatter_func:run:));
CHECK_IF (!strcmp (meth->method_types, "^{?=^?@I}32@0:8@16r^^{?}24")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "^{?=^?@I}32@0:8@16r^^{?}24"));
meth = class_getInstanceMethod (fooClass, @selector(_forgetWord:inDictionary:)); meth = class_getInstanceMethod (fooClass, @selector(_forgetWord:inDictionary:));
CHECK_IF (!strcmp (meth->method_types, "c32@0:8nO@16nO@24")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "c32@0:8nO@16nO@24"));
meth = class_getInstanceMethod (fooClass, @selector(_registerServicesMenu:withSendTypes:andReturnTypes:addToList:)); meth = class_getInstanceMethod (fooClass, @selector(_registerServicesMenu:withSendTypes:andReturnTypes:addToList:));
CHECK_IF (!strcmp (meth->method_types, "v44@0:8@16r^*24r^*32c40")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "v44@0:8@16r^*24r^*32c40"));
meth = class_getClassMethod (fooClass, @selector(_proxySharePointer)); meth = class_getClassMethod (fooClass, @selector(_proxySharePointer));
CHECK_IF (!strcmp (meth->method_types, "^^{__CFSet}16@0:8")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "^^{__CFSet}16@0:8"));
meth = class_getInstanceMethod (fooClass, @selector(_checkGrammarInString:language:details:)); meth = class_getInstanceMethod (fooClass, @selector(_checkGrammarInString:language:details:));
CHECK_IF (!strcmp (meth->method_types, "{_NSRange=II}40@0:8n@16nO@24oO^@32")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "{_NSRange=II}40@0:8n@16nO@24oO^@32"));
meth = class_getInstanceMethod (fooClass, @selector(_resolvePositionalStakeGlyphsForLineFragment:lineFragmentRect:minPosition:maxPosition:maxLineFragmentWidth:breakHint:)); meth = class_getInstanceMethod (fooClass, @selector(_resolvePositionalStakeGlyphsForLineFragment:lineFragmentRect:minPosition:maxPosition:maxLineFragmentWidth:breakHint:));
CHECK_IF (!strcmp (meth->method_types, "B60@0:8^{__CTLine=}16{_NSRect={_NSPoint=ff}{_NSSize=ff}}24f40f44f48^Q52")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "B60@0:8^{__CTLine=}16{_NSRect={_NSPoint=ff}{_NSSize=ff}}24f40f44f48^Q52"));
meth = class_getClassMethod (fooClass, @selector(findVoiceByIdentifier:returningCreator:returningID:)); meth = class_getClassMethod (fooClass, @selector(findVoiceByIdentifier:returningCreator:returningID:));
CHECK_IF (!strcmp (meth->method_types, "c40@0:8@16^I24^I32")); CHECK_IF (!strcmp (method_getTypeEncoding (meth), "c40@0:8@16^I24^I32"));
ivars = fooClass->ivars; ivars = class_copyIvarList (fooClass, &ivar_count);
CHECK_IF (ivars->ivar_count == 1); CHECK_IF (ivar_count == 1);
ivar = ivars->ivar_list; ivar = ivars[0];
CHECK_IF (!strcmp (ivar->ivar_name, "r")); CHECK_IF (!strcmp (ivar_getName(ivar), "r"));
CHECK_IF (!strcmp (ivar->ivar_type, CHECK_IF (!strcmp (ivar_getTypeEncoding(ivar),
"{?=\"_attributes\"@\"NSDictionary\"\"_font\"@\"NSFont\"\"_characterLength\"" "{?=\"_attributes\"@\"NSDictionary\"\"_font\"@\"NSFont\"\"_characterLength\""
"Q\"_nominalGlyphLocation\"Q\"p\"^Q\"_defaultLineHeight\"f\"_defaultBaselineOffset\"" "Q\"_nominalGlyphLocation\"Q\"p\"^Q\"_defaultLineHeight\"f\"_defaultBaselineOffset\""
"f\"_horizExpansion\"f\"_baselineDelta\"f\"_attachmentBBox\"{_NSRect=\"origin\"" "f\"_horizExpansion\"f\"_baselineDelta\"f\"_attachmentBBox\"{_NSRect=\"origin\""
......
...@@ -7,13 +7,19 @@ ...@@ -7,13 +7,19 @@
/* { dg-skip-if "NeXT-only" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-skip-if "NeXT-only" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-freplace-objc-classes" } */ /* { dg-options "-freplace-objc-classes" } */
#include "../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h> #include <objc/objc.h>
#include <objc/Object.h>
extern void abort(void); extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort(); #define CHECK_IF(expr) if(!(expr)) abort();
@interface Object (TEST_SUITE_C1)
- - init;
@end
@implementation Object (TEST_SUITE_C1)
- - init {return self;}
@end
@interface Base: Object { @interface Base: Object {
@public @public
int a; int a;
...@@ -33,4 +39,5 @@ extern void abort(void); ...@@ -33,4 +39,5 @@ extern void abort(void);
} }
@end @end
/* { dg-final { scan-assembler "\t.section __OBJC, __image_info.*\n\t.align.*\nL_OBJC_IMAGE_INFO.*:\n\t.long\t0\n\t.long\t1" } } */ /* { dg-final { scan-assembler "\t.section __OBJC, __image_info.*\n\t.align.*\nL_OBJC_ImageInfo.*:\n\t.long\t0\n\t.long\t1" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler "\t.section __DATA, __objc_imageinfo.*\n\t.align.*\nL_OBJC_ImageInfo.*:\n\t.long\t0\n\t.long\t17" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-do run } */ /* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
#include <stdlib.h> #include <stdlib.h>
#include "../objc-obj-c++-shared/Object1.h" #include "../objc-obj-c++-shared/Object1.h"
...@@ -53,5 +54,3 @@ int main(void) { ...@@ -53,5 +54,3 @@ int main(void) {
return 0; return 0;
} }
#include "../objc-obj-c++-shared/Object1-implementation.h"
...@@ -22,5 +22,5 @@ void foo(void) { ...@@ -22,5 +22,5 @@ void foo(void) {
obj = [ObjectAlias2 new]; obj = [ObjectAlias2 new];
} }
/* { dg-final { scan-assembler "_OBJC_CLASS_REFERENCES_0" } } */ /* { dg-final { scan-assembler "_OBJC_ClassRefs_0" } } */
/* { dg-final { scan-assembler-not "_OBJC_CLASS_REFERENCES_1" } } */ /* { dg-final { scan-assembler-not "_OBJC_ClassRefs_1" } } */
/* Test that the correct version number (6) is set in the module descriptor /* Test that the correct version number (6) is set in the module descriptor
when compiling for the NeXT runtime. */ when compiling for the NeXT runtime ABI=0 - and that the MODULE descriptor
/* Author: Ziemowit Laski <zlaski@apple.com> */ is not emitted at all for ABI 2. */
/* modified from a testcase added by: Ziemowit Laski <zlaski@apple.com> */
/* { dg-do compile { target *-*-darwin* } } */ /* { dg-do compile { target *-*-darwin* } } */
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-skip-if "" { *-*-* } { "-fobjc-abi-version=1" } { "" } } */
/* { dg-options "-fobjc-abi-version=0" { target { *-*-darwin* && { ! lp64 } } } } */
#include "../objc-obj-c++-shared/Object1.h" @interface FooBar
@interface FooBar: Object
- (void)boo; - (void)boo;
@end @end
...@@ -15,5 +16,5 @@ ...@@ -15,5 +16,5 @@
- (void)boo { } - (void)boo { }
@end @end
/* { dg-final { scan-assembler "L_OBJC_MODULES:\n\[ \t\]*\.long\t6\n" { target { *-*-darwin* && { ! lp64 } } } } } */ /* { dg-final { scan-assembler "L_OBJC_Module:\n\[ \t\]*\.long\t6\n" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler "L_OBJC_MODULES:\n\[ \t\]*\.quad\t6\n" { target { *-*-darwin* && { lp64 } } } } } */ /* { dg-final { scan-assembler-not "L_OBJC_Module" { target { *-*-darwin* && { lp64 } } } } } */
...@@ -3,10 +3,19 @@ ...@@ -3,10 +3,19 @@
/* { dg-do run } */ /* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
#import "../objc-obj-c++-shared/Object1.h" #include <objc/Protocol.h>
#import "../objc-obj-c++-shared/Protocol1.h"
#ifdef __OBJC2__
/* The ObjC V2 "Object" does not provide -class. */
@interface Object (TS_CAT)
- - class;
@end
@implementation Object (TS_CAT)
- - class { return isa; }
@end
#endif
@protocol A @protocol A
@end @end
......
...@@ -5,7 +5,11 @@ ...@@ -5,7 +5,11 @@
@interface TestClass @interface TestClass
{ {
#ifdef __OBJC2__
Class isa;
#else
id isa; id isa;
#endif
} }
- (int)D; - (int)D;
@end @end
......
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
/* { dg-do run } */ /* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#import "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h> #include <objc/objc.h>
#ifndef __NEXT_RUNTIME__ #ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h> #include <objc/objc-api.h>
#endif #endif
#include "../../objc-obj-c++-shared/next-mapping.h"
extern void abort (void); extern void abort (void);
...@@ -73,5 +73,3 @@ int main (void) ...@@ -73,5 +73,3 @@ int main (void)
return 0; return 0;
} }
#import "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
/* { dg-do compile { target { *-*-darwin* } } } */ /* { dg-do compile { target { *-*-darwin* } } } */
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
#include "../objc-obj-c++-shared/Object1.h" #include <objc/Object.h>
@interface Base: Object @interface Base: Object
- (void)setValues; - (void)setValues;
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
-(void)checkValues { } -(void)checkValues { }
@end @end
/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.long\t0\n\t.long\t0\n\t.word\t2\n\t.word\t0\n\t.long\tL_OBJC_CLASS_Derived.*\n\t.long\tL_OBJC_CLASS_Base.*\n" { target { *86*-*-darwin* && { ! lp64 } } } } } */ /* { dg-final { scan-assembler "L_OBJC_Symbols.*:\n\t.long\t0\n\t.long\t0\n\t.word\t2\n\t.word\t0\n\t.long\tL_OBJC_Class_Derived.*\n\t.long\tL_OBJC_Class_Base.*\n" { target { *86*-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.long\t0\n\t.long\t0\n\t.short\t2\n\t.short\t0\n\t.long\tL_OBJC_CLASS_Derived.*\n\t.long\tL_OBJC_CLASS_Base.*\n" { target { powerpc*-*-darwin* && { ! lp64 } } } } } */ /* { dg-final { scan-assembler "L_OBJC_Symbols.*:\n\t.long\t0\n\t.long\t0\n\t.short\t2\n\t.short\t0\n\t.long\tL_OBJC_Class_Derived.*\n\t.long\tL_OBJC_Class_Base.*\n" { target { powerpc*-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.quad\t0\n\t.quad\t0\n\t.word\t2\n\t.word\t0\n\t.space 4\n\t.quad\tL_OBJC_CLASS_Derived.*\n\t.quad\tL_OBJC_CLASS_Base.*\n" { target { *86*-*-darwin* && { lp64 } } } } } */ /* { dg-final { scan-assembler-not "L_OBJC_Symbols" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.quad\t0\n\t.quad\t0\n\t.short\t2\n\t.short\t0\n\t.space 4\n\t.quad\tL_OBJC_CLASS_Derived.*\n\t.quad\tL_OBJC_CLASS_Base.*\n" { target { powerpc*-*-darwin* && { lp64 } } } } } */
/* { dg-do run } */ /* { dg-do run } */
/* See if -forward::/-performv:: is able to work. */ /* See if -forward::/-performv:: is able to work. */
/* { dg-xfail-run-if "PR36610" { ! { { i?86-*-* x86_64-*-* } && ilp32 } } { "-fgnu-runtime" } { "" } } */ /* { dg-xfail-run-if "PR36610" { ! { { i?86-*-* x86_64-*-* } && ilp32 } } { "-fgnu-runtime" } { "" } } */
/* { dg-skip-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* { dg-skip-if "Needs OBJC2 Implementation" { *-*-darwin* && { lp64 } } { "-fnext-runtime" } { "" } } */
/* There is no implementation of forward: in the NeXT m64 libobjc/Object
neither have we implemented this in our extensions - so we have to skip it
for now. */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h" #ifndef __NEXT_RUNTIME__
#import "../../objc-obj-c++-shared/next-mapping.h" # include <objc/objc-api.h>
#include <objc/objc-api.h> #endif
#include <objc/Object.h>
#define VALUETOUSE 1234567890 #define VALUETOUSE 1234567890
......
...@@ -29,6 +29,7 @@ extern Class _NSConstantStringClassReference; ...@@ -29,6 +29,7 @@ extern Class _NSConstantStringClassReference;
const NSConstantString *appKey = @"MyApp"; const NSConstantString *appKey = @"MyApp";
/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */ /* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._NSConstantString\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */
...@@ -29,6 +29,7 @@ extern Class _XStrClassReference; ...@@ -29,6 +29,7 @@ extern Class _XStrClassReference;
const XStr *appKey = @"MyApp"; const XStr *appKey = @"MyApp";
/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ /* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".quad\t__XStrClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */ /* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._XStr\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */
...@@ -21,6 +21,7 @@ Class _NSConstantStringClassReference; ...@@ -21,6 +21,7 @@ Class _NSConstantStringClassReference;
const NSConstantString *appKey = @"MyApp"; const NSConstantString *appKey = @"MyApp";
/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */ /* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._NSConstantString\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */
...@@ -25,6 +25,7 @@ int main(void) { ...@@ -25,6 +25,7 @@ int main(void) {
return 0; return 0;
} }
/* { dg-final { scan-assembler-not "_OBJC_CLASS_REFERENCES_0" } } */ /* { dg-final { scan-assembler-not "_OBJC_ClassRefs_0" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler-not "_OBJC_ClassRef_Base" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler "objc_getClass" } } */ /* { dg-final { scan-assembler "objc_getClass" } } */
...@@ -5,8 +5,7 @@ ...@@ -5,8 +5,7 @@
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-fno-zero-link" } */ /* { dg-options "-fno-zero-link" } */
#include "../objc-obj-c++-shared/Object1.h" #include <objc/Object.h>
#include <objc/objc.h>
extern void abort(void); extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort(); #define CHECK_IF(expr) if(!(expr)) abort();
...@@ -25,5 +24,6 @@ int main(void) { ...@@ -25,5 +24,6 @@ int main(void) {
return 0; return 0;
} }
/* { dg-final { scan-assembler "_OBJC_CLASS_REFERENCES_0" } } */ /* { dg-final { scan-assembler "_OBJC_ClassRefs_0" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler "_OBJC_ClassRef_Base" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler-not "objc_getClass" } } */ /* { dg-final { scan-assembler-not "objc_getClass" } } */
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */ /* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#include <stdlib.h> #include <stdlib.h>
#import "../../objc-obj-c++-shared/Object1.h" #ifndef __NEXT_RUNTIME__
#include <objc/objc-api.h> #include <objc/objc-api.h>
#endif
#include "../../objc-obj-c++-shared/Object1.h"
/* Test that by using -> we can access ivars of other objects of the same /* Test that by using -> we can access ivars of other objects of the same
class */ class */
...@@ -53,3 +55,4 @@ int main (void) ...@@ -53,3 +55,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#define objc_get_class(C) objc_getClass(C) #define objc_get_class(C) objc_getClass(C)
#endif #endif
#ifndef __OBJC2__
void print_ivars (Class class) void print_ivars (Class class)
{ {
struct objc_ivar_list* ivars = class->ivars; struct objc_ivar_list* ivars = class->ivars;
...@@ -61,9 +62,11 @@ void compare_structures (Class class, const char* type) ...@@ -61,9 +62,11 @@ void compare_structures (Class class, const char* type)
printf ("%d ivars checked\n", i); printf ("%d ivars checked\n", i);
} }
#endif
int main () int main ()
{ {
#ifndef __OBJC2__
struct class_vars struct class_vars
{ {
@defs (MyObject); @defs (MyObject);
...@@ -80,8 +83,10 @@ int main () ...@@ -80,8 +83,10 @@ int main ()
printf ("sizes don't match (computed %d, exact %d)\n", size1, size2); printf ("sizes don't match (computed %d, exact %d)\n", size1, size2);
abort (); abort ();
} }
#endif
exit (0); exit (0);
} }
#ifndef __OBJC2__
#include "../../objc-obj-c++-shared/objc-test-suite-next-encode-assist-impl.h" #include "../../objc-obj-c++-shared/objc-test-suite-next-encode-assist-impl.h"
#endif
...@@ -27,5 +27,4 @@ int main (void) ...@@ -27,5 +27,4 @@ int main (void)
exit (0); exit (0);
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -24,6 +24,12 @@ extern int printf (const char *, ...); ...@@ -24,6 +24,12 @@ extern int printf (const char *, ...);
/* This no-op class to keep it compile under broken gcc 3.x */ /* This no-op class to keep it compile under broken gcc 3.x */
@interface MyObject : Object <MyProtocol> @interface MyObject : Object <MyProtocol>
#ifdef __OBJC2__
+ (id) initialize;
+ (id) alloc;
+ + new;
- - init;
#endif
@end @end
@implementation MyObject @implementation MyObject
...@@ -31,6 +37,12 @@ extern int printf (const char *, ...); ...@@ -31,6 +37,12 @@ extern int printf (const char *, ...);
{ {
return [MyObject alloc]; return [MyObject alloc];
} }
#ifdef __OBJC2__
+ initialize {return self;}
+ alloc { return class_createInstance (self, 0);}
+ new { return [[self alloc] init]; }
- init {return self;}
#endif
@end @end
/* The following header, together with the implementation included below, /* The following header, together with the implementation included below,
......
/* Contributed by Nicola Pero on Tue Mar 6 23:05:53 CET 2001 */ /* Contributed by Nicola Pero on Tue Mar 6 23:05:53 CET 2001 */
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "../../objc-obj-c++-shared/Object1.h" #include "../../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h> #include <objc/objc.h>
......
/* Contributed by Nicola Pero on Tue Mar 6 23:05:53 CET 2001 */ /* Contributed by Nicola Pero on Tue Mar 6 23:05:53 CET 2001 */
#include <objc/objc.h> #include <objc/objc.h>
#include <objc/objc-api.h> #include <objc/objc-api.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
/* /*
......
...@@ -10,3 +10,4 @@ int main (void) ...@@ -10,3 +10,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -48,3 +48,4 @@ int main (void) ...@@ -48,3 +48,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -50,3 +50,4 @@ int main (void) ...@@ -50,3 +50,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -74,3 +74,4 @@ int main (void) { ...@@ -74,3 +74,4 @@ int main (void) {
test((Object *)-1); test((Object *)-1);
return 0; return 0;
} }
#import "../../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -28,6 +28,7 @@ lappend additional_flags "-fobjc-exceptions" ...@@ -28,6 +28,7 @@ lappend additional_flags "-fobjc-exceptions"
# load support procs # load support procs
load_lib objc-torture.exp load_lib objc-torture.exp
load_lib torture-options.exp load_lib torture-options.exp
load_lib target-supports.exp
torture-init torture-init
objc-set-runtime-options "execute" "additional_flags=-fobjc-exceptions" objc-set-runtime-options "execute" "additional_flags=-fobjc-exceptions"
......
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
//#import "../../../objc-obj-c++-shared/Object1.h"
#ifdef __OBJC2__
#include <objc/runtime.h>
@interface Object
+ + initialize;
+ + new;
- - free;
@end
@implementation Object
+ + initialize { return self; }
+ new { return class_createInstance (self, 0); }
- free { return object_dispose(self);}
@end
#else
#import "../../../objc-obj-c++-shared/Object1.h" #import "../../../objc-obj-c++-shared/Object1.h"
#endif
static int made_try = 0; static int made_try = 0;
...@@ -57,3 +73,4 @@ main(int ac, char *av[]) ...@@ -57,3 +73,4 @@ main(int ac, char *av[])
abort (); abort ();
return 0; return 0;
} }
//#import "../../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -2,12 +2,33 @@ ...@@ -2,12 +2,33 @@
/* Developed by Marcin Koziej <creep@desk.pl>. */ /* Developed by Marcin Koziej <creep@desk.pl>. */
#include <stdlib.h> #include <stdlib.h>
#import "../../../objc-obj-c++-shared/Object1.h" #include <objc/Object.h>
#ifndef __NEXT_RUNTIME__
#import <objc/objc-api.h> #import <objc/objc-api.h>
#endif
#ifdef __OBJC2__
@interface Object (TEST_SUITE_ADDITIONS)
+ + initialize;
+ + alloc;
+ + new;
- - init;
- - free;
@end
@implementation Object (TEST_SUITE_ADDITIONS)
+ + initialize { return self; }
+ alloc { return class_createInstance (self, 0); }
+ new { return [[self alloc] init]; }
- init { return self; }
- free { return object_dispose(self); }
@end
#endif
static int i; static int i;
@interface Thrower : Object __attribute__((objc_exception))
@interface Thrower : Object
- - forward: (SEL) s : (void*) a; - - forward: (SEL) s : (void*) a;
@end @end
...@@ -16,8 +37,10 @@ static int i; ...@@ -16,8 +37,10 @@ static int i;
{ {
i++; i++;
@throw [Object new]; @throw [Object new];
return nil;
} }
@end @end
int int
main() main()
{ {
......
...@@ -60,3 +60,4 @@ int main(void) { ...@@ -60,3 +60,4 @@ int main(void) {
foo(15, &gf1); foo(15, &gf1);
return 0; return 0;
} }
#import "../../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -42,4 +42,4 @@ int main (void) ...@@ -42,4 +42,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -43,4 +43,4 @@ int main (void) ...@@ -43,4 +43,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -56,4 +56,4 @@ int main (void) ...@@ -56,4 +56,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -38,4 +38,4 @@ int main (void) ...@@ -38,4 +38,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */ /* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h> #include <stdlib.h>
#include "../../objc-obj-c++-shared/Protocol1.h" #include <objc/Protocol.h>
#include "../../objc-obj-c++-shared/next-mapping.h"
/* Test defining a protocol, and accessing it using @protocol */ /* Test defining a protocol, and accessing it using @protocol */
...@@ -35,4 +36,3 @@ int main (void) ...@@ -35,4 +36,3 @@ int main (void)
return 0; return 0;
} }
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */ /* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h> #include <stdlib.h>
#include "../../objc-obj-c++-shared/Protocol1.h" #include <objc/Protocol.h>
#include "../../objc-obj-c++-shared/next-mapping.h"
/* Test defining a protocol, and accessing it using @protocol */ /* Test defining a protocol, and accessing it using @protocol */
......
...@@ -41,4 +41,4 @@ int main (void) ...@@ -41,4 +41,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
...@@ -39,3 +39,4 @@ int main (void) ...@@ -39,3 +39,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Tue Jul 3 10:55:21 BST 2001 */ /* Contributed by Nicola Pero - Tue Jul 3 10:55:21 BST 2001 */
#import "../../objc-obj-c++-shared/next-mapping.h" #ifdef __NEXT_RUNTIME__
#import "../../objc-obj-c++-shared/Object1.h" # include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h> #else
#include <objc/objc-api.h> # include <objc/objc-api.h>
#endif
#include "../../objc-obj-c++-shared/Object1.h"
/* This test demonstrate a failure in object_is_class which was fixed */ /* This test demonstrate a failure in object_is_class which was fixed */
...@@ -41,3 +43,4 @@ int main (void) ...@@ -41,3 +43,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Tue Jul 3 10:55:21 BST 2001 */ /* Contributed by Nicola Pero - Tue Jul 3 10:55:21 BST 2001 */
#import "../../objc-obj-c++-shared/Object1.h" #ifdef __NEXT_RUNTIME__
#import "../../objc-obj-c++-shared/next-mapping.h" # include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc-api.h> #else
# include <objc/objc-api.h>
#endif
#include "../../objc-obj-c++-shared/Object1.h"
/* This test demonstrate a failure in object_is_meta_class which was fixed */ /* This test demonstrate a failure in object_is_meta_class which was fixed */
...@@ -38,4 +41,4 @@ int main (void) ...@@ -38,4 +41,4 @@ int main (void)
return 0; return 0;
} }
#include "../../objc-obj-c++-shared/Object1-implementation.h"
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