diff mbox

ObjC/ObjC++: Move ObjC callbacks into their own header to fix pointless rebuilds of lots of files when they change

Message ID 1291422589.643230354@192.168.2.228
State New
Headers show

Commit Message

Nicola Pero Dec. 4, 2010, 12:29 a.m. UTC
This patch fixes a problem I keep having when working on the Objective-C/Objective-C++
frontends, which is that any, no-matter-how-trivial, change to the ObjC callbacks
triggers a rebuild of a mass of completely unrelated files (such as i386.c,
tree-ssa-mudflap.c, etc).

This is because the ObjC front-end callbacks, which are implemented in objc-act.c
and stub-objc.c and used by some files in the C/C++ frontend, are declared
in c-common.h which is included by c-tree.h which is included by lots of files.

This patch moves the ObjC front-end callback declarations into a separate c-family/c-objc.h
file, which is then only included in the relevant C/C++ frontend files.

With this change, the rebuilding performed when I touch an ObjC front-end callback
goes down from 5m30s to 3m30s (approx, on my machine).

This benefits everyone else too (not just myself) because when I commit a bug fix that
touches the ObjC front-end callbacks, the time it takes other people to update/rebuild
their trees will go down by the same amount. :-)

It also just makes sense to have the ObjC frontend callbacks in a separate file and
include it only in the files that use them.

Ok to commit ?

Thanks

PS: There is a slight disadvantage in doing this, which is that if we want to add
a new ObjC callback function and use it in some other file in gcc/ or gcc/cp/ where
we don't have ObjC callbacks yet, we need to add the #include, and update the corresponding
makefile.  But I looked at my previous patches and that never happened with the C frontend,
and happened a couple of times only with C++ frontend (where it is unlikely to happen again
because we now have hooks in most files); instead, the reduction in rebuild times
would have made my life easier when working on so many of the patches ... and will keep
applying to many more future patches ... so I'll go with that. :-)

In gcc/:
2010-12-03  Nicola Pero  <nicola.pero@meta-innovation.com>

        * c-family/c-common.h: Removed the declarations of all the objc_
        callbacks, and moved them into c-objc.h.  Removed
        objc_ivar_visibility_kind and moved it into c-objc.h.
        * c-family/c-objc.h: New file.
        * c-family/c-common.c: Include c-objc.h.
        * c-family/c-format.c: Same change.
        * c-family/stub-objc.c: Same change.
        * c-decl.c: Include c-family/c-objc.h.
        * c-parser.c: Same change.
        * c-typeck.c: Same change.
        * c-config-lang.in (gtfiles): Added c-family/c-objc.h.
        * Makefile.in (c-decl.o): Depend on c-family/c-objc.h.
        (c-parser.o): same change.
        (c-typeck.o): Same change.
        (c-family/c-format.o): Same change.
        (c-family/stub-objc.o): Same change.
        (c-family/c-common.o): Same change.
        (PLUGIN_HEADERS): Added c-family/c-objc.h.

In gcc/cp/:
2010-12-03  Nicola Pero  <nicola.pero@meta-innovation.com>

        * call.c: Include c-family/c-objc.h.
        * decl.c: Same change.
        * decl2.c: Same change.
        * error.c: Same change.
        * lex.c: Same change.
        * parser.c: Same change.
        * pt.c: Same change.
        * semantics.c: Same change.
        * typeck.c: Same change.
        * Make-lang.in (cp/decl.o): Depend on c-family/c-objc.h.
        (cp/decl2.o): Same change.
        (cp/call.o): Same change.
        (cp/error.o): Same change.
        (cp/lex.o): Same change.
        (cp/parser.o): Same change.
        (cp/pt.o): Same change.
        (cp/semantics.o): Same change.
        (cp/typeck.o): Same change.
        * config-lang.in (gtfiles): Added c-family/c-objc.h.

In gcc/objc/:
2010-12-03  Nicola Pero  <nicola.pero@meta-innovation.com>

        * objc-act.c: Include c-family/c-objc.h.
        * objc-lang.c: Same change.
        * Make-lang.in (objc/objc-act.o): Depend on
        c-family/c-objc.h.
        (objc/objc-lang.o): Same change.
        * config-lang.in (gtfiles): Added c-family/c-objc.h.

In gcc/objcp/:
2010-12-03  Nicola Pero  <nicola.pero@meta-innovation.com>

        * 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.

Comments

Mike Stump Dec. 4, 2010, 5:08 p.m. UTC | #1
On Dec 3, 2010, at 4:29 PM, Nicola Pero wrote:
> This patch fixes a problem I keep having when working on the Objective-C/Objective-C++
> frontends, which is that any, no-matter-how-trivial, change to the ObjC callbacks
> triggers a rebuild of a mass of completely unrelated files (such as i386.c,
> tree-ssa-mudflap.c, etc).

> Ok to commit ?

Ok.
Paolo Bonzini Dec. 4, 2010, 10:22 p.m. UTC | #2
On 12/04/2010 01:29 AM, Nicola Pero wrote:
> This patch fixes a problem I keep having when working on the
> Objective-C/Objective-C++ frontends, which is that any,
> no-matter-how-trivial, change to the ObjC callbacks triggers a
> rebuild of a mass of completely unrelated files (such as i386.c,
> tree-ssa-mudflap.c, etc).

I only found these files to include c-common.h, c-lang.h or c-tree.h in 
my tree:

