Following discussion with Zem, we've agreed that the objc data structure design will proceed as follows: Zem will take this patch: Index: c-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-tree.h,v retrieving revision 1.187 diff -u -p -u -p -r1.187 c-tree.h --- c-tree.h 11 Nov 2004 23:13:10 -0000 1.187 +++ c-tree.h 23 Nov 2004 18:54:26 -0000 @@ -73,6 +73,8 @@ struct lang_type GTY(()) /* In an ENUMERAL_TYPE, the min and max values. */ tree enum_min; tree enum_max; + /* In a RECORD_TYPE, . */ + tree objc_protocol; }; /* Record whether a type or decl was written with nonconstant size. Index: cp/cp-tree.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/cp-tree.h,v retrieving revision 1.1070 diff -u -p -u -p -r1.1070 cp-tree.h --- cp/cp-tree.h 10 Nov 2004 17:34:47 -0000 1.1070 +++ cp/cp-tree.h 23 Nov 2004 18:54:28 -0000 @@ -1060,6 +1060,9 @@ struct lang_type_class GTY(()) tree decl_list; tree template_info; tree befriending_classes; + + /* . */ + tree objc_protocol; }; struct lang_type_ptrmem GTY(()) (with comments and possibly field names improved), and determine what impact it has on C and C++ compile time, and C and C++ PCH size. For C++, he'll use our Finder_FE benchmark for both time and PCH size, for C I suggest that the PCH be one that just contains #include on Darwin, and use some reasonable and convenient benchmark for time. If these results show that there's not significant degradation, that is less than 1% for compile speed and increase in PCH size, then this should solve his problem and let him proceed with the objc data structure changes. If there is significant degradation, we'll look at making these fields be inserted only when they're actually needed.