From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/objcp/ChangeLog | 406 +++++++++++++++++++++++++++++++++++++++++++++++ gcc/objcp/Make-lang.in | 185 +++++++++++++++++++++ gcc/objcp/config-lang.in | 41 +++++ gcc/objcp/lang-specs.h | 61 +++++++ gcc/objcp/objcp-decl.c | 145 +++++++++++++++++ gcc/objcp/objcp-decl.h | 89 +++++++++++ gcc/objcp/objcp-lang.c | 142 +++++++++++++++++ 7 files changed, 1069 insertions(+) create mode 100644 gcc/objcp/ChangeLog create mode 100644 gcc/objcp/Make-lang.in create mode 100644 gcc/objcp/config-lang.in create mode 100644 gcc/objcp/lang-specs.h create mode 100644 gcc/objcp/objcp-decl.c create mode 100644 gcc/objcp/objcp-decl.h create mode 100644 gcc/objcp/objcp-lang.c (limited to 'gcc/objcp') diff --git a/gcc/objcp/ChangeLog b/gcc/objcp/ChangeLog new file mode 100644 index 000000000..a78a300f6 --- /dev/null +++ b/gcc/objcp/ChangeLog @@ -0,0 +1,406 @@ +2013-04-12 Release Manager + + * GCC 4.6.4 released. + +2012-03-01 Release Manager + + * GCC 4.6.3 released. + +2011-10-26 Release Manager + + * GCC 4.6.2 released. + +2011-06-27 Release Manager + + * GCC 4.6.1 released. + +2011-03-25 Release Manager + + * GCC 4.6.0 released. + +2011-03-06 Joseph Myers + + * lang-specs.h: Match -save-temps* instead of -save-temps. + +2011-02-20 Nicola Pero + + PR objc++/47711 + * config-lang.in (gtfiles): Updated list. + +2011-02-17 Iain Sandoe + + * 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 + + * Make-lang.in (obj-c++.tags): Don't include *.y. + +2010-12-29 Nicola Pero + + * objcp-lang.c (objcp_tsubst_copy_and_build): Update call to + objc_finish_message_expr. + +2010-12-26 Nicola Pero + + * config-lang.in (gtfiles): Added c-family/c-cppbuiltin.c. + +2010-12-06 Nicola Pero + + * config-lang.in (gtfiles): Added c-family/c-objc.h. + * Make-lang.in (objcp/objcp-act.o): Depend on + c-family/c-objc.h. + (objcp/objcp-lang.o): Same change. + (objcp/objcp-decl.o): Same change. + * objcp-lang.c: Include c-family/c-objc.h. + * objcp-decl.c: Same change. + +2010-11-23 Nicola Pero + + PR objc/24358 + * lang-specs.h: Print a deprecation note every time + objc++-cpp-output is requested. + +2010-10-24 Nicola Pero + + * objcp-lang.c (LANG_HOOKS_DECL_PRINTABLE_NAME): Do not define. + +2010-10-20 Nicola Pero + + * objcp-lang.c (finish_file): Removed. + +2010-10-14 Iain Sandoe + + merge from FSF apple 'trunk' branch. + 2006 Fariborz Jahanian + + Radars 4436866, 4505126, 4506903, 4517826 + * objcp-lang.c (objcxx_init_ts): Update for property_decl. + +2010-10-13 Richard Henderson + + * objcp-lang.c (objcxx_eh_personality): Update call to + build_personality_function. + +2010-10-11 Andi Kleen + + * Make-lang.in (cc1objplus-checksum.c): Use correct temporary + name. + +2010-10-07 Andi Kleen + + * Make-lang.in (cc1objplus-dummy): Remove. + (cc1objplus-checksum): Change to run checksum over object files + and options only. + +2010-10-04 Andi Kleen + + * Make-lang.in (cc1objplus-dummy, cc1objplus): Add + to build rule. + +2010-09-28 Richard Henderson + + * objcp-lang.c: Include "target.h". + (objcxx_eh_personality): Use targetm.except_unwind_info. + * Make-lang.in (objcp-lang.o): Update deps. + +2010-09-21 Nicola Pero + + PR objc/25965 + * objcp-decl.c (objcp_finish_struct): Call + objc_get_interface_ivars() and check for duplicate ivars. + +2010-06-28 Steven Bosscher + + * objcp-lang.c: Do not include except.h. + * Make-lang.in: Update dependencies. + +2010-06-25 Joseph Myers + + * lang-specs.h: Remove +e handling. + +2010-06-08 Laurynas Biveinis + + * objcp-decl.h (ALLOC_OBJC_TYPE_LANG_SPECIFIC): Use typed GC + allocation. + +2010-06-05 Steven Bosscher + + * objcp-lang.c: Update include path for moved files. + * config-lang.in: Update paths in gtfiles for files in c-family/. + +2010-05-25 Steven Bosscher + + * objcp-decl.c: Do not include tm.h, rtl.h, expr.h, c-common.h, + flags.h, input.h, except.h, output.h, toplev.h, cpplib.h, debug.h, + and target.h. + * objcp-lang.c: Do not include tm.h, toplev.h, diagnostics.h, + and debug.h. Explain why except.h has to be included. + * Make-lang.in: Update dependencies. + +2010-04-30 Steven Bosscher + + * objcp-decl.c: Do not include varray.h. + +2009-09-22 Richard Guenther + + PR objc++/41430 + * Make-lang.in (objcp-lang.o): Add $(EXCEPT_H) dependency. + * objcp-lang.c (LANG_HOOKS_EH_PERSONALITY): Define. + (LANG_HOOKS_EH_RUNTIME_TYPE): Likewise. + (objcxx_eh_personality): New function. + +2009-09-03 Diego Novillo + + * objcp-lang.c (lang_hooks): Remove const qualifier. + +2009-07-14 Taras Glek + Rafael Espindola + + * Make-lang.in (obj-c.install-plugin): New target for + installing plugin headers. + +2009-06-19 Ian Lance Taylor + + * objcp-decl.h (start_struct): Remove in_struct and struct_types + parameters. Add struct_info parameter. + (finish_struct): Likewise. + +2009-06-13 Aldy Hernandez + + * objcp-decl.h (start_struct): Add location argument. + (finish_struct): Same. + (finish_decl): New. + +2009-06-12 Aldy Hernandez + + * objcp-decl.h (c_end_compound_stmt): New argument. + * objcp-decl.c (objcp_start_struct): Add argument. + (objcp_finish_struct): Same. + +2009-06-03 Ian Lance Taylor + + * Make-lang.in (cc1objplus-checksum.o): Depend upon $(CONFIG_H) + and $(SYSTEM_H). + +2009-05-27 Ian Lance Taylor + + * Make-lang.in (cc1objplus-dummy$(exeext)): Change $(COMPILER) to + $(LINKER). + (cc1objplus$(exeext)): Likewise. + +2009-05-26 Ian Lance Taylor + + * Make-lang.in (cc1objplus-dummy$(exeext)): Use $(COMPILER). + (cc1objplus$(exeext), objcp/objcp-act.o): Likwise. + +2009-05-10 Ian Lance Taylor + + * objcp-decl.h (start_struct): Add three new, ignored, macro + parameters. + (finish_struct): Add two new, ignored, macro parameters. + +2009-04-21 Joseph Myers + + * ChangeLog: Add copyright and license notices. + +2008-12-05 Sebastian Pop + + PR bootstrap/38262 + * Make-lang.in (cc1objplus-dummy, cc1objplus): Add BACKENDLIBS, + remove GMPLIBS. + +2008-09-17 Andrew Pinski + + PR objc/37460 + * objcp-lang.c (LANG_HOOKS_GET_CALLEE_FNDECL): Don't define. + +2008-04-03 Tom Tromey + + * Make-lang.in (obj-c++_OBJS): New variable. + +2008-03-27 Tom Tromey + + * Make-lang.in: Revert automatic dependency patch. + +2008-03-25 Tom Tromey + + * Make-lang.in (obj-c++_OBJS): Rename from objcp_OBJS. + (objcp/objcp-act.o): Restore target. + +2008-03-25 Tom Tromey + + * Make-lang.in (objcp_OBJS): New variable. + (cc1objplus-checksum.o, objcp/objcp-lang.o, objcp/objcp-decl.o, + objcp/objcp-act.o): Remove. + +2008-03-07 Paolo Bonzini + + Revert: + + 2008-02-07 Andreas Tobler + Douglas Gregor + + PR bootstrap/35115 + * objcp-decl.c (objcp_comptypes): Call cp_comptypes, not comptypes. + +2008-02-07 Andreas Tobler + Douglas Gregor + + PR bootstrap/35115 + * objcp-decl.c (objcp_comptypes): Call cp_comptypes, not comptypes. + +2008-02-06 Kaveh R. Ghazi + + PR other/35107 + * Make-lang.in (cc1objplus-dummy, cc1objplus): Add $(GMPLIBS). + +2007-08-02 Nick Clifton + + * Make-lang.in: Change copyright header to refer to version 3 of + the GNU General Public License and to point readers at the + COPYING3 file and the FSF's license web page. + * lang-specs.h, objcp-decl.c, objcp-decl.h, config-lang.in, + objcp-lang.c: Likewise. + +2007-03-01 Brooks Moses + + * Make-lang.in: Add dummy lang.install-pdf target. + +2006-10-23 Rafael Ávila de Espíndola + + * objcp-decl.h (objcp_builtin_function): Remove. + +2006-10-10 Brooks Moses + + * Make-lang.in: Added empty "obj-c++.pdf" target. + +2006-08-20 Mark Mitchell + + * objcp-lang.c (objcp_tsubst_copy_and_build): Adjust call to + tsubst_copy_and_build. + +2006-07-28 Volker Reichelt + + * Make-lang.in: Use $(HEADER_H) instead of header.h in dependencies. + +2006-07-03 Paolo Bonzini + + PR other/27063 + * config-lang.in: Add subdir_requires. + +2006-06-30 Jason Merrill + + * objcp-decl.c (objcp_start_struct): Pass null attributes argument + to begin_class_definition. + +2006-05-14 H.J. Lu + + * Make-lang.in (objcp/objcp-decl.o): Add dependency on + $(TARGET_H). + +2006-02-20 Rafael Ávila de Espíndola + + * Make-lang.in (OBJ-C++): Remove + (.PHONY): Remove Obj-c++ and obj-C++. Add obj-c++ + +2005-12-14 Andrew Pinski + + * Make-lang.in (objcp/objcp-decl.o): Add depends on $(EXPR_H). + +2005-12-07 Rafael Ávila de Espíndola + + * Make-lang.in (obj-c++.all.build, obj-c++.install-normal): Remove. + +2005-12-07 Rafael Ávila de Espíndola + + * Make-lang.in: Remove all dependencies on s-gtype. + +2005-11-22 Andrew Pinski + + * objcp-decl.c (objcp_lookup_name): Remove. + * objcp-decl.h (objcp_lookup_name): Delete. + (lookup_name): Kill define. + +2005-09-11 Richard Henderson + + * objcp-lang.c (objcxx_init_ts): Remove ALIAS_DECL. + +2005-07-09 Andrew Pinski + + * config-lang.in (gtfiles): Add cp-objcp-common.c. + * objcp-lang.c (objcxx_init_ts): New function. + (LANG_HOOKS_INIT_TS): Define. + +2005-07-03 Kazu Hirata + + * Make-lang.in (cc1plus-checksum.c): Use + build/genchecksum$(build_exeext), not build/genchecksum$(exeext). + +2005-06-30 Zack Weinberg + Jakub Jelinek + + * objcp-lang.c: No need to include cxx-pretty-print.h. + * Make-lang.in: Update dependencies. + +2005-06-25 Kelley Cook + + * all files: Update FSF in copyright headers. + +2005-06-20 Ziemowit Laski + + * config-lang.in (gtfiles): Add cp/rtti.c. + +2005-05-24 Ziemowit Laski + + * objcp-decl.c (objcp_start_struct, objcp_xref_tag): Adjust + call to xref_tag(). + (objcp_build_component_ref): Remove function. + * objcp-decl.h (objcp_build_component_ref): Remove prototype. + (build_component_ref): Remove macro. + * objcp-lang.c (LANG_HOOKS_TYPES_COMPATIBLE_P): Remove. + +2005-05-18 Geoffrey Keating + + * Make-lang.in (cc1objplus-dummy): New. + (cc1objplus-checksum.c): New. + (cc1objplus-checksum.o): New. + (cc1objplus): Add cc1objplus-checksum.o. + +2005-05-17 Ziemowit Laski + Mike Stump + + Yet more Objective-C++... + + * Make-lang.in (objcp/objcp-lang.o): Add tree-gimple.h + (objcp/objcp-decl.o): Likewise. + (objcp/objcp-act.o): Likewise. + * objcp-lang.c (LANG_HOOKS_GIMPLIFY_EXPR): Add. + +2005-04-21 Ziemowit Laski + Mike Stump + + * ChangeLog: New. + * Make-lang.in: Likewise. + * config-lang.in: Likewise. + * lang-specs.h: Likewise. + * objcp-decl.c: Likewise. + * objcp-decl.h: Likewise. + * objcp-lang.c: Likewise. + + +Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. diff --git a/gcc/objcp/Make-lang.in b/gcc/objcp/Make-lang.in new file mode 100644 index 000000000..5bbd27eec --- /dev/null +++ b/gcc/objcp/Make-lang.in @@ -0,0 +1,185 @@ +# Top level -*- makefile -*- fragment for GNU Objective-C++ +# Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011 +# Free Software Foundation, Inc. +# Contributed by Ziemowit Laski + +#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 +#. + + +# This file provides the language dependent support in the main Makefile. +# Each language makefile fragment must provide the following targets: +# +# foo.all.cross, foo.start.encap, foo.rest.encap, +# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf, +# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall, +# foo.mostlyclean, foo.clean, foo.distclean, +# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4 +# +# where `foo' is the name of the language. +# +# It should also provide rules for: +# +# - making any compiler driver (eg: g++) +# - the compiler proper (eg: cc1plus) +# - define the names for selecting the language in LANGUAGES. + +# +# Define the names for selecting Objective-C++ in LANGUAGES. +obj-c++: cc1objplus$(exeext) + +# Tell GNU make to ignore these if they exist. +.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++ +# headers accessible. +objcp-warn = $(STRICT_WARN) -DOBJCPLUS -I$(srcdir)/objc -I$(srcdir)/cp + +# Language-specific object files for Objective C++. +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) + +obj-c++_OBJS = $(OBJCXX_OBJS) cc1objplus-checksum.o + +cc1objplus-checksum.c : build/genchecksum$(build_exeext) checksum-options \ + $(OBJCXX_OBJS) $(BACKEND) $(LIBDEPS) + build/genchecksum$(build_exeext) $(OBJCXX_OBJS) $(BACKEND) \ + $(LIBDEPS) checksum-options > cc1objplus-checksum.c.tmp && \ + $(srcdir)/../move-if-change cc1objplus-checksum.c.tmp \ + cc1objplus-checksum.c + +cc1objplus-checksum.o : cc1objplus-checksum.c $(CONFIG_H) $(SYSTEM_H) + +cc1objplus$(exeext): $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBDEPS) + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \ + $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS) + +# Objective C++ language specific files. + +objcp/objcp-lang.o : objcp/objcp-lang.c $(START_HDRS) \ + $(C_COMMON_H) $(LANGHOOKS_DEF_H) cp/cp-objcp-common.h \ + $(TARGET_H) gtype-objcp.h + +objcp/objcp-decl.o : objcp/objcp-decl.c \ + $(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 + +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 +# one in Makefile.in. +objcp/objcp-act.o : objc/objc-act.c $(START_HDRS) $(GGC_H) \ + $(RTL_H) $(EXPR_H) $(TARGET_H) $(DIAGNOSTIC_H) toplev.h $(FLAGS_H) \ + input.h $(FUNCTION_H) output.h debug.h $(OBSTACK_H) \ + objcp/objcp-decl.h $(LANGHOOKS_DEF_H) $(HASHTAB_H) gt-objc-objc-act.h \ + $(GIMPLE_H) objc/objc-runtime-hooks.h objc/objc-runtime-shared-support.h + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< \ + $(OUTPUT_OPTION) + +po-generated: + +# +# Build hooks: + +obj-c++.all.cross: +obj-c++.start.encap: +obj-c++.rest.encap: +obj-c++.info: +obj-c++.install-info: +obj-c++.dvi: +obj-c++.pdf: +obj-c++.install-pdf: +obj-c++.html: +obj-c++.install-html: +obj-c++.srcinfo: +obj-c++.srcextra: +obj-c++.man: +obj-c++.install-plugin: + +obj-c++.tags: force + cd $(srcdir)/objcp; etags -o TAGS.sub *.c *.h; \ + etags --include TAGS.sub --include ../TAGS.sub + +lang_checks += check-obj-c++ + +# +# Install hooks: +# cc1objplus is installed elsewhere as part of $(COMPILERS). + +obj-c++.install-common: + +obj-c++.install-man: + +obj-c++.uninstall: +# +# Clean hooks: +# A lot of the ancillary files are deleted by the main makefile. +# We just have to delete files specific to us. +obj-c++.mostlyclean: + -rm -f objcp/*$(objext) + -rm -f objcp/*$(coverageexts) +obj-c++.clean: obj-c++.mostlyclean +obj-c++.distclean: + -rm -f objcp/config.status objcp/Makefile +obj-c++.maintainer-clean: + +# +# Stage hooks: + +obj-c++.stage1: stage1-start + -mv objcp/*$(objext) stage1/objcp +obj-c++.stage2: stage2-start + -mv objcp/*$(objext) stage2/objcp +obj-c++.stage3: stage3-start + -mv objcp/*$(objext) stage3/objcp +obj-c++.stage4: stage4-start + -mv objcp/*$(objext) stage4/objcp +obj-c++.stageprofile: stageprofile-start + -mv objcp/*$(objext) stageprofile/objcp +obj-c++.stagefeedback: stagefeedback-start + -mv objcp/*$(objext) stagefeedback/objcp diff --git a/gcc/objcp/config-lang.in b/gcc/objcp/config-lang.in new file mode 100644 index 000000000..8c3d9c544 --- /dev/null +++ b/gcc/objcp/config-lang.in @@ -0,0 +1,41 @@ +# Top level configure fragment for GNU Objective-C++. +# Copyright (C) 2005, 2007, 2010, 2011 Free Software Foundation, Inc. +# Contributed by Ziemowit Laski + +#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 +#. + +# Configure looks for the existence of this file to auto-config each language. +# We define several parameters used by configure: +# +# language - name of language as it would appear in $(LANGUAGES) +# compilers - value to add to $(COMPILERS) + +language="obj-c++" + +compilers="cc1objplus\$(exeext)" + +# Per GCC Steering Committee. +build_by_default="no" + +# By building the Objective-C and C++ front-ends, we will get +# the object files we need, along with the libraries (libstdc++, +# libobjc). +lang_requires="objc c++" +subdir_requires="objc cp" + +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/class.c \$(srcdir)/cp/cp-tree.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 " + diff --git a/gcc/objcp/lang-specs.h b/gcc/objcp/lang-specs.h new file mode 100644 index 000000000..af21ff6d6 --- /dev/null +++ b/gcc/objcp/lang-specs.h @@ -0,0 +1,61 @@ +/* Definitions for specs for Objective-C++. + Copyright (C) 2005, 2007, 2010, 2011 Free Software Foundation, Inc. + Contributed by Ziemowit Laski + +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 +. */ + + +/* This is the contribution to the `default_compilers' array in gcc.c for + obj-c++. It is based on -- and should be kept in sync with -- the g++ + spec (found in cp/lang-specs.h). */ + +#ifndef CPLUSPLUS_CPP_SPEC +#define CPLUSPLUS_CPP_SPEC 0 +#endif + + {".mm", "@objective-c++", 0, 0, 0}, + {".M", "@objective-c++", 0, 0, 0}, + {"@objective-c++-header", + "%{E|M|MM:cc1objplus -E %(cpp_options) %2 %(cpp_debug_options)}\ + %{!E:%{!M:%{!MM:\ + %{save-temps*|no-integrated-cpp:cc1objplus -E\ + %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\ + cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\ + %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ + %(cc1_options) %2\ + -o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}", + CPLUSPLUS_CPP_SPEC, 0, 0}, + {"@objective-c++", + "%{E|M|MM:cc1objplus -E %(cpp_options) %2 %(cpp_debug_options)}\ + %{!E:%{!M:%{!MM:\ + %{save-temps*|no-integrated-cpp:cc1objplus -E\ + %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\ + cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\ + %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ + %(cc1_options) %2\ + %{!fsyntax-only:%(invoke_as)}}}}", + CPLUSPLUS_CPP_SPEC, 0, 0}, + {".mii", "@objective-c++-cpp-output", 0, 0, 0}, + {"@objective-c++-cpp-output", + "%{!M:%{!MM:%{!E:\ + cc1objplus -fpreprocessed %i %(cc1_options) %2\ + %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, + {"@objc++-cpp-output", + "%nobjc++-cpp-output is deprecated; please use objective-c++-cpp-output instead\n\ + %{!M:%{!MM:%{!E:\ + cc1objplus -fpreprocessed %i %(cc1_options) %2\ + %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, diff --git a/gcc/objcp/objcp-decl.c b/gcc/objcp/objcp-decl.c new file mode 100644 index 000000000..e3571c4a1 --- /dev/null +++ b/gcc/objcp/objcp-decl.c @@ -0,0 +1,145 @@ +/* Process the ObjC-specific declarations and variables for + the Objective-C++ compiler. + Copyright (C) 2005, 2007, 2010 Free Software Foundation, Inc. + Contributed by Ziemowit Laski + +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 +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "tree.h" +#include "cp-tree.h" +#include "hashtab.h" + +#include "c-family/c-objc.h" +#include "objc-act.h" +#include "objcp-decl.h" + +/* Hacks to simulate start_struct() and finish_struct(). */ + +tree +objcp_start_struct (location_t loc ATTRIBUTE_UNUSED, + enum tree_code code ATTRIBUTE_UNUSED, tree name) +{ + tree s; + /* The idea here is to mimic the actions that the C++ parser takes when + constructing 'extern "C" struct NAME {'. */ + push_lang_context (lang_name_c); + + if (!name) + name = make_anon_name (); + + s = xref_tag (record_type, name, ts_global, 0); + CLASSTYPE_DECLARED_CLASS (s) = 0; /* this is a 'struct', not a 'class'. */ + xref_basetypes (s, NULL_TREE); /* no base classes here! */ + + return begin_class_definition (s, NULL_TREE); +} + +tree +objcp_finish_struct (location_t loc ATTRIBUTE_UNUSED, + tree t, tree fieldlist, tree attributes) +{ + tree field, next_field; + + for (field = fieldlist; field; field = next_field) + { + next_field = TREE_CHAIN (field); /* insert one field at a time; */ + TREE_CHAIN (field) = NULL_TREE; /* otherwise, grokfield croaks. */ + finish_member_declaration (field); + } + t = finish_struct (t, attributes); + + /* If we are inside an @interface and are generating the list of + ivars, we need to check for duplicate ivars. + */ + if (fieldlist) + { + tree original_fieldlist = fieldlist; + fieldlist = objc_get_interface_ivars (fieldlist); + if (fieldlist != original_fieldlist) + { + /* Minimal implementation of the equivalent of the C + front-end's detect_field_duplicates(). + */ + htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL); + tree x, y; + void **slot; + + for (x = fieldlist; x ; x = DECL_CHAIN (x)) + if ((y = DECL_NAME (x)) != 0) + { + slot = htab_find_slot (htab, y, INSERT); + if (*slot) + { + error ("duplicate member %q+D", x); + DECL_NAME (x) = NULL_TREE; + } + *slot = y; + } + + htab_delete (htab); + } + } + + pop_lang_context (); + + return t; +} + +void +objcp_finish_function (void) +{ + /* The C++ flavor of 'finish_function' does not generate RTL -- one has + to call 'expand_or_defer_fn' to do that. */ + expand_or_defer_fn (finish_function (0)); +} + +tree +objcp_xref_tag (enum tree_code code ATTRIBUTE_UNUSED, tree name) +{ + return xref_tag (record_type, name, ts_global, false); +} + +int +objcp_comptypes (tree type1, tree type2) +{ + return comptypes (type1, type2, COMPARE_STRICT); +} + +tree +objcp_begin_compound_stmt (int flags ATTRIBUTE_UNUSED) +{ + return begin_compound_stmt (0); +} + +tree +objcp_end_compound_stmt (tree stmt, int flags ATTRIBUTE_UNUSED) +{ + /* The following has been snarfed from + cp/semantics.c:finish_compound_stmt(). */ + if (TREE_CODE (stmt) == BIND_EXPR) + BIND_EXPR_BODY (stmt) = do_poplevel (BIND_EXPR_BODY (stmt)); + else if (STATEMENT_LIST_NO_SCOPE (stmt)) + stmt = pop_stmt_list (stmt); + else + stmt = do_poplevel (stmt); + + return stmt; +} diff --git a/gcc/objcp/objcp-decl.h b/gcc/objcp/objcp-decl.h new file mode 100644 index 000000000..b10fe686e --- /dev/null +++ b/gcc/objcp/objcp-decl.h @@ -0,0 +1,89 @@ +/* Process the ObjC-specific declarations and variables for + the Objective-C++ compiler. + Copyright (C) 2005, 2007, 2009, 2010 Free Software Foundation, Inc. + Contributed by Ziemowit Laski + +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 +. */ + + +#ifndef GCC_OBJCP_DECL_H +#define GCC_OBJCP_DECL_H + +extern tree objcp_start_struct (location_t, enum tree_code, tree); +extern tree objcp_finish_struct (location_t, tree, tree, tree); +extern void objcp_finish_function (void); +extern tree objcp_build_function_call (tree, tree); +extern tree objcp_xref_tag (enum tree_code, tree); +extern int objcp_comptypes (tree, tree); +extern tree objcp_begin_compound_stmt (int); +extern tree objcp_end_compound_stmt (tree, int); + +/* Now "cover up" the corresponding C++ functions if required (NB: the + OBJCP_ORIGINAL_FUNCTION macro, shown below, can still be used to + invoke the original C++ functions if needed). */ +#ifdef OBJCP_REMAP_FUNCTIONS + +#define start_struct(loc, code, name, struct_info) \ + objcp_start_struct (loc, code, name) +#define finish_struct(loc, t, fieldlist, attributes, struct_info) \ + objcp_finish_struct (loc, t, fieldlist, attributes) +#define finish_function() \ + objcp_finish_function () +#define finish_decl(decl, loc, init, origtype, asmspec) \ + cp_finish_decl (decl, init, false, asmspec, 0) +#define xref_tag(code, name) \ + objcp_xref_tag (code, name) +#define comptypes(type1, type2) \ + objcp_comptypes (type1, type2) +#define c_begin_compound_stmt(flags) \ + objcp_begin_compound_stmt (flags) +#define c_end_compound_stmt(loc, stmt, flags) \ + objcp_end_compound_stmt (stmt, flags) + +#undef OBJC_TYPE_NAME +#define OBJC_TYPE_NAME(type) \ + (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL \ + ? DECL_NAME (TYPE_NAME (type)) \ + : TYPE_NAME (type)) +#undef OBJC_SET_TYPE_NAME +#define OBJC_SET_TYPE_NAME(type, name) \ + if(TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL) \ + DECL_NAME (TYPE_NAME (type)) = name; \ + else \ + TYPE_NAME (type) = name; + +#undef TYPE_OBJC_INFO +#define TYPE_OBJC_INFO(TYPE) LANG_TYPE_CLASS_CHECK (TYPE)->objc_info +#undef SIZEOF_OBJC_TYPE_LANG_SPECIFIC +#define SIZEOF_OBJC_TYPE_LANG_SPECIFIC sizeof (struct lang_type_class) +#undef ALLOC_OBJC_TYPE_LANG_SPECIFIC +#define ALLOC_OBJC_TYPE_LANG_SPECIFIC(NODE) \ + do { \ + TYPE_LANG_SPECIFIC (NODE) = ggc_alloc_cleared_lang_type \ + (sizeof (struct lang_type_class)); \ + TYPE_LANG_SPECIFIC (NODE)->u.c.h.is_lang_type_class = 1; \ + } while (0) + +#define OBJCP_ORIGINAL_FUNCTION(name, args) (name)args + +/* C++ marks ellipsis-free function parameters differently from C. */ +#undef OBJC_VOID_AT_END +#define OBJC_VOID_AT_END void_list_node + +#endif /* OBJCP_REMAP_FUNCTIONS */ + +#endif /* ! GCC_OBJCP_DECL_H */ diff --git a/gcc/objcp/objcp-lang.c b/gcc/objcp/objcp-lang.c new file mode 100644 index 000000000..fe2be66ff --- /dev/null +++ b/gcc/objcp/objcp-lang.c @@ -0,0 +1,142 @@ +/* Language-dependent hooks for Objective-C++. + Copyright 2005, 2007, 2008, 2010, 2011 Free Software Foundation, Inc. + Contributed by Ziemowit Laski + +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 +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "tree.h" +#include "cp-tree.h" +#include "c-family/c-common.h" +#include "c-family/c-objc.h" +#include "objc-act.h" +#include "langhooks.h" +#include "langhooks-def.h" +#include "target.h" +#include "cp-objcp-common.h" + +enum c_language_kind c_language = clk_objcxx; +static void objcxx_init_ts (void); + +/* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h; + consequently, there should be very few hooks below. */ + +#undef LANG_HOOKS_NAME +#define LANG_HOOKS_NAME "GNU Objective-C++" +#undef LANG_HOOKS_INIT +#define LANG_HOOKS_INIT objc_init +#undef LANG_HOOKS_GIMPLIFY_EXPR +#define LANG_HOOKS_GIMPLIFY_EXPR objc_gimplify_expr +#undef LANG_HOOKS_INIT_TS +#define LANG_HOOKS_INIT_TS objcxx_init_ts + +/* Each front end provides its own lang hook initializer. */ +struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; + +/* Lang hook routines common to C++ and ObjC++ appear in cp/cp-objcp-common.c; + there should be very few (if any) routines below. */ + +tree +objcp_tsubst_copy_and_build (tree t, tree args, tsubst_flags_t complain, + tree in_decl, bool function_p ATTRIBUTE_UNUSED) +{ +#define RECURSE(NODE) \ + tsubst_copy_and_build (NODE, args, complain, in_decl, \ + /*function_p=*/false, \ + /*integral_constant_expression_p=*/false) + + /* The following two can only occur in Objective-C++. */ + + switch ((int) TREE_CODE (t)) + { + case MESSAGE_SEND_EXPR: + return objc_finish_message_expr + (RECURSE (TREE_OPERAND (t, 0)), + TREE_OPERAND (t, 1), /* No need to expand the selector. */ + RECURSE (TREE_OPERAND (t, 2)), NULL); + + case CLASS_REFERENCE_EXPR: + return objc_get_class_reference + (RECURSE (TREE_OPERAND (t, 0))); + + default: + break; + } + + /* Fall back to C++ processing. */ + return NULL_TREE; + +#undef RECURSE +} + +static void +objcxx_init_ts (void) +{ + /* objc decls */ + tree_contains_struct[CLASS_METHOD_DECL][TS_DECL_NON_COMMON] = 1; + tree_contains_struct[INSTANCE_METHOD_DECL][TS_DECL_NON_COMMON] = 1; + tree_contains_struct[KEYWORD_DECL][TS_DECL_NON_COMMON] = 1; + tree_contains_struct[PROPERTY_DECL][TS_DECL_NON_COMMON] = 1; + + tree_contains_struct[CLASS_METHOD_DECL][TS_DECL_WITH_VIS] = 1; + tree_contains_struct[INSTANCE_METHOD_DECL][TS_DECL_WITH_VIS] = 1; + tree_contains_struct[KEYWORD_DECL][TS_DECL_WITH_VIS] = 1; + tree_contains_struct[PROPERTY_DECL][TS_DECL_WITH_VIS] = 1; + + tree_contains_struct[CLASS_METHOD_DECL][TS_DECL_WRTL] = 1; + tree_contains_struct[INSTANCE_METHOD_DECL][TS_DECL_WRTL] = 1; + tree_contains_struct[KEYWORD_DECL][TS_DECL_WRTL] = 1; + tree_contains_struct[PROPERTY_DECL][TS_DECL_WRTL] = 1; + + tree_contains_struct[CLASS_METHOD_DECL][TS_DECL_MINIMAL] = 1; + tree_contains_struct[INSTANCE_METHOD_DECL][TS_DECL_MINIMAL] = 1; + tree_contains_struct[KEYWORD_DECL][TS_DECL_MINIMAL] = 1; + tree_contains_struct[PROPERTY_DECL][TS_DECL_MINIMAL] = 1; + + tree_contains_struct[CLASS_METHOD_DECL][TS_DECL_COMMON] = 1; + tree_contains_struct[INSTANCE_METHOD_DECL][TS_DECL_COMMON] = 1; + tree_contains_struct[KEYWORD_DECL][TS_DECL_COMMON] = 1; + tree_contains_struct[PROPERTY_DECL][TS_DECL_COMMON] = 1; + + /* C++ decls */ + tree_contains_struct[NAMESPACE_DECL][TS_DECL_NON_COMMON] = 1; + tree_contains_struct[USING_DECL][TS_DECL_NON_COMMON] = 1; + tree_contains_struct[TEMPLATE_DECL][TS_DECL_NON_COMMON] = 1; + + tree_contains_struct[NAMESPACE_DECL][TS_DECL_WITH_VIS] = 1; + tree_contains_struct[USING_DECL][TS_DECL_WITH_VIS] = 1; + tree_contains_struct[TEMPLATE_DECL][TS_DECL_WITH_VIS] = 1; + + tree_contains_struct[NAMESPACE_DECL][TS_DECL_WRTL] = 1; + tree_contains_struct[USING_DECL][TS_DECL_WRTL] = 1; + tree_contains_struct[TEMPLATE_DECL][TS_DECL_WRTL] = 1; + + tree_contains_struct[NAMESPACE_DECL][TS_DECL_COMMON] = 1; + tree_contains_struct[USING_DECL][TS_DECL_COMMON] = 1; + tree_contains_struct[TEMPLATE_DECL][TS_DECL_COMMON] = 1; + + tree_contains_struct[NAMESPACE_DECL][TS_DECL_MINIMAL] = 1; + tree_contains_struct[USING_DECL][TS_DECL_MINIMAL] = 1; + tree_contains_struct[TEMPLATE_DECL][TS_DECL_MINIMAL] = 1; + + init_shadowed_var_for_decl (); +} + +#include "gtype-objcp.h" -- cgit v1.2.3