c-aux-info.c
c-convert.c
c-decl.c
c-errors.c
c-lang.c
c-objc-common.c
c-parser.c
c-typeck.c
config/darwin.c
config/darwin-c.c
config/sol2-c.c
config/arm/arm-c.c
config/avr/avr-c.c
config/i386/i386-c.c
config/i386/msformat-c.c
config/ia64/ia64-c.c
config/m32c/m32c-pragma.c
config/microblaze/microblaze-c.c
config/rs6000/rs6000-c.c
config/spu/spu-c.c

This is a bug in the case of config/darwin.c (CCing Jack...), but it 
means that modifying c-common.h should not cause the rebuild of i386.c.

So, this is actually a bug of the Makefiles, which have extra 
unnecessary dependencies on $(C_COMMON_H).  Unfortunately I don't have 
time to look at it, but maybe someone else can.

Paolo
Paolo Bonzini Dec. 4, 2010, 10:34 p.m. UTC | #3
On 12/04/2010 11:22 PM, Paolo Bonzini wrote:
> So, this is actually a bug of the Makefiles, which have extra
> unnecessary dependencies on $(C_COMMON_H).  Unfortunately I don't have
> time to look at it, but maybe someone else can.

(Note this was not implying in any way that the patch is bad, I agree a 
lot with it).

Paolo
diff mbox

Patch

Index: c-family/c-objc.h
===================================================================
--- c-family/c-objc.h	(revision 0)
+++ c-family/c-objc.h	(revision 0)
@@ -0,0 +1,115 @@ 
+/* Definitions of Objective-C front-end entry points used for C and C++.
+   Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
+   Free Software Foundation, Inc.
+
+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 GCC_C_COMMON_OBJC_H
+#define GCC_C_COMMON_OBJC_H
+
+/* ObjC ivar visibility types.  */
+typedef enum objc_ivar_visibility_kind {
+  OBJC_IVAR_VIS_PROTECTED = 0,
+  OBJC_IVAR_VIS_PUBLIC    = 1,
+  OBJC_IVAR_VIS_PRIVATE   = 2,
+  OBJC_IVAR_VIS_PACKAGE   = 3
+} objc_ivar_visibility_kind;
+
+/* Objective-C / Objective-C++ entry points.  */
+
+/* The following ObjC/ObjC++ functions are called by the C and/or C++
+   front-ends; they all must have corresponding stubs in stub-objc.c.  */
+extern void objc_write_global_declarations (void);
+extern tree objc_is_class_name (tree);
+extern tree objc_is_object_ptr (tree);
+extern void objc_check_decl (tree);
+extern void objc_check_global_decl (tree);
+extern tree objc_common_type (tree, tree);
+extern bool objc_compare_types (tree, tree, int, tree);
+extern bool objc_have_common_type (tree, tree, int, tree);
+extern bool objc_diagnose_private_ivar (tree);
+extern void objc_volatilize_decl (tree);
+extern tree objc_rewrite_function_call (tree, tree);
+extern tree objc_message_selector (void);
+extern tree objc_lookup_ivar (tree, tree);
+extern void objc_clear_super_receiver (void);
+extern int objc_is_public (tree, tree);
+extern tree objc_is_id (tree);
+extern void objc_declare_alias (tree, tree);
+extern void objc_declare_class (tree);
+extern void objc_declare_protocols (tree, tree);
+extern tree objc_build_message_expr (tree);
+extern tree objc_finish_message_expr (tree, tree, tree);
+extern tree objc_build_selector_expr (location_t, tree);
+extern tree objc_build_protocol_expr (tree);
+extern tree objc_build_encode_expr (tree);
+extern tree objc_build_string_object (tree);
+extern tree objc_get_protocol_qualified_type (tree, tree);
+extern tree objc_get_class_reference (tree);
+extern tree objc_get_class_ivars (tree);
+extern tree objc_get_interface_ivars (tree);
+extern void objc_start_class_interface (tree, tree, tree, tree);
+extern void objc_start_category_interface (tree, tree, tree, tree);
+extern void objc_start_protocol (tree, tree, tree);
+extern void objc_continue_interface (void);
+extern void objc_finish_interface (void);
+extern void objc_start_class_implementation (tree, tree);
+extern void objc_start_category_implementation (tree, tree);
+extern void objc_continue_implementation (void);
+extern void objc_finish_implementation (void);
+extern void objc_set_visibility (objc_ivar_visibility_kind);
+extern tree objc_build_method_signature (bool, tree, tree, tree, bool);
+extern void objc_add_method_declaration (bool, tree, tree);
+extern bool objc_start_method_definition (bool, tree, tree);
+extern void objc_finish_method_definition (tree);
+extern void objc_add_instance_variable (tree);
+extern tree objc_build_keyword_decl (tree, tree, tree, tree);
+extern tree objc_build_throw_stmt (location_t, tree);
+extern void objc_begin_try_stmt (location_t, tree);
+extern tree objc_finish_try_stmt (void);
+extern void objc_begin_catch_clause (tree);
+extern void objc_finish_catch_clause (void);
+extern void objc_build_finally_clause (location_t, tree);
+extern tree objc_build_synchronized (location_t, tree, tree);
+extern int objc_static_init_needed_p (void);
+extern tree objc_generate_static_init_call (tree);
+extern tree objc_generate_write_barrier (tree, enum tree_code, tree);
+extern void objc_set_method_opt (bool);
+extern void objc_finish_foreach_loop (location_t, tree, tree, tree, tree, tree);
+extern bool  objc_method_decl (enum tree_code);
+extern void objc_add_property_declaration (location_t, tree, bool, bool, bool, 
+					   bool, bool, bool, tree, tree);
+extern tree objc_maybe_build_component_ref (tree, tree);
+extern tree objc_build_class_component_ref (tree, tree);
+extern tree objc_maybe_build_modify_expr (tree, tree);
+extern tree objc_build_incr_expr_for_property_ref (location_t, enum tree_code, 
+						   tree, tree);
+extern void objc_add_synthesize_declaration (location_t, tree);
+extern void objc_add_dynamic_declaration (location_t, tree);
+extern const char * objc_maybe_printable_name (tree, int);
+extern bool objc_is_property_ref (tree);
+extern bool objc_string_ref_type_p (tree);
+extern void objc_check_format_arg (tree, tree);
+extern void objc_finish_function (void);
+
+/* The following are provided by the C and C++ front-ends, and called by
+   ObjC/ObjC++.  */
+extern void *objc_get_current_scope (void);
+extern void objc_mark_locals_volatile (void *);
+
+#endif /* ! GCC_C_COMMON_OBJC_H */
Index: c-family/c-format.c
===================================================================
--- c-family/c-format.c	(revision 167425)
+++ c-family/c-format.c	(working copy)
@@ -26,6 +26,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "tree.h"
 #include "flags.h"
 #include "c-common.h"
