Annotation of gcc/cp/gxxint.texi, revision 1.1.1.1

1.1       root        1: \input texinfo  @c -*-texinfo-*-
                      2: @c %**start of header 
                      3: @setfilename g++int.info
                      4: @settitle G++ internals
                      5: @setchapternewpage odd
                      6: @c %**end of header
                      7:      
                      8: @node Top, Limitations of g++, (dir), (dir)
                      9: @chapter Internal Architecture of the Compiler
                     10: 
                     11: This is meant to describe the C++ front-end for gcc in detail.
                     12: Questions and comments to mrs@@cygnus.com.
                     13: 
                     14: @menu
                     15: * Limitations of g++::          
                     16: * Routines::                    
                     17: * Implementation Specifics::    
                     18: * Glossary::                    
                     19: * Macros::                      
                     20: * Typical Behavior::            
                     21: * Coding Conventions::          
                     22: * Templates::                   
                     23: * Access Control::              
                     24: * Error Reporting::             
                     25: * Parser::                      
                     26: * Copying Objects::             
                     27: * Exception Handling::          
                     28: * Free Store::                  
                     29: * Concept Index::               
                     30: @end menu
                     31: 
                     32: @node Limitations of g++, Routines, Top, Top
                     33: @section Limitations of g++
                     34: 
                     35: @itemize @bullet
                     36: @item
                     37: Limitations on input source code: 240 nesting levels with the parser
                     38: stacksize (YYSTACKSIZE) set to 500 (the default), and requires around
                     39: 16.4k swap space per nesting level.  The parser needs about 2.09 *
                     40: number of nesting levels worth of stackspace.
                     41: 
                     42: @cindex pushdecl_class_level
                     43: @item
                     44: I suspect there are other uses of pushdecl_class_level that do not call
                     45: set_identifier_type_value in tandem with the call to
                     46: pushdecl_class_level.  It would seem to be an omission.
                     47: 
                     48: @cindex access checking
                     49: @item
                     50: Access checking is unimplemented for nested types.
                     51: 
                     52: @cindex @code{volatile}
                     53: @item
                     54: @code{volatile} is not implemented in general.
                     55: 
                     56: @cindex pointers to members
                     57: @item
                     58: Pointers to members are only minimally supported, and there are places
                     59: where the grammar doesn't even properly accept them yet.
                     60: 
                     61: @cindex multiple inheritance
                     62: @item
                     63: @code{this} will be wrong in virtual members functions defined in a
                     64: virtual base class, when they are overridden in a derived class, when
                     65: called via a non-left most object.
                     66: 
                     67: An example would be:
                     68: 
                     69: @example
                     70: extern "C" int printf(const char*, ...);
                     71: struct A @{ virtual void f() @{ @} @};
                     72: struct B : virtual A @{ int b; B() : b(0) @{@} void f() @{ b++; @} @};
                     73: struct C : B @{@};
                     74: struct D : B @{@};
                     75: struct E : C, D @{@};
                     76: int main()
                     77: @{
                     78:   E e;
                     79:   C& c = e; D& d = e;
                     80:   c.f(); d.f();
                     81:   printf ("C::b = %d, D::b = %d\n", e.C::b, e.D::b);
                     82:   return 0;
                     83: @}
                     84: @end example
                     85: 
                     86: This will print out 2, 0, instead of 1,1.
                     87: 
                     88: @end itemize
                     89: 
                     90: @node Routines, Implementation Specifics, Limitations of g++, Top
                     91: @section Routines
                     92: 
                     93: This section describes some of the routines used in the C++ front-end.
                     94: 
                     95: @code{build_vtable} and @code{prepare_fresh_vtable} is used only within
                     96: the @file{cp-class.c} file, and only in @code{finish_struct} and
                     97: @code{modify_vtable_entries}.
                     98: 
                     99: @code{build_vtable}, @code{prepare_fresh_vtable}, and
                    100: @code{finish_struct} are the only routines that set @code{DECL_VPARENT}.
                    101: 
                    102: @code{finish_struct} can steal the virtual function table from parents,
                    103: this prohibits related_vslot from working.  When finish_struct steals,
                    104: we know that
                    105: 
                    106: @example
                    107: get_binfo (DECL_FIELD_CONTEXT (CLASSTYPE_VFIELD (t)), t, 0)
                    108: @end example
                    109: 
                    110: @noindent
                    111: will get the related binfo.
                    112: 
                    113: @code{layout_basetypes} does something with the VIRTUALS.
                    114: 
                    115: Supposedly (according to Tiemann) most of the breadth first searching
                    116: done, like in @code{get_base_distance} and in @code{get_binfo} was not
                    117: because of any design decision.  I have since found out the at least one
                    118: part of the compiler needs the notion of depth first binfo searching, I
                    119: am going to try and convert the whole thing, it should just work.  The
                    120: term left-most refers to the depth first left-most node.  It uses
                    121: @code{MAIN_VARIANT == type} as the condition to get left-most, because
                    122: the things that have @code{BINFO_OFFSET}s of zero are shared and will
                    123: have themselves as their own @code{MAIN_VARIANT}s.  The non-shared right
                    124: ones, are copies of the left-most one, hence if it is its own
                    125: @code{MAIN_VARIENT}, we know it IS a left-most one, if it is not, it is
                    126: a non-left-most one.
                    127: 
                    128: @code{get_base_distance}'s path and distance matters in its use in:
                    129: 
                    130: @itemize @bullet
                    131: @item
                    132: @code{prepare_fresh_vtable} (the code is probably wrong)
                    133: @item
                    134: @code{init_vfields} Depends upon distance probably in a safe way,
                    135: build_offset_ref might use partial paths to do further lookups,
                    136: hack_identifier is probably not properly checking access.
                    137: 
                    138: @item
                    139: @code{get_first_matching_virtual} probably should check for
                    140: @code{get_base_distance} returning -2.
                    141: 
                    142: @item
                    143: @code{resolve_offset_ref} should be called in a more deterministic
                    144: manner.  Right now, it is called in some random contexts, like for
                    145: arguments at @code{build_method_call} time, @code{default_conversion}
                    146: time, @code{convert_arguments} time, @code{build_unary_op} time,
                    147: @code{build_c_cast} time, @code{build_modify_expr} time,
                    148: @code{convert_for_assignment} time, and
                    149: @code{convert_for_initialization} time.
                    150: 
                    151: But, there are still more contexts it needs to be called in, one was the
                    152: ever simple:
                    153: 
                    154: @example
                    155: if (obj.*pmi != 7)
                    156:    @dots{}
                    157: @end example
                    158: 
                    159: Seems that the problems were due to the fact that @code{TREE_TYPE} of
                    160: the @code{OFFSET_REF} was not a @code{OFFSET_TYPE}, but rather the type
                    161: of the referent (like @code{INTEGER_TYPE}).  This problem was fixed by
                    162: changing @code{default_conversion} to check @code{TREE_CODE (x)},
                    163: instead of only checking @code{TREE_CODE (TREE_TYPE (x))} to see if it
                    164: was @code{OFFSET_TYPE}.
                    165: 
                    166: @end itemize
                    167: 
                    168: @node Implementation Specifics, Glossary, Routines, Top
                    169: @section Implementation Specifics
                    170: 
                    171: @itemize @bullet
                    172: @item Explicit Initialization
                    173: 
                    174: The global list @code{current_member_init_list} contains the list of
                    175: mem-initializers specified in a constructor declaration.  For example:
                    176: 
                    177: @example
                    178: foo::foo() : a(1), b(2) @{@}
                    179: @end example
                    180: 
                    181: @noindent
                    182: will initialize @samp{a} with 1 and @samp{b} with 2.
                    183: @code{expand_member_init} places each initialization (a with 1) on the
                    184: global list.  Then, when the fndecl is being processed,
                    185: @code{emit_base_init} runs down the list, initializing them.  It used to
                    186: be the case that g++ first ran down @code{current_member_init_list},
                    187: then ran down the list of members initializing the ones that weren't
                    188: explicitly initialized.  Things were rewritten to perform the
                    189: initializations in order of declaration in the class.  So, for the above
                    190: example, @samp{a} and @samp{b} will be initialized in the order that
                    191: they were declared:
                    192: 
                    193: @example
                    194: class foo @{ public: int b; int a; foo (); @};
                    195: @end example
                    196: 
                    197: @noindent
                    198: Thus, @samp{b} will be initialized with 2 first, then @samp{a} will be
                    199: initialized with 1, regardless of how they're listed in the mem-initializer.
                    200: 
                    201: @item Argument Matching
                    202: 
                    203: In early 1993, the argument matching scheme in @sc{gnu} C++ changed
                    204: significantly.  The original code was completely replaced with a new
                    205: method that will, hopefully, be easier to understand and make fixing
                    206: specific cases much easier.
                    207: 
                    208: The @samp{-fansi-overloading} option is used to enable the new code; at
                    209: some point in the future, it will become the default behavior of the
                    210: compiler.
                    211: 
                    212: The file @file{cp-call.c} contains all of the new work, in the functions
                    213: @code{rank_for_overload}, @code{compute_harshness},
                    214: @code{compute_conversion_costs}, and @code{ideal_candidate}.
                    215: 
                    216: Instead of using obscure numerical values, the quality of an argument
                    217: match is now represented by clear, individual codes.  The new data
                    218: structure @code{struct harshness} (it used to be an @code{unsigned}
                    219: number) contains:
                    220: 
                    221: @enumerate a
                    222: @item the @samp{code} field, to signify what was involved in matching two
                    223: arguments;
                    224: @item the @samp{distance} field, used in situations where inheritance
                    225: decides which function should be called (one is ``closer'' than
                    226: another);
                    227: @item and the @samp{int_penalty} field, used by some codes as a tie-breaker.
                    228: @end enumerate
                    229: 
                    230: The @samp{code} field is a number with a given bit set for each type of
                    231: code, OR'd together.  The new codes are:
                    232: 
                    233: @itemize @bullet
                    234: @item @code{EVIL_CODE}
                    235: The argument was not a permissible match.
                    236: 
                    237: @item @code{CONST_CODE}
                    238: Currently, this is only used by @code{compute_conversion_costs}, to
                    239: distinguish when a non-@code{const} member function is called from a
                    240: @code{const} member function.
                    241: 
                    242: @item @code{ELLIPSIS_CODE}
                    243: A match against an ellipsis @samp{...} is considered worse than all others.
                    244: 
                    245: @item @code{USER_CODE}
                    246: Used for a match involving a user-defined conversion.
                    247: 
                    248: @item @code{STD_CODE}
                    249: A match involving a standard conversion.
                    250: 
                    251: @item @code{PROMO_CODE}
                    252: A match involving an integral promotion.  For these, the
                    253: @code{int_penalty} field is used to handle the ARM's rule (XXX cite)
                    254: that a smaller @code{unsigned} type should promote to a @code{int}, not
                    255: to an @code{unsigned int}.
                    256: 
                    257: @item @code{QUAL_CODE}
                    258: Used to mark use of qualifiers like @code{const} and @code{volatile}.
                    259: 
                    260: @item @code{TRIVIAL_CODE}
                    261: Used for trivial conversions.  The @samp{int_penalty} field is used by
                    262: @code{convert_harshness} to communicate further penalty information back
                    263: to @code{build_overload_call_real} when deciding which function should
                    264: be call.
                    265: @end itemize
                    266: 
                    267: The functions @code{convert_to_aggr} and @code{build_method_call} use
                    268: @code{compute_conversion_costs} to rate each argument's suitability for
                    269: a given candidate function (that's how we get the list of candidates for
                    270: @code{ideal_candidate}).
                    271: 
                    272: @end itemize
                    273: 
                    274: @node Glossary, Macros, Implementation Specifics, Top
                    275: @section Glossary
                    276: 
                    277: @table @r
                    278: @item binfo
                    279: The main data structure in the compiler used to represent the
                    280: inheritance relationships between classes.  The data in the binfo can be
                    281: accessed by the BINFO_ accessor macros.
                    282: 
                    283: @item vtable
                    284: @itemx virtual function table
                    285: 
                    286: The virtual function table holds information used in virtual function
                    287: dispatching.  In the compiler, they are usually referred to as vtables,
                    288: or vtbls.  The first index is not used in the normal way, I believe it
                    289: is probably used for the virtual destructor.
                    290: 
                    291: @item vfield
                    292: 
                    293: vfields can be thought of as the base information needed to build
                    294: vtables.  For every vtable that exists for a class, there is a vfield.
                    295: See also vtable and virtual function table pointer.  When a type is used
                    296: as a base class to another type, the virtual function table for the
                    297: derived class can be based upon the vtable for the base class, just
                    298: extended to include the additional virtual methods declared in the
                    299: derived class.  The virtual function table from a virtual base class is
                    300: never reused in a derived class.  @code{is_normal} depends upon this.
                    301: 
                    302: @item virtual function table pointer
                    303: 
                    304: These are @code{FIELD_DECL}s that are pointer types that point to
                    305: vtables.  See also vtable and vfield.
                    306: @end table
                    307: 
                    308: @node Macros, Typical Behavior, Glossary, Top
                    309: @section Macros
                    310: 
                    311: This section describes some of the macros used on trees.  The list
                    312: should be alphabetical.  Eventually all macros should be documented
                    313: here.  There are some postscript drawings that can be used to better
                    314: understnad from of the more complex data structures, contact Mike Stump
                    315: (@code{mrs@@cygnus.com}) for information about them.
                    316: 
                    317: @table @code
                    318: @item BINFO_BASETYPES
                    319: A vector of additional binfos for the types inherited by this basetype.
                    320: The binfos are fully unshared (except for virtual bases, in which
                    321: case the binfo structure is shared).
                    322: 
                    323:    If this basetype describes type D as inherited in C,
                    324:    and if the basetypes of D are E anf F,
                    325:    then this vector contains binfos for inheritance of E and F by C.
                    326: 
                    327: Has values of:
                    328: 
                    329:        TREE_VECs
                    330: 
                    331: 
                    332: @item BINFO_INHERITANCE_CHAIN
                    333: Temporarily used to represent specific inheritances.  It usually points
                    334: to the binfo associated with the lesser derived type, but it can be
                    335: reversed by reverse_path.  For example:
                    336: 
                    337: @example
                    338:        Z ZbY   least derived
                    339:        |
                    340:        Y YbX
                    341:        |
                    342:        X Xb    most derived
                    343: 
                    344: TYPE_BINFO (X) == Xb
                    345: BINFO_INHERITANCE_CHAIN (Xb) == YbX
                    346: BINFO_INHERITANCE_CHAIN (Yb) == ZbY
                    347: BINFO_INHERITANCE_CHAIN (Zb) == 0
                    348: @end example
                    349: 
                    350: Not sure is the above is really true, get_base_distance has is point
                    351: towards the most derived type, opposite from above.
                    352: 
                    353: Set by build_vbase_path, recursive_bounded_basetype_p,
                    354: get_base_distance, lookup_field, lookup_fnfields, and reverse_path.
                    355: 
                    356: What things can this be used on:
                    357: 
                    358:        TREE_VECs that are binfos
                    359: 
                    360: 
                    361: @item BINFO_OFFSET
                    362: The offset where this basetype appears in its containing type.
                    363: BINFO_OFFSET slot holds the offset (in bytes) from the base of the
                    364: complete object to the base of the part of the object that is allocated
                    365: on behalf of this `type'.  This is always 0 except when there is
                    366: multiple inheritance.
                    367: 
                    368: Used on TREE_VEC_ELTs of the binfos BINFO_BASETYPES (...) for example.
                    369: 
                    370: 
                    371: @item BINFO_VIRTUALS
                    372: A unique list of functions for the virtual function table.  See also
                    373: TYPE_BINFO_VIRTUALS.
                    374: 
                    375: What things can this be used on:
                    376: 
                    377:        TREE_VECs that are binfos
                    378: 
                    379: 
                    380: @item BINFO_VTABLE
                    381: Used to find the VAR_DECL that is the virtual function table associated
                    382: with this binfo.  See also TYPE_BINFO_VTABLE.  To get the virtual
                    383: function table pointer, see CLASSTYPE_VFIELD.
                    384: 
                    385: What things can this be used on:
                    386: 
                    387:        TREE_VECs that are binfos
                    388: 
                    389: Has values of:
                    390: 
                    391:        VAR_DECLs that are virtual function tables
                    392: 
                    393: 
                    394: @item BLOCK_SUPERCONTEXT
                    395: In the outermost scope of each function, it points to the FUNCTION_DECL
                    396: node.  It aids in better DWARF support of inline functions.
                    397: 
                    398: 
                    399: @item CLASSTYPE_TAGS
                    400: CLASSTYPE_TAGS is a linked (via TREE_CHAIN) list of member classes of a
                    401: class. TREE_PURPOSE is the name, TREE_VALUE is the type (pushclass scans
                    402: these and calls pushtag on them.)
                    403: 
                    404: finish_struct scans these to produce TYPE_DECLs to add to the
                    405: TYPE_FIELDS of the type.
                    406: 
                    407: It is expected that name found in the TREE_PURPOSE slot is unique,
                    408: resolve_scope_to_name is one such place that depends upon this
                    409: uniqueness.
                    410: 
                    411: 
                    412: @item CLASSTYPE_METHOD_VEC
                    413: The following is true after finish_struct has been called (on the
                    414: class?) but not before.  Before finish_struct is called, things are
                    415: different to some extent.  Contains a TREE_VEC of methods of the class.
                    416: The TREE_VEC_LENGTH is the number of differently named methods plus one
                    417: for the 0th entry.  The 0th entry is always allocated, and reserved for
                    418: ctors and dtors.  If there are none, TREE_VEC_ELT(N,0) == NULL_TREE.
                    419: Each entry of the TREE_VEC is a FUNCTION_DECL.  For each FUNCTION_DECL,
                    420: there is a DECL_CHAIN slot.  If the FUNCTION_DECL is the last one with a
                    421: given name, the DECL_CHAIN slot is NULL_TREE.  Otherwise it is the next
                    422: method that has the same name (but a different signature).  It would
                    423: seem that it is not true that because the DECL_CHAIN slot is used in
                    424: this way, we cannot call pushdecl to put the method in the global scope
                    425: (cause that would overwrite the TREE_CHAIN slot), because they use
                    426: different _CHAINs.  finish_struct_methods setups up one version of the
                    427: TREE_CHAIN slots on the FUNCTION_DECLs.
                    428: 
                    429: friends are kept in TREE_LISTs, so that there's no need to use their
                    430: TREE_CHAIN slot for anything.
                    431: 
                    432: Has values of:
                    433: 
                    434:        TREE_VECs
                    435:        
                    436: 
                    437: @item CLASSTYPE_VFIELD
                    438: Seems to be in the process of being renamed TYPE_VFIELD.  Use on types
                    439: to get the main virtual function table pointer.  To get the virtual
                    440: function table use BINFO_VTABLE (TYPE_BINFO ()).
                    441: 
                    442: Has values of:
                    443: 
                    444:        FIELD_DECLs that are virtual function table pointers
                    445: 
                    446: What things can this be used on:
                    447: 
                    448:        RECORD_TYPEs
                    449: 
                    450: 
                    451: @item DECL_CLASS_CONTEXT
                    452: Identifies the context that the _DECL was found in.  For virtual function
                    453: tables, it points to the type associated with the virtual function
                    454: table.  See also DECL_CONTEXT, DECL_FIELD_CONTEXT and DECL_FCONTEXT.
                    455: 
                    456: The difference between this and DECL_CONTEXT, is that for virtuals
                    457: functions like:
                    458: 
                    459: @example
                    460: struct A
                    461: @{
                    462:   virtual int f ();
                    463: @};
                    464: 
                    465: struct B : A
                    466: @{
                    467:   int f ();
                    468: @};
                    469: 
                    470: DECL_CONTEXT (A::f) == A
                    471: DECL_CLASS_CONTEXT (A::f) == A
                    472: 
                    473: DECL_CONTEXT (B::f) == A
                    474: DECL_CLASS_CONTEXT (B::f) == B
                    475: @end example
                    476: 
                    477: Has values of:
                    478: 
                    479:        RECORD_TYPEs, or UNION_TYPEs
                    480: 
                    481: What things can this be used on:
                    482: 
                    483:        TYPE_DECLs, _DECLs
                    484: 
                    485: 
                    486: @item DECL_CONTEXT
                    487: Identifies the context that the _DECL was found in.  Can be used on
                    488: virtual function tables to find the type associated with the virtual
                    489: function table, but since they are FIELD_DECLs, DECL_FIELD_CONTEXT is a
                    490: better access method.  Internally the same as DECL_FIELD_CONTEXT, so
                    491: don't us both.  See also DECL_FIELD_CONTEXT, DECL_FCONTEXT and
                    492: DECL_CLASS_CONTEXT.
                    493: 
                    494: Has values of:
                    495: 
                    496:        RECORD_TYPEs
                    497: 
                    498: 
                    499: What things can this be used on:
                    500: 
                    501: @display
                    502: VAR_DECLs that are virtual function tables
                    503: _DECLs
                    504: @end display
                    505: 
                    506: 
                    507: @item DECL_FIELD_CONTEXT
                    508: Identifies the context that the FIELD_DECL was found in.  Internally the
                    509: same as DECL_CONTEXT, so don't us both.  See also DECL_CONTEXT,
                    510: DECL_FCONTEXT and DECL_CLASS_CONTEXT.
                    511: 
                    512: Has values of:
                    513: 
                    514:        RECORD_TYPEs
                    515: 
                    516: What things can this be used on:
                    517: 
                    518: @display
                    519: FIELD_DECLs that are virtual function pointers
                    520: FIELD_DECLs
                    521: @end display
                    522: 
                    523: 
                    524: @item DECL_NESTED_TYPENAME
                    525: Holds the fully qualified type name.  Example, Base::Derived.
                    526: 
                    527: Has values of:
                    528: 
                    529:        IDENTIFIER_NODEs
                    530: 
                    531: What things can this be used on:
                    532: 
                    533:        TYPE_DECLs
                    534: 
                    535: 
                    536: @item DECL_NAME
                    537: 
                    538: Has values of:
                    539: 
                    540: @display
                    541: 0 for things that don't have names
                    542: IDENTIFIER_NODEs for TYPE_DECLs
                    543: @end display
                    544: 
                    545: @item DECL_IGNORED_P
                    546: A bit that can be set to inform the debug information output routines in
                    547: the back-end that a certain _DECL node should be totally ignored.
                    548: 
                    549: Used in cases where it is known that the debugging information will be
                    550: output in another file, or where a sub-type is known not to be needed
                    551: because the enclosing type is not needed.
                    552: 
                    553: A compiler constructed virtual destructor in derived classes that do not
                    554: define an exlicit destructor that was defined exlicit in a base class
                    555: has this bit set as well.  Also used on __FUNCTION__ and
                    556: __PRETTY_FUNCTION__ to mark they are ``compiler generated.''  c-decl and
                    557: c-lex.c both want DECL_IGNORED_P set for ``internally generated vars,''
                    558: and ``user-invisible variable.''
                    559: 
                    560: Functions built by the C++ front-end such as default destructors,
                    561: virtual desctructors and default constructors want to be marked that
                    562: they are compiler generated, but unsure why.
                    563: 
                    564: Currently, it is used in an absolute way in the C++ front-end, as an
                    565: optimization, to tell the debug information output routines to not
                    566: generate debugging information that will be output by another separately
                    567: compiled file.
                    568: 
                    569: 
                    570: @item DECL_VIRTUAL_P
                    571: A flag used on FIELD_DECLs and VAR_DECLs.  (Documentation in tree.h is
                    572: wrong.)  Used in VAR_DECLs to indicate that the variable is a vtable.
                    573: It is also used in FIELD_DECLs for vtable pointers.
                    574: 
                    575: What things can this be used on:
                    576: 
                    577:        FIELD_DECLs and VAR_DECLs
                    578: 
                    579: 
                    580: @item DECL_VPARENT
                    581: Used to point to the parent type of the vtable if there is one, else it
                    582: is just the type associated with the vtable.  Because of the sharing of
                    583: virtual function tables that goes on, this slot is not very useful, and
                    584: is in fact, not used in the compiler at all.  It can be removed.
                    585: 
                    586: What things can this be used on:
                    587: 
                    588:        VAR_DECLs that are virtual function tables
                    589: 
                    590: Has values of:
                    591: 
                    592:        RECORD_TYPEs maybe UNION_TYPEs
                    593: 
                    594: 
                    595: @item DECL_FCONTEXT
                    596: Used to find the first baseclass in which this FIELD_DECL is defined.
                    597: See also DECL_CONTEXT, DECL_FIELD_CONTEXT and DECL_CLASS_CONTEXT.
                    598: 
                    599: How it is used:
                    600: 
                    601:        Used when writing out debugging information about vfield and
                    602:        vbase decls.
                    603: 
                    604: What things can this be used on:
                    605: 
                    606:        FIELD_DECLs that are virtual function pointers
                    607:        FIELD_DECLs
                    608: 
                    609: 
                    610: @item DECL_REFERENCE_SLOT
                    611: Used to hold the initialize for the reference.
                    612: 
                    613: What things can this be used on:
                    614: 
                    615:        PARM_DECLs and VAR_DECLs that have a reference type
                    616: 
                    617: 
                    618: @item DECL_VINDEX
                    619: Used for FUNCTION_DECLs in two different ways.  Before the structure
                    620: containing the FUNCTION_DECL is laid out, DECL_VINDEX may point to a
                    621: FUNCTION_DECL in a base class which is the FUNCTION_DECL which this
                    622: FUNCTION_DECL will replace as a virtual function.  When the class is
                    623: laid out, this pointer is changed to an INTEGER_CST node which is
                    624: suitable to find an index into the virtual function table.  See
                    625: get_vtable_entry as to how one can find the right index into the virtual
                    626: function table.  The first index 0, of a virtual function table it not
                    627: used in the normal way, so the first real index is 1.
                    628: 
                    629: DECL_VINDEX may be a TREE_LIST, that would seem to be a list of
                    630: overridden FUNCTION_DECLs.  add_virtual_function has code to deal with
                    631: this when it uses the variable base_fndecl_list, but it would seem that
                    632: somehow, it is possible for the TREE_LIST to pursist until method_call,
                    633: and it should not.
                    634: 
                    635: 
                    636: What things can this be used on:
                    637: 
                    638:        FUNCTION_DECLs
                    639: 
                    640: 
                    641: @item DECL_SOURCE_FILE
                    642: Identifies what source file a particular declaration was found in.
                    643: 
                    644: Has values of:
                    645: 
                    646:        "<built-in>" on TYPE_DECLs to mean the typedef is built in
                    647: 
                    648: 
                    649: @item DECL_SOURCE_LINE
                    650: Identifies what source line number in the source file the declaration
                    651: was found at.
                    652: 
                    653: Has values of:
                    654: 
                    655: @display
                    656: 0 for an undefined label
                    657: 
                    658: 0 for TYPE_DECLs that are internally generated
                    659: 
                    660: 0 for FUNCTION_DECLs for functions generated by the compiler
                    661:        (not yet, but should be)
                    662: 
                    663: 0 for ``magic'' arguments to functions, that the user has no
                    664:        control over
                    665: @end display
                    666: 
                    667: 
                    668: @item TREE_USED
                    669: 
                    670: Has values of:
                    671: 
                    672:        0 for unused labels
                    673: 
                    674: 
                    675: @item TREE_ADDRESSABLE
                    676: A flag that is set for any type that has a constructor.
                    677: 
                    678: 
                    679: @item TREE_COMPLEXITY
                    680: They seem a kludge way to track recursion, poping, and pushing.  They only
                    681: appear in cp-decl.c and cp-decl2.c, so the are a good candidate for
                    682: proper fixing, and removal.
                    683: 
                    684: 
                    685: @item TREE_PRIVATE
                    686: Set for FIELD_DECLs by finish_struct.  But not uniformly set.
                    687: 
                    688: The following routines do something with PRIVATE access:
                    689: build_method_call, alter_access, finish_struct_methods,
                    690: finish_struct, convert_to_aggr, CWriteLanguageDecl, CWriteLanguageType,
                    691: CWriteUseObject, compute_access, lookup_field, dfs_pushdecl,
                    692: GNU_xref_member, dbxout_type_fields, dbxout_type_method_1
                    693: 
                    694: 
                    695: @item TREE_PROTECTED
                    696: The following routines do something with PROTECTED access:
                    697: build_method_call, alter_access, finish_struct, convert_to_aggr,
                    698: CWriteLanguageDecl, CWriteLanguageType, CWriteUseObject,
                    699: compute_access, lookup_field, GNU_xref_member, dbxout_type_fields,
                    700: dbxout_type_method_1
                    701: 
                    702: 
                    703: @item TYPE_BINFO
                    704: Used to get the binfo for the type.
                    705: 
                    706: Has values of:
                    707: 
                    708:        TREE_VECs that are binfos
                    709: 
                    710: What things can this be used on:
                    711: 
                    712:        RECORD_TYPEs
                    713: 
                    714: 
                    715: @item TYPE_BINFO_BASETYPES
                    716: See also BINFO_BASETYPES.
                    717: 
                    718: @item TYPE_BINFO_VIRTUALS
                    719: A unique list of functions for the virtual function table.  See also
                    720: BINFO_VIRTUALS.
                    721: 
                    722: What things can this be used on:
                    723: 
                    724:        RECORD_TYPEs
                    725: 
                    726: 
                    727: @item TYPE_BINFO_VTABLE
                    728: Points to the virtual function table associated with the given type.
                    729: See also BINFO_VTABLE.
                    730: 
                    731: What things can this be used on:
                    732: 
                    733:        RECORD_TYPEs
                    734: 
                    735: Has values of:
                    736: 
                    737:        VAR_DECLs that are virtual function tables
                    738: 
                    739: 
                    740: @item TYPE_NAME
                    741: Names the type.
                    742: 
                    743: Has values of:
                    744: 
                    745: @display
                    746: 0 for things that don't have names.
                    747: should be IDENTIFIER_NODE for RECORD_TYPEs UNION_TYPEs and 
                    748:         ENUM_TYPEs.
                    749: TYPE_DECL for RECORD_TYPEs, UNION_TYPEs and ENUM_TYPEs, but 
                    750:         shouldn't be.
                    751: TYPE_DECL for typedefs, unsure why.
                    752: @end display
                    753: 
                    754: What things can one use this on:
                    755: 
                    756: @display
                    757: TYPE_DECLs
                    758: RECORD_TYPEs
                    759: UNION_TYPEs
                    760: ENUM_TYPEs
                    761: @end display
                    762: 
                    763: History:
                    764: 
                    765:        It currently points to the TYPE_DECL for RECORD_TYPEs,
                    766:        UNION_TYPEs and ENUM_TYPEs, but it should be history soon.
                    767: 
                    768: 
                    769: @item TYPE_METHODS
                    770: Synonym for @code{CLASSTYPE_METHOD_VEC}.  Chained together with
                    771: @code{TREE_CHAIN}.  @file{dbxout.c} uses this to get at the methods of a
                    772: class.
                    773: 
                    774: 
                    775: @item TYPE_DECL
                    776: Used to represent typedefs, and used to represent bindings layers.
                    777: 
                    778: Components:
                    779: 
                    780:        DECL_NAME is the name of the typedef.  For example, foo would
                    781:        be found in the DECL_NAME slot when @code{typedef int foo;} is
                    782:        seen.
                    783: 
                    784:        DECL_SOURCE_LINE identifies what source line number in the
                    785:        source file the declaration was found at.  A value of 0
                    786:        indicates that this TYPE_DECL is just an internal binding layer
                    787:        marker, and does not correspond to a user suppiled typedef.
                    788: 
                    789:        DECL_SOURCE_FILE
                    790: 
                    791: @item TYPE_FIELDS
                    792: A linked list (via @code{TREE_CHAIN}) of member types of a class.  The
                    793: list can contain @code{TYPE_DECL}s, but there can also be other things
                    794: in the list apparently.  See also @code{CLASSTYPE_TAGS}.
                    795: 
                    796: 
                    797: @item TYPE_VIRTUAL_P
                    798: A flag used on a @code{FIELD_DECL} or a @code{VAR_DECL}, indicates it is
                    799: a virtual function table or a pointer to one.  When used on a
                    800: @code{FUNCTION_DECL}, indicates that it is a virtual function.  When
                    801: used on an @code{IDENTIFIER_NODE}, indicates that a function with this
                    802: same name exists and has been declared virtual.
                    803: 
                    804: When used on types, it indicates that the type has virtual functions, or
                    805: is derived from one that does.
                    806: 
                    807: Not sure if the above about virtual function tables is still true.  See
                    808: also info on @code{DECL_VIRTUAL_P}.
                    809: 
                    810: What things can this be used on:
                    811: 
                    812:        FIELD_DECLs, VAR_DECLs, FUNCTION_DECLs, IDENTIFIER_NODEs
                    813: 
                    814: 
                    815: @item VF_BASETYPE_VALUE
                    816: Get the associated type from the binfo that caused the given vfield to
                    817: exist.  This is the least derived class (the most parent class) that
                    818: needed a virtual function table.  It is probably the case that all uses
                    819: of this field are misguided, but they need to be examined on a
                    820: case-by-case basis.  See history for more information on why the
                    821: previous statement was made.
                    822: 
                    823: Set at @code{finish_base_struct} time.
                    824: 
                    825: What things can this be used on:
                    826: 
                    827:        TREE_LISTs that are vfields
                    828: 
                    829: History:
                    830: 
                    831:        This field was used to determine if a virtual function table's
                    832:        slot should be filled in with a certain virtual function, by
                    833:        checking to see if the type returned by VF_BASETYPE_VALUE was a
                    834:        parent of the context in which the old virtual function existed.
                    835:        This incorrectly assumes that a given type _could_ not appear as
                    836:        a parent twice in a given inheritance lattice.  For single
                    837:        inheritance, this would in fact work, because a type could not
                    838:        possibly appear more than once in an inheritance lattice, but
                    839:        with multiple inheritance, a type can appear more than once.
                    840: 
                    841: 
                    842: @item VF_BINFO_VALUE
                    843: Identifies the binfo that caused this vfield to exist.  If this vfield
                    844: is from the first direct base class that has a virtual function table,
                    845: then VF_BINFO_VALUE is NULL_TREE, otherwise it will be the binfo of the
                    846: direct base where the vfield came from.  Can use @code{TREE_VIA_VIRTUAL}
                    847: on result to find out if it is a virtual base class.  Related to the
                    848: binfo found by
                    849: 
                    850: @example
                    851: get_binfo (VF_BASETYPE_VALUE (vfield), t, 0)
                    852: @end example
                    853: 
                    854: @noindent
                    855: where @samp{t} is the type that has the given vfield.
                    856: 
                    857: @example
                    858: get_binfo (VF_BASETYPE_VALUE (vfield), t, 0)
                    859: @end example
                    860: 
                    861: @noindent
                    862: will return the binfo for the the given vfield.
                    863: 
                    864: May or may not be set at @code{modify_vtable_entries} time.  Set at
                    865: @code{finish_base_struct} time.
                    866: 
                    867: What things can this be used on:
                    868: 
                    869:        TREE_LISTs that are vfields
                    870: 
                    871: 
                    872: @item VF_DERIVED_VALUE
                    873: Identifies the type of the most derived class of the vfield, excluding
                    874: the the class this vfield is for.
                    875: 
                    876: Set at @code{finish_base_struct} time.
                    877: 
                    878: What things can this be used on:
                    879: 
                    880:        TREE_LISTs that are vfields
                    881: 
                    882: 
                    883: @item VF_NORMAL_VALUE
                    884: Identifies the type of the most derived class of the vfield, including
                    885: the class this vfield is for.
                    886: 
                    887: Set at @code{finish_base_struct} time.
                    888: 
                    889: What things can this be used on:
                    890: 
                    891:        TREE_LISTs that are vfields
                    892: 
                    893: 
                    894: @item WRITABLE_VTABLES
                    895: This is a option that can be defined when building the compiler, that
                    896: will cause the compiler to output vtables into the data segment so that
                    897: the vtables maybe written.  This is undefined by default, because
                    898: normally the vtables should be unwritable.  People that implement object
                    899: I/O facilities may, or people that want to change the dynamic type of
                    900: objects may want to have the vtables writable.  Another way of achieving
                    901: this would be to make a copy of the vtable into writable memory, but the
                    902: drawback there is that that method only changes the type for one object.
                    903: 
                    904: @end table
                    905: 
                    906: @node Typical Behavior, Coding Conventions, Macros, Top
                    907: @section Typical Behavior
                    908: 
                    909: @cindex parse errors
                    910: 
                    911: Whenever seemingly normal code fails with errors like
                    912: @code{syntax error at `\@{'}, it's highly likely that grokdeclarator is
                    913: returning a NULL_TREE for whatever reason.
                    914: 
                    915: @node Coding Conventions, Templates, Typical Behavior, Top
                    916: @section Coding Conventions
                    917: 
                    918: It should never be that case that trees are modified in-place by the
                    919: back-end, @emph{unless} it is guaranteed that the semantics are the same
                    920: no matter how shared the tree structure is.  @file{fold-const.c} still
                    921: has some cases where this is not true, but rms hypothesizes that this
                    922: will never be a problem.
                    923: 
                    924: @node Templates, Access Control, Coding Conventions, Top
                    925: @section Templates
                    926: 
                    927: g++ uses the simple approach to instantiating templates: it blindly
                    928: generates the code for each instantiation as needed.  For class
                    929: templates, g++ pushes the template parameters into the namespace for the
                    930: duration of the instantiation; for function templates, it's a simple
                    931: search and replace.
                    932: 
                    933: This approach does not support any of the template definition-time error
                    934: checking that is being bandied about by X3J16.  It makes no attempt to deal
                    935: with name binding in a consistent way.
                    936: 
                    937: Instantiation of a class template is triggered by the use of a template
                    938: class anywhere but in a straight declaration like @code{class A<int>}.
                    939: This is wrong; in fact, it should not be triggered by typedefs or
                    940: declarations of pointers.  Now that explicit instantiation is supported,
                    941: this misfeature is not necessary.
                    942: 
                    943: Important functions:
                    944: 
                    945: @table @code
                    946: @item instantiate_class_template
                    947: This function 
                    948: @end table
                    949: 
                    950: @node Access Control, Error Reporting, Templates, Top
                    951: @section Access Control
                    952: The function compute_access returns one of three values:
                    953: 
                    954: @table @code
                    955: @item access_public
                    956: means that the field can be accessed by the current lexical scope.
                    957: 
                    958: @item access_protected
                    959: means that the field cannot be accessed by the current lexical scope
                    960: because it is protected.
                    961: 
                    962: @item access_private
                    963: means that the field cannot be accessed by the current lexical scope
                    964: because it is private.
                    965: @end table
                    966: 
                    967: DECL_ACCESS is used for access declarations; alter_access creates a list
                    968: of types and accesses for a given decl.
                    969: 
                    970: Formerly, DECL_@{PUBLIC,PROTECTED,PRIVATE@} corresponded to the return
                    971: codes of compute_access and were used as a cache for compute_access.
                    972: Now they are not used at all.
                    973: 
                    974: TREE_PROTECTED and TREE_PRIVATE are used to record the access levels
                    975: granted by the containing class.  BEWARE: TREE_PUBLIC means something
                    976: completely unrelated to access control!
                    977: 
                    978: @node Error Reporting, Parser, Access Control, Top
                    979: @section Error Reporting
                    980: 
                    981: The C++ front-end uses a call-back mechanism to allow functions to print
                    982: out reasonable strings for types and functions without putting extra
                    983: logic in the functions where errors are found.  The interface is through
                    984: the @code{cp_error} function (or @code{cp_warning}, etc.).  The
                    985: syntax is exactly like that of @code{error}, except that a few more
                    986: conversions are supported:
                    987: 
                    988: @itemize @bullet
                    989: @item
                    990: %C indicates a value of `enum tree_code'.
                    991: @item
                    992: %D indicates a *_DECL node.
                    993: @item
                    994: %E indicates a *_EXPR node.
                    995: @item
                    996: %L indicates a value of `enum languages'.
                    997: @item
                    998: %P indicates the name of a parameter (i.e. "this", "1", "2", ...)
                    999: @item
                   1000: %T indicates a *_TYPE node.
                   1001: @item
                   1002: %O indicates the name of an operator (MODIFY_EXPR -> "operator =").
                   1003: 
                   1004: @end itemize
                   1005: 
                   1006: There is some overlap between these; for instance, any of the node
                   1007: options can be used for printing an identifier (though only @code{%D}
                   1008: tries to decipher function names).
                   1009: 
                   1010: For a more verbose message (@code{class foo} as opposed to just @code{foo},
                   1011: including the return type for functions), use @code{%#c}.
                   1012: To have the line number on the error message indicate the line of the
                   1013: DECL, use @code{cp_error_at} and its ilk; to indicate which argument you want,
                   1014: use @code{%+D}, or it will default to the first.
                   1015: 
                   1016: @node Parser, Copying Objects, Error Reporting, Top
                   1017: @section Parser
                   1018: 
                   1019: Some comments on the parser:
                   1020: 
                   1021: The @code{after_type_declarator} / @code{notype_declarator} hack is
                   1022: necessary in order to allow redeclarations of @code{TYPENAME}s, for
                   1023: instance
                   1024: 
                   1025: @example
                   1026: typedef int foo;
                   1027: class A @{
                   1028:   char *foo;
                   1029: @};
                   1030: @end example
                   1031: 
                   1032: In the above, the first @code{foo} is parsed as a @code{notype_declarator},
                   1033: and the second as a @code{after_type_declarator}.
                   1034: 
                   1035: Ambiguities:
                   1036: 
                   1037: There are currently four reduce/reduce ambiguities in the parser.  They are:
                   1038: 
                   1039: 1) Between @code{template_parm} and
                   1040: @code{named_class_head_sans_basetype}, for the tokens @code{aggr
                   1041: identifier}.  This situation occurs in code looking like
                   1042: 
                   1043: @example
                   1044: template <class T> class A @{ @};
                   1045: @end example
                   1046: 
                   1047: It is ambiguous whether @code{class T} should be parsed as the
                   1048: declaration of a template type parameter named @code{T} or an unnamed
                   1049: constant parameter of type @code{class T}.  Section 14.6, paragraph 3 of
                   1050: the January '94 working paper states that the first interpretation is
                   1051: the correct one.  This ambiguity results in two reduce/reduce conflicts.
                   1052: 
                   1053: 2) Between @code{primary} and @code{type_id} for code like @samp{int()}
                   1054: in places where both can be accepted, such as the argument to
                   1055: @code{sizeof}.  Section 8.1 of the pre-San Diego working paper specifies
                   1056: that these ambiguous constructs will be interpreted as @code{typename}s.
                   1057: This ambiguity results in six reduce/reduce conflicts between
                   1058: @samp{absdcl} and @samp{functional_cast}.
                   1059: 
                   1060: 3) Between @code{functional_cast} and
                   1061: @code{complex_direct_notype_declarator}, for various token strings.
                   1062: This situation occurs in code looking like
                   1063: 
                   1064: @example
                   1065: int (*a);
                   1066: @end example
                   1067: 
                   1068: This code is ambiguous; it could be a declaration of the variable
                   1069: @samp{a} as a pointer to @samp{int}, or it could be a functional cast of
                   1070: @samp{*a} to @samp{int}.  Section 6.8 specifies that the former
                   1071: interpretation is correct.  This ambiguity results in 7 reduce/reduce
                   1072: conflicts.  Another aspect of this ambiguity is code like 'int (x[2]);',
                   1073: which is resolved at the '[' and accounts for 6 reduce/reduce conflicts
                   1074: between @samp{direct_notype_declarator} and
                   1075: @samp{primary}/@samp{overqualified_id}.  Finally, there are 4 r/r
                   1076: conflicts between @samp{expr_or_declarator} and @samp{primary} over code
                   1077: like 'int (a);', which could probably be resolved but would also
                   1078: probably be more trouble than it's worth.  In all, this situation
                   1079: accounts for 17 conflicts.  Ack!
                   1080: 
                   1081: The second case above is responsible for the failure to parse 'LinppFile
                   1082: ppfile (String (argv[1]), &outs, argc, argv);' (from Rogue Wave
                   1083: Math.h++) as an object declaration, and must be fixed so that it does
                   1084: not resolve until later.
                   1085: 
                   1086: 4) Indirectly between @code{after_type_declarator} and @code{parm}, for
                   1087: type names.  This occurs in (as one example) code like
                   1088: 
                   1089: @example
                   1090: typedef int foo, bar;
                   1091: class A @{
                   1092:   foo (bar);
                   1093: @};
                   1094: @end example
                   1095: 
                   1096: What is @code{bar} inside the class definition?  We currently interpret
                   1097: it as a @code{parm}, as does Cfront, but IBM xlC interprets it as an
                   1098: @code{after_type_declarator}.  I believe that xlC is correct, in light
                   1099: of 7.1p2, which says "The longest sequence of @i{decl-specifiers} that
                   1100: could possibly be a type name is taken as the @i{decl-specifier-seq} of
                   1101: a @i{declaration}."  However, it seems clear that this rule must be
                   1102: violated in the case of constructors.  This ambiguity accounts for 8
                   1103: conflicts.
                   1104: 
                   1105: Unlike the others, this ambiguity is not recognized by the Working Paper.
                   1106: 
                   1107: @node  Copying Objects, Exception Handling, Parser, Top
                   1108: @section Copying Objects
                   1109: 
                   1110: The generated copy assignment operator in g++ does not currently do the
                   1111: right thing for multiple inheritance involving virtual bases; it just
                   1112: calls the copy assignment operators for its direct bases.  What it
                   1113: should probably do is:
                   1114: 
                   1115: 1) Split up the copy assignment operator for all classes that have
                   1116: vbases into "copy my vbases" and "copy everything else" parts.  Or do
                   1117: the trickiness that the constructors do to ensure that vbases don't get
                   1118: initialized by intermediate bases.
                   1119: 
                   1120: 2) Wander through the class lattice, find all vbases for which no
                   1121: intermediate base has a user-defined copy assignment operator, and call
                   1122: their "copy everything else" routines.  If not all of my vbases satisfy
                   1123: this criterion, warn, because this may be surprising behavior.
                   1124: 
                   1125: 3) Call the "copy everything else" routine for my direct bases.
                   1126: 
                   1127: If we only have one direct base, we can just foist everything off onto
                   1128: them.
                   1129: 
                   1130: This issue is currently under discussion in the core reflector
                   1131: (2/28/94).
                   1132: 
                   1133: @node  Exception Handling, Free Store, Copying Objects, Top
                   1134: @section Exception Handling
                   1135: 
                   1136: Note, exception handling in g++ is still under development.  
                   1137: 
                   1138: This section describes the mapping of C++ exceptions in the C++
                   1139: front-end, into the back-end exception handling framework.
                   1140: 
                   1141: The basic mechanism of exception handling in the back-end is
                   1142: unwind-protect a la elisp.  This is a general, robust, and language
                   1143: independent representation for exceptions.
                   1144: 
                   1145: The C++ front-end exceptions are mapping into the unwind-protect
                   1146: semantics by the C++ front-end.  The mapping is describe below.
                   1147: 
                   1148: Objects with RTTI support should use the RTTI information to do mapping
                   1149: and checking.  Objects without RTTI, like int and const char *, have to
                   1150: use another means of matching.  Currently we use the normal mangling used in
                   1151: building functions names.  Int's are "i", const char * is PCc, etc...
                   1152: 
                   1153: Unfortunately, the standard allows standard type conversions on throw
                   1154: parameters so they can match catch handlers.  This means we need a
                   1155: mechanism to handle type conversion at run time, ICK.  I read this part
                   1156: again, and it appears that we only have to be able to do a few of the
                   1157: conversions at run time, so we should be ok.
                   1158: 
                   1159: In C++, all cleanups should be protected by exception regions.  The
                   1160: region starts just after the reason why the cleanup is created has
                   1161: ended.  For example, with an automatic variable, that has a constructor,
                   1162: it would be right after the constructor is run.  The region ends just
                   1163: before the finalization is expanded.  Since the backend may expand the
                   1164: cleanup multiple times along different paths, once for normal end of the
                   1165: region, once for non-local gotos, once for returns, etc, the backend
                   1166: must take special care to protect the finalization expansion, if the
                   1167: expansion is for any other reason than normal region end, and it is
                   1168: `inline' (it is inside the exception region).  The backend can either
                   1169: choose to move them out of line, or it can created an exception region
                   1170: over the finalization to protect it, and in the handler associated with
                   1171: it, it would not run the finalization as it otherwise would have, but
                   1172: rather just rethrow to the outer handler, careful to skip the normal
                   1173: handler for the original region.
                   1174: 
                   1175: In Ada, they will use the more runtime intensive approach of having
                   1176: fewer regions, but at the cost of additional work at run time, to keep a
                   1177: list of things that need cleanups.  When a variable has finished
                   1178: construction, they add the cleanup to the list, when the come to the end
                   1179: of the lifetime of the variable, the run the list down.  If the take a
                   1180: hit before the section finishes normally, they examine the list for
                   1181: actions to perform.  I hope they add this logic into the back-end, as it
                   1182: would be nice to get that alternative approach in C++.
                   1183: 
                   1184: On an rs6000, xlC stores exception objects on that stack, under the try
                   1185: block.  When is unwinds down into a handler, the frame pointer is
                   1186: adjusted back to the normal value for the frame in which the handler
                   1187: resides, and the stack pointer is left unchanged from the time at which
                   1188: the object was throwed.  This is so that there is always someplace for
                   1189: the exception object, and nothing can overwrite it, once we start
                   1190: throwing.  The only bad part, is that the stack remains large.
                   1191: 
                   1192: Flaws in g++'s exception handling.  The stack pointer is restored from
                   1193: stack, we want to match rs6000, and propagate the stack pointer from
                   1194: time of throw, down, to the catch place.
                   1195: 
                   1196: Only exact type matching of throw types works (references work also),
                   1197: catch variables cannot be used.  Only works on a Sun sparc running SunOS
                   1198: 4.1.x.  Unwinding to outer catch clauses works.  All temps and local
                   1199: variables are cleaned up in all unwinded scopes.  Completed parts of
                   1200: partially constructed objects are not cleaned up.  Don't expect
                   1201: exception handling to work right if you optimize, in fact the compiler
                   1202: will probably core dump.  If two EH regions are the exact same size, the
                   1203: backend cannot tell which one is first.  It punts by picking the last
                   1204: one, if they tie.  This is usually right.  We really should stick in a
                   1205: nop, if they are the same size.
                   1206: 
                   1207: If we fall off the end of a series of catch blocks, we return to the
                   1208: flow of control in a normal fasion.  But this is wrong, we should
                   1209: rethrow.
                   1210: 
                   1211: When we invoke the copy constructor for an exception object because it
                   1212: is passed by value, and if we take a hit (exception) inside the copy
                   1213: constructor someplace, where do we go?  I have tentatively choosen to
                   1214: not catch throws by the outer block at the same unwind level, if one
                   1215: exists, but rather to allow the frame to unwind into the next series of
                   1216: handlers, if any.  If this is the wrong way to do it, we will need to
                   1217: protect the rest of the handler in some fashion.  Maybe just changing
                   1218: the handler's handler to protect the whole series of handlers is the
                   1219: right way to go.
                   1220: 
                   1221: The EH object is copied like it should be, if it is passed by value,
                   1222: otherwise we get a reference directly to it.
                   1223: 
                   1224: EH objects make it through unwinding, but are subject to being
                   1225: overwritten as they are still past the top of stack.  Don't throw
                   1226: automatic objects if this is a problem.
                   1227: 
                   1228: Exceptions in catch handlers now go to outer block.
                   1229: 
                   1230: @node Free Store, Concept Index, Exception Handling, Top
                   1231: @section Free Store
                   1232: 
                   1233: operator new [] adds a magic cookie to the beginning of arrays for which
                   1234: the number of elements will be needed by operator delete [].  These are
                   1235: arrays of objects with destructors and arrays of objects that define
                   1236: operator delete [] with the optional size_t argument.  This cookie can
                   1237: be examined from a program as follows:
                   1238: 
                   1239: @example
                   1240: typedef unsigned long size_t;
                   1241: extern "C" int printf (const char *, ...);
                   1242: 
                   1243: size_t nelts (void *p)
                   1244: @{
                   1245:   struct cookie @{
                   1246:     size_t nelts __attribute__ ((aligned (sizeof (double))));
                   1247:   @};
                   1248: 
                   1249:   cookie *cp = (cookie *)p;
                   1250:   --cp;
                   1251: 
                   1252:   return cp->nelts;
                   1253: @}
                   1254: 
                   1255: struct A @{
                   1256:   ~A() @{ @}
                   1257: @};
                   1258: 
                   1259: main()
                   1260: @{
                   1261:   A *ap = new A[3];
                   1262:   printf ("%ld\n", nelts (ap));
                   1263: @}
                   1264: @end example
                   1265: 
                   1266: @node Concept Index,  , Free Store, Top
                   1267: @section Concept Index
                   1268: 
                   1269: @printindex cp
                   1270: 
                   1271: @bye

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.