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
  nonzero 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)