+#include "c-objc.h"
 #include "intl.h"
 #include "diagnostic-core.h"
 #include "langhooks.h"
Index: c-family/c-common.c
===================================================================
--- c-family/c-common.c	(revision 167425)
+++ c-family/c-common.c	(working copy)
@@ -30,6 +30,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "c-pragma.h"
 #include "ggc.h"
 #include "c-common.h"
+#include "c-objc.h"
 #include "tm_p.h"
 #include "obstack.h"
 #include "cpplib.h"
Index: c-family/c-common.h
===================================================================
--- c-family/c-common.h	(revision 167425)
+++ c-family/c-common.h	(working copy)
@@ -434,14 +434,6 @@  extern c_language_kind c_language;
 #define c_dialect_cxx()		((c_language & clk_cxx) != 0)
 #define c_dialect_objc()	((c_language & clk_objc) != 0)
 
-/* ObjC ivar visibility types.  */
-typedef enum objc_ivar_visibility_kind {
-  OBJC_IVAR_VIS_PROTECTED = 0,
-  OBJC_IVAR_VIS_PUBLIC    = 1,
-  OBJC_IVAR_VIS_PRIVATE   = 2,
-  OBJC_IVAR_VIS_PACKAGE   = 3
-} objc_ivar_visibility_kind;
-
 /* The various name of operator that appears in error messages. */
 typedef enum ref_operator {
   /* NULL */
@@ -988,88 +980,6 @@  extern void c_stddef_cpp_builtins (void);
 extern void fe_file_change (const struct line_map *);
 extern void c_parse_error (const char *, enum cpp_ttype, tree, unsigned char);
 
-/* Objective-C / Objective-C++ entry points.  */
-
-/* The following ObjC/ObjC++ functions are called by the C and/or C++
-   front-ends; they all must have corresponding stubs in stub-objc.c.  */
-extern void objc_write_global_declarations (void);
-extern tree objc_is_class_name (tree);
-extern tree objc_is_object_ptr (tree);
-extern void objc_check_decl (tree);
-extern void objc_check_global_decl (tree);
-extern tree objc_common_type (tree, tree);
-extern bool objc_compare_types (tree, tree, int, tree);
-extern bool objc_have_common_type (tree, tree, int, tree);
-extern bool objc_diagnose_private_ivar (tree);
-extern void objc_volatilize_decl (tree);
-extern tree objc_rewrite_function_call (tree, tree);
-extern tree objc_message_selector (void);
-extern tree objc_lookup_ivar (tree, tree);
-extern void objc_clear_super_receiver (void);
-extern int objc_is_public (tree, tree);
-extern tree objc_is_id (tree);
-extern void objc_declare_alias (tree, tree);
-extern void objc_declare_class (tree);
-extern void objc_declare_protocols (tree, tree);
-extern tree objc_build_message_expr (tree);
-extern tree objc_finish_message_expr (tree, tree, tree);
-extern tree objc_build_selector_expr (location_t, tree);
-extern tree objc_build_protocol_expr (tree);
-extern tree objc_build_encode_expr (tree);
-extern tree objc_build_string_object (tree);
-extern tree objc_get_protocol_qualified_type (tree, tree);
-extern tree objc_get_class_reference (tree);
-extern tree objc_get_class_ivars (tree);
-extern tree objc_get_interface_ivars (tree);
-extern void objc_start_class_interface (tree, tree, tree, tree);
-extern void objc_start_category_interface (tree, tree, tree, tree);
-extern void objc_start_protocol (tree, tree, tree);
-extern void objc_continue_interface (void);
-extern void objc_finish_interface (void);
-extern void objc_start_class_implementation (tree, tree);
-extern void objc_start_category_implementation (tree, tree);
-extern void objc_continue_implementation (void);
-extern void objc_finish_implementation (void);
-extern void objc_set_visibility (objc_ivar_visibility_kind);
-extern tree objc_build_method_signature (bool, tree, tree, tree, bool);
-extern void objc_add_method_declaration (bool, tree, tree);
-extern bool objc_start_method_definition (bool, tree, tree);
-extern void objc_finish_method_definition (tree);
-extern void objc_add_instance_variable (tree);
-extern tree objc_build_keyword_decl (tree, tree, tree, tree);
-extern tree objc_build_throw_stmt (location_t, tree);
-extern void objc_begin_try_stmt (location_t, tree);
-extern tree objc_finish_try_stmt (void);
-extern void objc_begin_catch_clause (tree);
-extern void objc_finish_catch_clause (void);
-extern void objc_build_finally_clause (location_t, tree);
-extern tree objc_build_synchronized (location_t, tree, tree);
-extern int objc_static_init_needed_p (void);
-extern tree objc_generate_static_init_call (tree);
-extern tree objc_generate_write_barrier (tree, enum tree_code, tree);
-extern void objc_set_method_opt (bool);
-extern void objc_finish_foreach_loop (location_t, tree, tree, tree, tree, tree);
-extern bool  objc_method_decl (enum tree_code);
-extern void objc_add_property_declaration (location_t, tree, bool, bool, bool, 
-					   bool, bool, bool, tree, tree);
-extern tree objc_maybe_build_component_ref (tree, tree);
-extern tree objc_build_class_component_ref (tree, tree);
-extern tree objc_maybe_build_modify_expr (tree, tree);
-extern tree objc_build_incr_expr_for_property_ref (location_t, enum tree_code, 
-						   tree, tree);
-extern void objc_add_synthesize_declaration (location_t, tree);
-extern void objc_add_dynamic_declaration (location_t, tree);
-extern const char * objc_maybe_printable_name (tree, int);
-extern bool objc_is_property_ref (tree);
-extern bool objc_string_ref_type_p (tree);
-extern void objc_check_format_arg (tree, tree);
-extern void objc_finish_function (void);
-
-/* The following are provided by the C and C++ front-ends, and called by
-   ObjC/ObjC++.  */
-extern void *objc_get_current_scope (void);
-extern void objc_mark_locals_volatile (void *);
-
 /* In c-ppoutput.c  */
 extern void init_pp_output (FILE *);
 extern void preprocess_file (cpp_reader *);
Index: c-family/stub-objc.c
===================================================================
--- c-family/stub-objc.c	(revision 167425)
+++ c-family/stub-objc.c	(working copy)
@@ -25,6 +25,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "coretypes.h"
 #include "tree.h"
 #include "c-common.h"
+#include "c-objc.h"
 
 tree
 objc_is_class_name (tree ARG_UNUSED (arg))
Index: c-config-lang.in
===================================================================
--- c-config-lang.in	(revision 167425)
+++ c-config-lang.in	(working copy)
@@ -22,4 +22,4 @@ 
 # files used by C that have garbage collection GTY macros in them
 # which therefore need to be scanned by gengtype.c.
 
-gtfiles="\$(srcdir)/c-lang.c \$(srcdir)/c-tree.h \$(srcdir)/c-decl.c \$(srcdir)/c-family/c-common.c \$(srcdir)/c-family/c-common.h \$(srcdir)/c-family/c-cppbuiltin.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/c-objc-common.c \$(srcdir)/c-parser.c \$(srcdir)/c-lang.h"
+gtfiles="\$(srcdir)/c-lang.c \$(srcdir)/c-tree.h \$(srcdir)/c-decl.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)/c-objc-common.c \$(srcdir)/c-parser.c \$(srcdir)/c-lang.h"
Index: objc/Make-lang.in
===================================================================
--- objc/Make-lang.in	(revision 167425)
+++ objc/Make-lang.in	(working copy)
@@ -69,14 +69,14 @@  cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) c
 objc/objc-lang.o : objc/objc-lang.c \
    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
    $(GGC_H) langhooks.h $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-objc.h \
