/* APPLE LOCAL PFE */
/* Persistent Front End (PFE) struct size validation structs
   to be checked.
   Copyright (C) 2001
   Free Software Foundation, Inc.
   Contributed by Apple Computer Inc.

This file is part of GNU CC.

GNU CC 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 2, or (at your option)
any later version.

GNU CC 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 GNU CC; see the file COPYING.  If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  */

/*
DEFCHECKSTRUCT(struct-name, size)

The struct-name is the exact name of th struct to be checked.
The size is it's assumed sizeof() size.   If you don't know
it, put in anything.   When the check is done (using the 
-fpfedbg=check-structs option) it will display what the size
should be.

Once the sizes are known the message showing the correct size
will only be shown if some future merge with the fsf causes
it to change.

Place the new DEFCHECKSTRUCT's in the section where that struct
is actually declared.  There are 3 categories:

  1. Structs defined in accessible headers for common compiler
     code.
  
  2. Structs defined privately in common compiler code.
  
  3. Language-specific structs defined privately or in accessible
     headers.

 Corrsponding to each of these DEFCHECKSTRUCT is a function that
 specifically checks the size of the associated struct.  These
 functions are created using the DEFINE_CHECK_STRUCT_FUNCTION
 (defined in pfe-header.h).  Of course the ones that access structs
 private to some file are placed in that file.  
 
 Note, ALL the structs to be checked for all the languages currently
 supported for pfe have a DEFCHECKSTRUCT specified this one file.  We
 could have separate .def files but what's the point?  It only
 complicates the build with more file dependencies and this is only
 used after a fsf merge.  Of course macros are needed to control
 which group of DEFCHECKSTRUCT's are used following the above
 mentioned categories.  */

/*-------------------------------------------------------------------*/

#ifdef GCC_STRUCTS
/* rtl.h */
DEFCHECKSTRUCT (rtunion_def_union, 4)
DEFCHECKSTRUCT (rtx_def, 8)
DEFCHECKSTRUCT (rtvec_def, 8)

/* tree.h */
DEFCHECKSTRUCT (tree_node_union, 112)
DEFCHECKSTRUCT (tree_common, 12)
DEFCHECKSTRUCT (tree_int_cst, 24)
DEFCHECKSTRUCT (tree_real_cst, 36)
DEFCHECKSTRUCT (tree_string, 24)
DEFCHECKSTRUCT (tree_complex, 24)
DEFCHECKSTRUCT (tree_vector, 24)
DEFCHECKSTRUCT (tree_identifier, 20)
DEFCHECKSTRUCT (tree_decl, 112)
DEFCHECKSTRUCT (tree_type, 88)
DEFCHECKSTRUCT (tree_list, 20)
DEFCHECKSTRUCT (tree_vec, 20)
DEFCHECKSTRUCT (tree_exp, 20)
DEFCHECKSTRUCT (tree_block, 40)

/* varray.h */
DEFCHECKSTRUCT (varray_data_union, 8)
DEFCHECKSTRUCT (varray_head_tag, 24)

/* cpplib.h */
DEFCHECKSTRUCT (cpp_token, 16)
DEFCHECKSTRUCT (cpp_hashnode, 20)

/* cpplib.c */
DEFCHECKSTRUCT (answer, 24)

/* cppmacro.c */
DEFCHECKSTRUCT (cpp_macro, 24)

/* except.c */
DEFCHECKSTRUCT (eh_status, 80)
DEFCHECKSTRUCT (eh_region, 52)

/* function.c */
DEFCHECKSTRUCT (function, 264)
DEFCHECKSTRUCT (expr_status, 28)
DEFCHECKSTRUCT (emit_status, 52)
DEFCHECKSTRUCT (sequence_stack, 16)
DEFCHECKSTRUCT (temp_slot, 48)
DEFCHECKSTRUCT (var_refs_queue, 16)

/* ggc-page.c */
DEFCHECKSTRUCT (page_entry, 32)
DEFCHECKSTRUCT (page_group, 16)
DEFCHECKSTRUCT (page_table_chain, 1024)
DEFCHECKSTRUCT (globals, 1332)

/* integrate.c */
DEFCHECKSTRUCT (initial_value_struct, 12)
DEFCHECKSTRUCT (initial_value_pair, 8)

/* varasm.c */
DEFCHECKSTRUCT (pool_constant, 36)
DEFCHECKSTRUCT (varasm_status, 24)
DEFCHECKSTRUCT (constant_descriptor, 20)
DEFCHECKSTRUCT (rtx_const, 24)

#endif /* GCC_STRUCTS */
/*-------------------------------------------------------------------*/
#ifdef GCC_C_STRUCTS

/* c-decl.c */
DEFCHECKSTRUCT (c_language_function, 44)
DEFCHECKSTRUCT (binding_level, 40)

#endif /* GCC_C_STRUCTS */
/*-------------------------------------------------------------------*/
#ifdef GCC_CP_STRUCTS

/* pfe/cp-freeze-thaw.c */
DEFCHECKSTRUCT (cp_language_function, 92)
DEFCHECKSTRUCT (saved_scope, 100)
DEFCHECKSTRUCT (operator_name_info_t, 12)

/* cp/decl.c */
DEFCHECKSTRUCT (binding_level, 52)
DEFCHECKSTRUCT (named_label_use_list, 24)
DEFCHECKSTRUCT (named_label_list, 28)

/* cp/spew.c */
DEFCHECKSTRUCT (unparsed_text, 28)

#endif /* GCC_CP_STRUCTS */
/*-------------------------------------------------------------------*/
#ifdef GCC_OBJC_STRUCTS

/* objc-act.h */
DEFCHECKSTRUCT (hashed_attribute, 8)
DEFCHECKSTRUCT (hashed_entry, 12)

#endif /* GCC_OBJC_STRUCTS */
/*-------------------------------------------------------------------*/
