Right now there is no documentation for the GCC tree -> rtl interfaces
(or more generally the interfaces for adding new languages).

Such documentation would be of great benefit to the project.  Until such
time as we can formally start documenting the interface this file will
serve as a repository for information on these interface and any incompatable
changes we've made.

2001-02-26:
  A DECL_INITIAL of NULL_TREE or error_mark_node in a VAR_DECL is no longer
  taken to signify a tentative definition which should not be emitted until
  end-of-file.  Frontends which want that behavior should set
  DECL_DEFER_OUTPUT before calling rest_of_decl_compilation.

Aug 31, 1998:
  The interface to HANDLE_PRAGMA has changed.  It now takes three arguments.
  The first two are pointers to functions that should be used to read characters
  from the input stream, and to push them back into the input stream respectively.
  The third argument is a pointer to a null terminate string which is the first
  word after #pragma.  The expression supplied by HANDLE_PRAGMA should return
  non-zero if it parsed and implemented the pragma.  Otherwise it should return
  zero, and leave the input stream as it was before the expression was evaluated.

  A new back-end definable macro has been added: INSERT_ATTRIBUTES.  This macro
  allows backend to add attributes to decls as they are created.

Jun 10, 1998:
  The interface to lang_decode_option has changed. It now uses and argc/argv
  interface to allow for options that use more than one input string. The new
  declaration is: int lang_decode_option (int argc, char** argv). It now
  returns the number of input strings processed, or 0 if the option is
  unknown.

Jun  7, 1998:
  Front-ends must now define lang_init_options.  It is safe for this
  function to do nothing.  See c-lang.c.

Apr 21, 1998:
  Front ends which link with c-common or other files from the C/C++
  front-ends may need to handle TI types.  Look for references to
  [unsigned]int_DI_type_node in your front end.  If you have references
  to these variables, you'll need up update the front end.

  To update the front end you must mirror all the code which currently
  deals with intDI_type_node to also handle intTI_type_node.


Apr 7, 1998:
  The interface between toplev.c and the language front ends for opening the
  source file has changed:

  o init_lex() has been renamed to init_parse (char *filename) where filename
    is the name of the source file.
  o The code in toplev.c which opened the source file should be moved to
    the new init_parse function.
  o toplev.c now calls finish_parse() instead of closing the source file
    using fclose(). This should now be done in finish_parse, if necessary.

Apr 1, 1998:
  Front-ends must now define lang_print_xnode.  It is safe for this
  function to do nothing.  See c-lang.c.

Feb 1, 1998:

  GCC used to store structure sizes & offsets to elements as bitsize
  quantities.  This causes problems because a structure can only be
  (target memsize / 8) bytes long (this may effect arrays too).  This
  is particularly problematical on machines with small address spaces.

  So:

    All trees that represent sizes in bits should have a TREE_TYPE of
    bitsizetype (rather than sizetype).

    Accordingly, when such values are computed / initialized, care has to
    be takes to use / compute the proper type.

    When a size in bits is converted into a size in bytes, which is expressed
    in trees, care should be taken to change the tree's type again to sizetype.

    We've updated C, C++, Fortran & Objective-C to work with the new
    scheme.  Other languages will need to be updated accordingly.
    Contact amylaar@cygnus.com for additional information.

?? 1997:

  In an effort to decrease cache thrashing and useless loads we've changed the
  third argument to the DEFTREECODE macro to be a single char.  This will
  affect languages that defined their own tree codes (usually in a .def file).

  Old way:

    DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", "d", 0)

  New way:

    DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", 'd', 0)