-   c-objc-common.h objc/objc-act.h
+   c-objc-common.h c-family/c-objc.h objc/objc-act.h
 
 objc/objc-act.o : objc/objc-act.c \
    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_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 \
    $(LANGHOOKS_DEF_H) $(HASHTAB_H) $(C_PRAGMA_H) gt-objc-objc-act.h \
-   $(GIMPLE_H) c-lang.h
+   $(GIMPLE_H) c-lang.h c-family/c-objc.h
 
 objc.srcextra:
 
Index: objc/objc-act.c
===================================================================
--- objc/objc-act.c	(revision 167425)
+++ objc/objc-act.c	(working copy)
@@ -34,6 +34,7 @@  along with GCC; see the file COPYING3.  If not see
 #endif
 
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "c-family/c-pragma.h"
 #include "c-family/c-format.h"
 #include "flags.h"
Index: objc/ChangeLog
===================================================================
--- objc/ChangeLog	(revision 167425)
+++ objc/ChangeLog	(working copy)
@@ -1,3 +1,12 @@ 
+2010-12-03  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+	* objc-act.c: Include c-family/c-objc.h.
+	* objc-lang.c: Same change.
+	* Make-lang.in (objc/objc-act.o): Depend on
+	c-family/c-objc.h.
+	(objc/objc-lang.o): Same change.
+	* config-lang.in (gtfiles): Added c-family/c-objc.h.
+	
 2010-12-02  Joseph Myers  <joseph@codesourcery.com>
 
 	* lang-specs.h: Don't handle -ftraditional.
Index: objc/config-lang.in
===================================================================
--- objc/config-lang.in	(revision 167425)
+++ objc/config-lang.in	(working copy)
@@ -33,4 +33,4 @@  target_libs=target-libobjc
 # Most of the object files for cc1obj actually come from 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-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/objc/objc-act.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-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/objc/objc-act.c"
Index: objc/objc-lang.c
===================================================================
--- objc/objc-lang.c	(revision 167425)
+++ objc/objc-lang.c	(working copy)
@@ -27,6 +27,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "tree.h"
 #include "c-tree.h"
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "ggc.h"
 #include "objc-act.h"
 #include "langhooks.h"
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 167425)
+++ ChangeLog	(working copy)
@@ -1,3 +1,24 @@ 
+2010-12-03  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+	* c-family/c-common.h: Removed the declarations of all the objc_
+	callbacks, and moved them into c-objc.h.  Removed
+	objc_ivar_visibility_kind and moved it into c-objc.h.
+	* c-family/c-objc.h: New file.
+	* c-family/c-common.c: Include c-objc.h.
+	* c-family/c-format.c: Same change.
+	* c-family/stub-objc.c: Same change.
+	* c-decl.c: Include c-family/c-objc.h.
+	* c-parser.c: Same change.	
+	* c-typeck.c: Same change.
+	* c-config-lang.in (gtfiles): Added c-family/c-objc.h.
+	* Makefile.in (c-decl.o): Depend on c-family/c-objc.h.
+	(c-parser.o): same change.
+	(c-typeck.o): Same change.
+	(c-family/c-format.o): Same change.
+	(c-family/stub-objc.o): Same change.
+	(c-family/c-common.o): Same change.
+	(PLUGIN_HEADERS): Added c-family/c-objc.h.
+	
 2010-12-03  Alexander Monakov  <amonakov@ispras.ru>
 
 	PR rtl-optimization/45354
Index: objcp/Make-lang.in
===================================================================
--- objcp/Make-lang.in	(revision 167425)
+++ objcp/Make-lang.in	(working copy)
@@ -72,11 +72,11 @@  cc1objplus$(exeext): $(OBJCXX_OBJS) cc1objplus-che
 objcp/objcp-lang.o : objcp/objcp-lang.c \
   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_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 \
    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) \
-   objc/objc-act.h objcp/objcp-decl.h
+   objc/objc-act.h objcp/objcp-decl.h c-family/c-objc.h
 
 # The following must be an explicit rule; please keep in sync with the implicit
 # one in Makefile.in.
@@ -85,7 +85,7 @@  objcp/objcp-act.o : objc/objc-act.c \
    $(EXPR_H) $(TARGET_H) $(CXX_TREE_H) $(DIAGNOSTIC_H) toplev.h $(FLAGS_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 \
-   $(GIMPLE_H)
+   $(GIMPLE_H) c-family/c-objc.h
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< \
 		$(OUTPUT_OPTION)
 
Index: objcp/objcp-decl.c
===================================================================
--- objcp/objcp-decl.c	(revision 167425)
+++ objcp/objcp-decl.c	(working copy)
@@ -27,6 +27,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "cp-tree.h"
 #include "hashtab.h"
 
+#include "c-family/c-objc.h"
 #include "objc-act.h"
 #include "objcp-decl.h"
 
Index: objcp/ChangeLog
===================================================================
--- objcp/ChangeLog	(revision 167425)
+++ objcp/ChangeLog	(working copy)
@@ -1,3 +1,13 @@ 
+2010-12-03  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+	* 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  <nicola.pero@meta-innovation.com>
 
 	PR objc/24358
Index: objcp/config-lang.in
===================================================================
--- objcp/config-lang.in	(revision 167425)
+++ objcp/config-lang.in	(working copy)
@@ -37,4 +37,4 @@  build_by_default="no"
 lang_requires="objc c++"
 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-lex.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/cp/cp-objcp-common.c"
+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-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/cp/cp-objcp-common.c"
Index: objcp/objcp-lang.c
===================================================================
--- objcp/objcp-lang.c	(revision 167425)
+++ objcp/objcp-lang.c	(working copy)
@@ -26,6 +26,7 @@  along with GCC; see the file COPYING3.  If not see
 #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"
Index: cp/typeck.c
===================================================================
--- cp/typeck.c	(revision 167425)
+++ cp/typeck.c	(working copy)
@@ -39,6 +39,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "target.h"
 #include "convert.h"
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "params.h"
 
 static tree pfn_from_ptrmemfunc (tree);
Index: cp/decl.c
===================================================================
--- cp/decl.c	(revision 167425)
+++ cp/decl.c	(working copy)
@@ -45,6 +45,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "tm_p.h"
 #include "target.h"
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "c-family/c-pragma.h"
 #include "diagnostic.h"
 #include "intl.h"
Index: cp/Make-lang.in
===================================================================
--- cp/Make-lang.in	(revision 167425)
+++ cp/Make-lang.in	(working copy)
@@ -247,7 +247,8 @@  CXX_TREE_H = $(TREE_H) cp/name-lookup.h cp/cp-tree
 CXX_PRETTY_PRINT_H = cp/cxx-pretty-print.h $(C_PRETTY_PRINT_H)
 
 cp/lex.o: cp/lex.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) \
-  $(C_PRAGMA_H) output.h input.h cp/operators.def $(TM_P_H)
+  $(C_PRAGMA_H) output.h input.h cp/operators.def $(TM_P_H) \
+  c-family/c-objc.h
 cp/cp-lang.o: cp/cp-lang.c $(CXX_TREE_H) $(TM_H) debug.h langhooks.h \
   $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-cp.h gt-cp-cp-lang.h \
   cp/cp-objcp-common.h $(EXPR_H) $(TARGET_H)
@@ -255,11 +256,13 @@  cp/decl.o: cp/decl.c $(CXX_TREE_H) $(TM_H) $(FLAGS
   output.h toplev.h $(HASHTAB_H) $(RTL_H) \
   cp/operators.def $(TM_P_H) $(TREE_INLINE_H) $(DIAGNOSTIC_H) $(C_PRAGMA_H) \
   debug.h gt-cp-decl.h $(TIMEVAR_H) $(TARGET_H) $(PLUGIN_H) \
-  intl.h tree-iterator.h $(SPLAY_TREE_H)
+  intl.h tree-iterator.h $(SPLAY_TREE_H) \
+  c-family/c-objc.h
 cp/decl2.o: cp/decl2.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) cp/decl.h \
   output.h toplev.h $(C_COMMON_H) gt-cp-decl2.h $(CGRAPH_H) \
   $(C_PRAGMA_H) $(TREE_DUMP_H) intl.h $(TARGET_H) $(GIMPLE_H) $(POINTER_SET_H) \
-  $(SPLAY_TREE_H) c-family/c-ada-spec.h
+  $(SPLAY_TREE_H) c-family/c-ada-spec.h \
+  c-family/c-objc.h
 cp/cp-objcp-common.o : cp/cp-objcp-common.c $(CONFIG_H) $(SYSTEM_H) \
   coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) $(C_COMMON_H) \
   langhooks.h $(LANGHOOKS_DEF_H) $(DIAGNOSTIC_H) debug.h \
@@ -268,12 +271,13 @@  cp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) $(TM_H) $
   $(TM_P_H) $(DIAGNOSTIC_CORE_H) gt-cp-typeck2.h $(REAL_H) intl.h
 cp/typeck.o: cp/typeck.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) \
   toplev.h $(DIAGNOSTIC_H) convert.h $(C_COMMON_H) $(TARGET_H) \
-  output.h
+  output.h c-family/c-objc.h
 cp/class.o: cp/class.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h \
   $(TARGET_H) convert.h $(CGRAPH_H) $(TREE_DUMP_H) gt-cp-class.h \
   $(SPLAY_TREE_H)
 cp/call.o: cp/call.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h \
-  $(DIAGNOSTIC_CORE_H) intl.h gt-cp-call.h convert.h $(TARGET_H) langhooks.h
+  $(DIAGNOSTIC_CORE_H) intl.h gt-cp-call.h convert.h $(TARGET_H) langhooks.h \
+  c-family/c-objc.h
 cp/friend.o: cp/friend.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H)
 cp/init.o: cp/init.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) \
   $(EXCEPT_H) $(TARGET_H)
@@ -293,16 +297,17 @@  cp/except.o: cp/except.c $(CXX_TREE_H) $(TM_H) $(F
   cp/cfns.h $(TREE_INLINE_H) $(TARGET_H)
 cp/expr.o: cp/expr.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(TM_P_H)
 cp/pt.o: cp/pt.c $(CXX_TREE_H) $(TM_H) cp/decl.h cp/cp-objcp-common.h \
-  toplev.h $(TREE_INLINE_H) pointer-set.h gt-cp-pt.h vecprim.h intl.h
+  toplev.h $(TREE_INLINE_H) pointer-set.h gt-cp-pt.h vecprim.h intl.h \
+  c-family/c-objc.h
 cp/error.o: cp/error.c $(CXX_TREE_H) $(TM_H) $(DIAGNOSTIC_H) \
   $(FLAGS_H) $(REAL_H) $(LANGHOOKS_DEF_H) $(CXX_PRETTY_PRINT_H) \
-  tree-diagnostic.h tree-pretty-print.h
+  tree-diagnostic.h tree-pretty-print.h c-family/c-objc.h
 cp/repo.o: cp/repo.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_CORE_H) \
   gt-cp-repo.h
 cp/semantics.o: cp/semantics.c $(CXX_TREE_H) $(TM_H) toplev.h \
   $(FLAGS_H) output.h $(RTL_H) $(TIMEVAR_H) \
   $(TREE_INLINE_H) $(CGRAPH_H) $(TARGET_H) $(C_COMMON_H) $(GIMPLE_H) \
-  bitmap.h gt-cp-semantics.h
+  bitmap.h gt-cp-semantics.h c-family/c-objc.h
 cp/dump.o: cp/dump.c $(CXX_TREE_H) $(TM_H) $(TREE_DUMP_H)
 cp/optimize.o: cp/optimize.c $(CXX_TREE_H) $(TM_H) \
   input.h $(PARAMS_H) debug.h $(TREE_INLINE_H) $(GIMPLE_H) \
@@ -310,7 +315,8 @@  cp/optimize.o: cp/optimize.c $(CXX_TREE_H) $(TM_H)
 cp/mangle.o: cp/mangle.c $(CXX_TREE_H) $(TM_H) $(REAL_H) \
   gt-cp-mangle.h $(TARGET_H) $(TM_P_H) $(CGRAPH_H)
 cp/parser.o: cp/parser.c $(CXX_TREE_H) $(TM_H) $(DIAGNOSTIC_CORE_H) \
-  gt-cp-parser.h output.h $(TARGET_H) $(PLUGIN_H) intl.h
+  gt-cp-parser.h output.h $(TARGET_H) $(PLUGIN_H) intl.h \
+  c-family/c-objc.h
 cp/cp-gimplify.o: cp/cp-gimplify.c $(CXX_TREE_H) $(C_COMMON_H) \
 	$(TM_H) coretypes.h pointer-set.h tree-iterator.h
 
Index: cp/error.c
===================================================================
--- cp/error.c	(revision 167425)
+++ cp/error.c	(working copy)
@@ -32,6 +32,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "cxx-pretty-print.h"
 #include "tree-pretty-print.h"
 #include "pointer-set.h"
+#include "c-family/c-objc.h"
 
 #define pp_separate_with_comma(PP) pp_cxx_separate_with (PP, ',')
 
Index: cp/ChangeLog
===================================================================
--- cp/ChangeLog	(revision 167425)
+++ cp/ChangeLog	(working copy)
@@ -1,3 +1,25 @@ 
+2010-12-03  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+	* call.c: Include c-family/c-objc.h.
+	* decl.c: Same change.
+	* decl2.c: Same change.
+	* error.c: Same change.
+	* lex.c: Same change.
+	* parser.c: Same change.
+	* pt.c: Same change.
+	* semantics.c: Same change.
+	* typeck.c: Same change.
+	* Make-lang.in (cp/decl.o): Depend on c-family/c-objc.h.
+	(cp/decl2.o): Same change.
+	(cp/call.o): Same change.
+	(cp/error.o): Same change.
+	(cp/lex.o): Same change.
+	(cp/parser.o): Same change.
+	(cp/pt.o): Same change.
+	(cp/semantics.o): Same change.
+	(cp/typeck.o): Same change.
+	* config-lang.in (gtfiles): Added c-family/c-objc.h.
+	
 2010-12-03  Laurynas Biveinis  <laurynas.biveinis@gmail.com>
 
 	* cp-tree.h (struct aggr_init_expr_arg_iterator_d): Remove GTY
Index: cp/pt.c
===================================================================
--- cp/pt.c	(revision 167425)
+++ cp/pt.c	(working copy)
@@ -36,6 +36,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "flags.h"
 #include "cp-tree.h"
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "cp-objcp-common.h"
 #include "tree-inline.h"
 #include "decl.h"
Index: cp/semantics.c
===================================================================
--- cp/semantics.c	(revision 167425)
+++ cp/semantics.c	(working copy)
@@ -31,6 +31,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "tree.h"
 #include "cp-tree.h"
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "tree-inline.h"
 #include "tree-mudflap.h"
 #include "toplev.h"
Index: cp/decl2.c
===================================================================
--- cp/decl2.c	(revision 167425)
+++ cp/decl2.c	(working copy)
@@ -42,6 +42,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "cpplib.h"
 #include "target.h"
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "tree-mudflap.h"
 #include "cgraph.h"
 #include "tree-inline.h"
Index: cp/parser.c
===================================================================
--- cp/parser.c	(revision 167425)
+++ cp/parser.c	(working copy)
@@ -35,6 +35,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "target.h"
 #include "cgraph.h"
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "plugin.h"
 
 
Index: cp/config-lang.in
===================================================================
--- cp/config-lang.in	(revision 167425)
+++ cp/config-lang.in	(working copy)
@@ -30,4 +30,4 @@  compilers="cc1plus\$(exeext)"
 
 target_libs="target-libstdc++-v3"
 
-gtfiles="\$(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-lex.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/cp/class.c \$(srcdir)/cp/cp-objcp-common.c \$(srcdir)/cp/cp-lang.c"
+gtfiles="\$(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-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/cp/class.c \$(srcdir)/cp/cp-objcp-common.c \$(srcdir)/cp/cp-lang.c"
Index: cp/call.c
===================================================================
--- cp/call.c	(revision 167425)
+++ cp/call.c	(working copy)
@@ -38,6 +38,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "target.h"
 #include "convert.h"
 #include "langhooks.h"
+#include "c-family/c-objc.h"
 
 /* The various kinds of conversion.  */
 
Index: cp/lex.c
===================================================================
--- cp/lex.c	(revision 167425)
+++ cp/lex.c	(working copy)
@@ -33,6 +33,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "cpplib.h"
 #include "flags.h"
 #include "c-family/c-pragma.h"
+#include "c-family/c-objc.h"
 #include "output.h"
 #include "tm_p.h"
 #include "timevar.h"
Index: c-decl.c
===================================================================
--- c-decl.c	(revision 167425)
+++ c-decl.c	(working copy)
@@ -46,6 +46,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "opts.h"
 #include "timevar.h"
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "c-family/c-pragma.h"
 #include "c-lang.h"
 #include "langhooks.h"
Index: c-typeck.c
===================================================================
--- c-typeck.c	(revision 167425)
+++ c-typeck.c	(working copy)
@@ -40,6 +40,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "tree-iterator.h"
 #include "bitmap.h"
 #include "gimple.h"
+#include "c-family/c-objc.h"
 
 /* Possible cases of implicit bad conversions.  Used to select
    diagnostic messages in convert_for_assignment.  */
Index: Makefile.in
===================================================================
--- Makefile.in	(revision 167425)
+++ Makefile.in	(working copy)
@@ -2025,7 +2025,7 @@  c-decl.o : c-decl.c c-lang.h $(CONFIG_H) $(SYSTEM_
 	$(HASHTAB_H) $(LIBFUNCS_H) $(EXCEPT_H) $(LANGHOOKS_DEF_H) \
 	$(TREE_DUMP_H) $(C_COMMON_H) $(CPPLIB_H) $(DIAGNOSTIC_CORE_H) \
 	$(INPUT_H) langhooks.h tree-mudflap.h pointer-set.h tree-iterator.h \
-	$(PLUGIN_H) c-family/c-ada-spec.h
+	$(PLUGIN_H) c-family/c-ada-spec.h c-family/c-objc.h
 
 c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
 	$(C_TREE_H) $(FLAGS_H) $(DIAGNOSTIC_H) $(TM_P_H)
@@ -2046,11 +2046,13 @@  c-parser.o : c-parser.c $(CONFIG_H) $(SYSTEM_H) co
 	$(TM_H) $(TREE_H) $(C_TREE_H) $(C_COMMON_H) $(C_PRAGMA_H) $(CPPLIB_H) \
 	$(GGC_H) $(TIMEVAR_H) $(INPUT_H) $(FLAGS_H) output.h \
 	gt-c-parser.h langhooks.h \
-	$(VEC_H) $(TARGET_H) $(CGRAPH_H) $(PLUGIN_H)
+	$(VEC_H) $(TARGET_H) $(CGRAPH_H) $(PLUGIN_H) \
+	 c-family/c-objc.h
 
 c-typeck.o : c-typeck.c c-lang.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
 	$(TREE_H) $(C_TREE_H) $(TARGET_H) $(FLAGS_H) intl.h output.h $(EXPR_H) \
-	langhooks.h tree-iterator.h $(BITMAP_H) $(GIMPLE_H)
+	langhooks.h tree-iterator.h $(BITMAP_H) $(GIMPLE_H) \
+	 c-family/c-objc.h
 
 
 
@@ -2094,7 +2096,7 @@  c-family/c-common.o : c-family/c-common.c $(CONFIG
 	$(TM_H) $(TREE_H) \
 	$(OBSTACK_H) $(C_COMMON_H) $(FLAGS_H) toplev.h output.h $(C_PRAGMA_H) \
 	$(GGC_H) builtin-types.def builtin-attrs.def \
-	$(DIAGNOSTIC_H) langhooks.h \
+	$(DIAGNOSTIC_H) langhooks.h c-family/c-objc.h \
 	$(TARGET_H) tree-iterator.h langhooks.h tree-mudflap.h \
 	intl.h $(OPTS_H) $(CPPLIB_H) $(TREE_INLINE_H) $(HASHTAB_H) \
 	$(BUILTINS_DEF) $(CGRAPH_H) $(BASIC_BLOCK_H) $(TARGET_DEF_H) \
@@ -2114,7 +2116,7 @@  c-family/c-dump.o : c-family/c-dump.c $(CONFIG_H)
 c-family/c-format.o : c-family/c-format.c c-family/c-format.h \
 	$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) langhooks.h \
 	$(C_COMMON_H) $(FLAGS_H) intl.h \
-	$(DIAGNOSTIC_CORE_H) alloc-pool.h
+	$(DIAGNOSTIC_CORE_H) alloc-pool.h c-family/c-objc.h
 
 c-family/c-gimplify.o : c-family/c-gimplify.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \
 	$(C_COMMON_H) $(DIAGNOSTIC_CORE_H) $(GIMPLE_H) \
@@ -2169,7 +2171,7 @@  c-family/c-ada-spec.o : c-family/c-ada-spec.c c-fa
 	coretypes.h tree-iterator.h tree-pass.h output.h
 
 c-family/stub-objc.o : c-family/stub-objc.c $(CONFIG_H) $(SYSTEM_H) \
-	coretypes.h $(TREE_H) $(C_COMMON_H)
+	coretypes.h $(TREE_H) $(C_COMMON_H) c-family/c-objc.h
 
 
 # Files used by all variants of C and some other languages.
@@ -4562,7 +4564,8 @@  PLUGIN_HEADERS = $(TREE_H) $(CONFIG_H) $(SYSTEM_H)
   $(GGC_H) $(TREE_DUMP_H) $(PRETTY_PRINT_H) $(OPTS_H) $(PARAMS_H) plugin.def \
   $(tm_file_list) $(tm_include_list) $(tm_p_file_list) $(tm_p_include_list) \
   $(host_xm_file_list) $(host_xm_include_list) $(xm_include_list) \
-  intl.h $(PLUGIN_VERSION_H) $(DIAGNOSTIC_H) $(C_COMMON_H) $(C_PRETTY_PRINT_H) \
+  intl.h $(PLUGIN_VERSION_H) $(DIAGNOSTIC_H) \
+  $(C_COMMON_H) c-family/c-objc.h $(C_PRETTY_PRINT_H) \
   tree-iterator.h $(PLUGIN_H) $(TREE_FLOW_H) langhooks.h incpath.h debug.h \
   $(EXCEPT_H) tree-ssa-sccvn.h real.h output.h $(IPA_UTILS_H) \
   $(C_PRAGMA_H)  $(CPPLIB_H)  $(FUNCTION_H) \
Index: c-parser.c
===================================================================
--- c-parser.c	(revision 167425)
+++ c-parser.c	(working copy)
@@ -52,6 +52,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "output.h"
 #include "ggc.h"
 #include "c-family/c-common.h"
+#include "c-family/c-objc.h"
 #include "vec.h"
 #include "target.h"
 #include "cgraph.h"