1999-10-04 Mark Mitchell <mark@codesourcery.com>
[official-gcc.git] / gcc / cp / gxxint.texi
blobdf9d100c3c31a2165dfb7b65d4e7f78d3c8310f6
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
11 This is meant to describe the C++ front-end for gcc in detail.
12 Questions and comments to Benjamin Kosnik @code{<bkoz@@cygnus.com>}.
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 * Exception Handling::          
27 * Free Store::                  
28 * Mangling::  Function name mangling for C++ and Java
29 * Concept Index::               
30 @end menu
32 @node Limitations of g++, Routines, Top, Top
33 @section Limitations of g++
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.
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.
48 @cindex access checking
49 @item
50 Access checking is unimplemented for nested types.
52 @cindex @code{volatile}
53 @item
54 @code{volatile} is not implemented in general.
56 @end itemize
58 @node Routines, Implementation Specifics, Limitations of g++, Top
59 @section Routines
61 This section describes some of the routines used in the C++ front-end.
63 @code{build_vtable} and @code{prepare_fresh_vtable} is used only within
64 the @file{cp-class.c} file, and only in @code{finish_struct} and
65 @code{modify_vtable_entries}.
67 @code{build_vtable}, @code{prepare_fresh_vtable}, and
68 @code{finish_struct} are the only routines that set @code{DECL_VPARENT}.
70 @code{finish_struct} can steal the virtual function table from parents,
71 this prohibits related_vslot from working.  When finish_struct steals,
72 we know that
74 @example
75 get_binfo (DECL_FIELD_CONTEXT (CLASSTYPE_VFIELD (t)), t, 0)
76 @end example
78 @noindent
79 will get the related binfo.
81 @code{layout_basetypes} does something with the VIRTUALS.
83 Supposedly (according to Tiemann) most of the breadth first searching
84 done, like in @code{get_base_distance} and in @code{get_binfo} was not
85 because of any design decision.  I have since found out the at least one
86 part of the compiler needs the notion of depth first binfo searching, I
87 am going to try and convert the whole thing, it should just work.  The
88 term left-most refers to the depth first left-most node.  It uses
89 @code{MAIN_VARIANT == type} as the condition to get left-most, because
90 the things that have @code{BINFO_OFFSET}s of zero are shared and will
91 have themselves as their own @code{MAIN_VARIANT}s.  The non-shared right
92 ones, are copies of the left-most one, hence if it is its own
93 @code{MAIN_VARIANT}, we know it IS a left-most one, if it is not, it is
94 a non-left-most one.
96 @code{get_base_distance}'s path and distance matters in its use in:
98 @itemize @bullet
99 @item
100 @code{prepare_fresh_vtable} (the code is probably wrong)
101 @item
102 @code{init_vfields} Depends upon distance probably in a safe way,
103 build_offset_ref might use partial paths to do further lookups,
104 hack_identifier is probably not properly checking access.
106 @item
107 @code{get_first_matching_virtual} probably should check for
108 @code{get_base_distance} returning -2.
110 @item
111 @code{resolve_offset_ref} should be called in a more deterministic
112 manner.  Right now, it is called in some random contexts, like for
113 arguments at @code{build_method_call} time, @code{default_conversion}
114 time, @code{convert_arguments} time, @code{build_unary_op} time,
115 @code{build_c_cast} time, @code{build_modify_expr} time,
116 @code{convert_for_assignment} time, and
117 @code{convert_for_initialization} time.
119 But, there are still more contexts it needs to be called in, one was the
120 ever simple:
122 @example
123 if (obj.*pmi != 7)
124    @dots{}
125 @end example
127 Seems that the problems were due to the fact that @code{TREE_TYPE} of
128 the @code{OFFSET_REF} was not a @code{OFFSET_TYPE}, but rather the type
129 of the referent (like @code{INTEGER_TYPE}).  This problem was fixed by
130 changing @code{default_conversion} to check @code{TREE_CODE (x)},
131 instead of only checking @code{TREE_CODE (TREE_TYPE (x))} to see if it
132 was @code{OFFSET_TYPE}.
134 @end itemize
136 @node Implementation Specifics, Glossary, Routines, Top
137 @section Implementation Specifics
139 @itemize @bullet
140 @item Explicit Initialization
142 The global list @code{current_member_init_list} contains the list of
143 mem-initializers specified in a constructor declaration.  For example:
145 @example
146 foo::foo() : a(1), b(2) @{@}
147 @end example
149 @noindent
150 will initialize @samp{a} with 1 and @samp{b} with 2.
151 @code{expand_member_init} places each initialization (a with 1) on the
152 global list.  Then, when the fndecl is being processed,
153 @code{emit_base_init} runs down the list, initializing them.  It used to
154 be the case that g++ first ran down @code{current_member_init_list},
155 then ran down the list of members initializing the ones that weren't
156 explicitly initialized.  Things were rewritten to perform the
157 initializations in order of declaration in the class.  So, for the above
158 example, @samp{a} and @samp{b} will be initialized in the order that
159 they were declared:
161 @example
162 class foo @{ public: int b; int a; foo (); @};
163 @end example
165 @noindent
166 Thus, @samp{b} will be initialized with 2 first, then @samp{a} will be
167 initialized with 1, regardless of how they're listed in the mem-initializer.
169 @item The Explicit Keyword
171 The use of @code{explicit} on a constructor is used by @code{grokdeclarator}
172 to set the field @code{DECL_NONCONVERTING_P}.  That value is used by
173 @code{build_method_call} and @code{build_user_type_conversion_1} to decide
174 if a particular constructor should be used as a candidate for conversions.
176 @end itemize
178 @node Glossary, Macros, Implementation Specifics, Top
179 @section Glossary
181 @table @r
182 @item binfo
183 The main data structure in the compiler used to represent the
184 inheritance relationships between classes.  The data in the binfo can be
185 accessed by the BINFO_ accessor macros.
187 @item vtable
188 @itemx virtual function table
190 The virtual function table holds information used in virtual function
191 dispatching.  In the compiler, they are usually referred to as vtables,
192 or vtbls.  The first index is not used in the normal way, I believe it
193 is probably used for the virtual destructor.
195 @item vfield
197 vfields can be thought of as the base information needed to build
198 vtables.  For every vtable that exists for a class, there is a vfield.
199 See also vtable and virtual function table pointer.  When a type is used
200 as a base class to another type, the virtual function table for the
201 derived class can be based upon the vtable for the base class, just
202 extended to include the additional virtual methods declared in the
203 derived class.  The virtual function table from a virtual base class is
204 never reused in a derived class.  @code{is_normal} depends upon this.
206 @item virtual function table pointer
208 These are @code{FIELD_DECL}s that are pointer types that point to
209 vtables.  See also vtable and vfield.
210 @end table
212 @node Macros, Typical Behavior, Glossary, Top
213 @section Macros
215 This section describes some of the macros used on trees.  The list
216 should be alphabetical.  Eventually all macros should be documented
217 here.
219 @table @code
220 @item BINFO_BASETYPES
221 A vector of additional binfos for the types inherited by this basetype.
222 The binfos are fully unshared (except for virtual bases, in which
223 case the binfo structure is shared).
225    If this basetype describes type D as inherited in C,
226    and if the basetypes of D are E anf F,
227    then this vector contains binfos for inheritance of E and F by C.
229 Has values of:
231         TREE_VECs
234 @item BINFO_INHERITANCE_CHAIN
235 Temporarily used to represent specific inheritances.  It usually points
236 to the binfo associated with the lesser derived type, but it can be
237 reversed by reverse_path.  For example:
239 @example
240         Z ZbY   least derived
241         |
242         Y YbX
243         |
244         X Xb    most derived
246 TYPE_BINFO (X) == Xb
247 BINFO_INHERITANCE_CHAIN (Xb) == YbX
248 BINFO_INHERITANCE_CHAIN (Yb) == ZbY
249 BINFO_INHERITANCE_CHAIN (Zb) == 0
250 @end example
252 Not sure is the above is really true, get_base_distance has is point
253 towards the most derived type, opposite from above.
255 Set by build_vbase_path, recursive_bounded_basetype_p,
256 get_base_distance, lookup_field, lookup_fnfields, and reverse_path.
258 What things can this be used on:
260         TREE_VECs that are binfos
263 @item BINFO_OFFSET
264 The offset where this basetype appears in its containing type.
265 BINFO_OFFSET slot holds the offset (in bytes) from the base of the
266 complete object to the base of the part of the object that is allocated
267 on behalf of this `type'.  This is always 0 except when there is
268 multiple inheritance.
270 Used on TREE_VEC_ELTs of the binfos BINFO_BASETYPES (...) for example.
273 @item BINFO_VIRTUALS
274 A unique list of functions for the virtual function table.  See also
275 TYPE_BINFO_VIRTUALS.
277 What things can this be used on:
279         TREE_VECs that are binfos
282 @item BINFO_VTABLE
283 Used to find the VAR_DECL that is the virtual function table associated
284 with this binfo.  See also TYPE_BINFO_VTABLE.  To get the virtual
285 function table pointer, see CLASSTYPE_VFIELD.
287 What things can this be used on:
289         TREE_VECs that are binfos
291 Has values of:
293         VAR_DECLs that are virtual function tables
296 @item BLOCK_SUPERCONTEXT
297 In the outermost scope of each function, it points to the FUNCTION_DECL
298 node.  It aids in better DWARF support of inline functions.
301 @item CLASSTYPE_TAGS
302 CLASSTYPE_TAGS is a linked (via TREE_CHAIN) list of member classes of a
303 class. TREE_PURPOSE is the name, TREE_VALUE is the type (pushclass scans
304 these and calls pushtag on them.)
306 finish_struct scans these to produce TYPE_DECLs to add to the
307 TYPE_FIELDS of the type.
309 It is expected that name found in the TREE_PURPOSE slot is unique,
310 resolve_scope_to_name is one such place that depends upon this
311 uniqueness.
314 @item CLASSTYPE_METHOD_VEC
315 The following is true after finish_struct has been called (on the
316 class?) but not before.  Before finish_struct is called, things are
317 different to some extent.  Contains a TREE_VEC of methods of the class.
318 The TREE_VEC_LENGTH is the number of differently named methods plus one
319 for the 0th entry.  The 0th entry is always allocated, and reserved for
320 ctors and dtors.  If there are none, TREE_VEC_ELT(N,0) == NULL_TREE.
321 Each entry of the TREE_VEC is a FUNCTION_DECL.  For each FUNCTION_DECL,
322 there is a DECL_CHAIN slot.  If the FUNCTION_DECL is the last one with a
323 given name, the DECL_CHAIN slot is NULL_TREE.  Otherwise it is the next
324 method that has the same name (but a different signature).  It would
325 seem that it is not true that because the DECL_CHAIN slot is used in
326 this way, we cannot call pushdecl to put the method in the global scope
327 (cause that would overwrite the TREE_CHAIN slot), because they use
328 different _CHAINs.  finish_struct_methods setups up one version of the
329 TREE_CHAIN slots on the FUNCTION_DECLs.
331 friends are kept in TREE_LISTs, so that there's no need to use their
332 TREE_CHAIN slot for anything.
334 Has values of:
336         TREE_VECs
337         
339 @item CLASSTYPE_VFIELD
340 Seems to be in the process of being renamed TYPE_VFIELD.  Use on types
341 to get the main virtual function table pointer.  To get the virtual
342 function table use BINFO_VTABLE (TYPE_BINFO ()).
344 Has values of:
346         FIELD_DECLs that are virtual function table pointers
348 What things can this be used on:
350         RECORD_TYPEs
353 @item DECL_CLASS_CONTEXT
354 Identifies the context that the _DECL was found in.  For virtual function
355 tables, it points to the type associated with the virtual function
356 table.  See also DECL_CONTEXT, DECL_FIELD_CONTEXT and DECL_FCONTEXT.
358 The difference between this and DECL_CONTEXT, is that for virtuals
359 functions like:
361 @example
362 struct A
364   virtual int f ();
367 struct B : A
369   int f ();
372 DECL_CONTEXT (A::f) == A
373 DECL_CLASS_CONTEXT (A::f) == A
375 DECL_CONTEXT (B::f) == A
376 DECL_CLASS_CONTEXT (B::f) == B
377 @end example
379 Has values of:
381         RECORD_TYPEs, or UNION_TYPEs
383 What things can this be used on:
385         TYPE_DECLs, _DECLs
388 @item DECL_CONTEXT
389 Identifies the context that the _DECL was found in.  Can be used on
390 virtual function tables to find the type associated with the virtual
391 function table, but since they are FIELD_DECLs, DECL_FIELD_CONTEXT is a
392 better access method.  Internally the same as DECL_FIELD_CONTEXT, so
393 don't us both.  See also DECL_FIELD_CONTEXT, DECL_FCONTEXT and
394 DECL_CLASS_CONTEXT.
396 Has values of:
398         RECORD_TYPEs
401 What things can this be used on:
403 @display
404 VAR_DECLs that are virtual function tables
405 _DECLs
406 @end display
409 @item DECL_FIELD_CONTEXT
410 Identifies the context that the FIELD_DECL was found in.  Internally the
411 same as DECL_CONTEXT, so don't us both.  See also DECL_CONTEXT,
412 DECL_FCONTEXT and DECL_CLASS_CONTEXT.
414 Has values of:
416         RECORD_TYPEs
418 What things can this be used on:
420 @display
421 FIELD_DECLs that are virtual function pointers
422 FIELD_DECLs
423 @end display
426 @item DECL_NAME
428 Has values of:
430 @display
431 0 for things that don't have names
432 IDENTIFIER_NODEs for TYPE_DECLs
433 @end display
435 @item DECL_IGNORED_P
436 A bit that can be set to inform the debug information output routines in
437 the back-end that a certain _DECL node should be totally ignored.
439 Used in cases where it is known that the debugging information will be
440 output in another file, or where a sub-type is known not to be needed
441 because the enclosing type is not needed.
443 A compiler constructed virtual destructor in derived classes that do not
444 define an explicit destructor that was defined explicit in a base class
445 has this bit set as well.  Also used on __FUNCTION__ and
446 __PRETTY_FUNCTION__ to mark they are ``compiler generated.''  c-decl and
447 c-lex.c both want DECL_IGNORED_P set for ``internally generated vars,''
448 and ``user-invisible variable.''
450 Functions built by the C++ front-end such as default destructors,
451 virtual destructors and default constructors want to be marked that
452 they are compiler generated, but unsure why.
454 Currently, it is used in an absolute way in the C++ front-end, as an
455 optimization, to tell the debug information output routines to not
456 generate debugging information that will be output by another separately
457 compiled file.
460 @item DECL_VIRTUAL_P
461 A flag used on FIELD_DECLs and VAR_DECLs.  (Documentation in tree.h is
462 wrong.)  Used in VAR_DECLs to indicate that the variable is a vtable.
463 It is also used in FIELD_DECLs for vtable pointers.
465 What things can this be used on:
467         FIELD_DECLs and VAR_DECLs
470 @item DECL_VPARENT
471 Used to point to the parent type of the vtable if there is one, else it
472 is just the type associated with the vtable.  Because of the sharing of
473 virtual function tables that goes on, this slot is not very useful, and
474 is in fact, not used in the compiler at all.  It can be removed.
476 What things can this be used on:
478         VAR_DECLs that are virtual function tables
480 Has values of:
482         RECORD_TYPEs maybe UNION_TYPEs
485 @item DECL_FCONTEXT
486 Used to find the first baseclass in which this FIELD_DECL is defined.
487 See also DECL_CONTEXT, DECL_FIELD_CONTEXT and DECL_CLASS_CONTEXT.
489 How it is used:
491         Used when writing out debugging information about vfield and
492         vbase decls.
494 What things can this be used on:
496         FIELD_DECLs that are virtual function pointers
497         FIELD_DECLs
500 @item DECL_REFERENCE_SLOT
501 Used to hold the initialize for the reference.
503 What things can this be used on:
505         PARM_DECLs and VAR_DECLs that have a reference type
508 @item DECL_VINDEX
509 Used for FUNCTION_DECLs in two different ways.  Before the structure
510 containing the FUNCTION_DECL is laid out, DECL_VINDEX may point to a
511 FUNCTION_DECL in a base class which is the FUNCTION_DECL which this
512 FUNCTION_DECL will replace as a virtual function.  When the class is
513 laid out, this pointer is changed to an INTEGER_CST node which is
514 suitable to find an index into the virtual function table.  See
515 get_vtable_entry as to how one can find the right index into the virtual
516 function table.  The first index 0, of a virtual function table it not
517 used in the normal way, so the first real index is 1.
519 DECL_VINDEX may be a TREE_LIST, that would seem to be a list of
520 overridden FUNCTION_DECLs.  add_virtual_function has code to deal with
521 this when it uses the variable base_fndecl_list, but it would seem that
522 somehow, it is possible for the TREE_LIST to pursist until method_call,
523 and it should not.
526 What things can this be used on:
528         FUNCTION_DECLs
531 @item DECL_SOURCE_FILE
532 Identifies what source file a particular declaration was found in.
534 Has values of:
536         "<built-in>" on TYPE_DECLs to mean the typedef is built in
539 @item DECL_SOURCE_LINE
540 Identifies what source line number in the source file the declaration
541 was found at.
543 Has values of:
545 @display
546 0 for an undefined label
548 0 for TYPE_DECLs that are internally generated
550 0 for FUNCTION_DECLs for functions generated by the compiler
551         (not yet, but should be)
553 0 for ``magic'' arguments to functions, that the user has no
554         control over
555 @end display
558 @item TREE_USED
560 Has values of:
562         0 for unused labels
565 @item TREE_ADDRESSABLE
566 A flag that is set for any type that has a constructor.
569 @item TREE_COMPLEXITY
570 They seem a kludge way to track recursion, poping, and pushing.  They only
571 appear in cp-decl.c and cp-decl2.c, so the are a good candidate for
572 proper fixing, and removal.
575 @item TREE_HAS_CONSTRUCTOR
576 A flag to indicate when a CALL_EXPR represents a call to a constructor.
577 If set, we know that the type of the object, is the complete type of the
578 object, and that the value returned is nonnull.  When used in this
579 fashion, it is an optimization.  Can also be used on SAVE_EXPRs to
580 indicate when they are of fixed type and nonnull.  Can also be used on
581 INDIRECT_EXPRs on CALL_EXPRs that represent a call to a constructor.
584 @item TREE_PRIVATE
585 Set for FIELD_DECLs by finish_struct.  But not uniformly set.
587 The following routines do something with PRIVATE access:
588 build_method_call, alter_access, finish_struct_methods,
589 finish_struct, convert_to_aggr, CWriteLanguageDecl, CWriteLanguageType,
590 CWriteUseObject, compute_access, lookup_field, dfs_pushdecl,
591 GNU_xref_member, dbxout_type_fields, dbxout_type_method_1
594 @item TREE_PROTECTED
595 The following routines do something with PROTECTED access:
596 build_method_call, alter_access, finish_struct, convert_to_aggr,
597 CWriteLanguageDecl, CWriteLanguageType, CWriteUseObject,
598 compute_access, lookup_field, GNU_xref_member, dbxout_type_fields,
599 dbxout_type_method_1
602 @item TYPE_BINFO
603 Used to get the binfo for the type.
605 Has values of:
607         TREE_VECs that are binfos
609 What things can this be used on:
611         RECORD_TYPEs
614 @item TYPE_BINFO_BASETYPES
615 See also BINFO_BASETYPES.
617 @item TYPE_BINFO_VIRTUALS
618 A unique list of functions for the virtual function table.  See also
619 BINFO_VIRTUALS.
621 What things can this be used on:
623         RECORD_TYPEs
626 @item TYPE_BINFO_VTABLE
627 Points to the virtual function table associated with the given type.
628 See also BINFO_VTABLE.
630 What things can this be used on:
632         RECORD_TYPEs
634 Has values of:
636         VAR_DECLs that are virtual function tables
639 @item TYPE_NAME
640 Names the type.
642 Has values of:
644 @display
645 0 for things that don't have names.
646 should be IDENTIFIER_NODE for RECORD_TYPEs UNION_TYPEs and 
647         ENUM_TYPEs.
648 TYPE_DECL for RECORD_TYPEs, UNION_TYPEs and ENUM_TYPEs, but 
649         shouldn't be.
650 TYPE_DECL for typedefs, unsure why.
651 @end display
653 What things can one use this on:
655 @display
656 TYPE_DECLs
657 RECORD_TYPEs
658 UNION_TYPEs
659 ENUM_TYPEs
660 @end display
662 History:
664         It currently points to the TYPE_DECL for RECORD_TYPEs,
665         UNION_TYPEs and ENUM_TYPEs, but it should be history soon.
668 @item TYPE_METHODS
669 Synonym for @code{CLASSTYPE_METHOD_VEC}.  Chained together with
670 @code{TREE_CHAIN}.  @file{dbxout.c} uses this to get at the methods of a
671 class.
674 @item TYPE_DECL
675 Used to represent typedefs, and used to represent bindings layers.
677 Components:
679         DECL_NAME is the name of the typedef.  For example, foo would
680         be found in the DECL_NAME slot when @code{typedef int foo;} is
681         seen.
683         DECL_SOURCE_LINE identifies what source line number in the
684         source file the declaration was found at.  A value of 0
685         indicates that this TYPE_DECL is just an internal binding layer
686         marker, and does not correspond to a user supplied typedef.
688         DECL_SOURCE_FILE
690 @item TYPE_FIELDS
691 A linked list (via @code{TREE_CHAIN}) of member types of a class.  The
692 list can contain @code{TYPE_DECL}s, but there can also be other things
693 in the list apparently.  See also @code{CLASSTYPE_TAGS}.
696 @item TYPE_VIRTUAL_P
697 A flag used on a @code{FIELD_DECL} or a @code{VAR_DECL}, indicates it is
698 a virtual function table or a pointer to one.  When used on a
699 @code{FUNCTION_DECL}, indicates that it is a virtual function.  When
700 used on an @code{IDENTIFIER_NODE}, indicates that a function with this
701 same name exists and has been declared virtual.
703 When used on types, it indicates that the type has virtual functions, or
704 is derived from one that does.
706 Not sure if the above about virtual function tables is still true.  See
707 also info on @code{DECL_VIRTUAL_P}.
709 What things can this be used on:
711         FIELD_DECLs, VAR_DECLs, FUNCTION_DECLs, IDENTIFIER_NODEs
714 @item VF_BASETYPE_VALUE
715 Get the associated type from the binfo that caused the given vfield to
716 exist.  This is the least derived class (the most parent class) that
717 needed a virtual function table.  It is probably the case that all uses
718 of this field are misguided, but they need to be examined on a
719 case-by-case basis.  See history for more information on why the
720 previous statement was made.
722 Set at @code{finish_base_struct} time.
724 What things can this be used on:
726         TREE_LISTs that are vfields
728 History:
730         This field was used to determine if a virtual function table's
731         slot should be filled in with a certain virtual function, by
732         checking to see if the type returned by VF_BASETYPE_VALUE was a
733         parent of the context in which the old virtual function existed.
734         This incorrectly assumes that a given type _could_ not appear as
735         a parent twice in a given inheritance lattice.  For single
736         inheritance, this would in fact work, because a type could not
737         possibly appear more than once in an inheritance lattice, but
738         with multiple inheritance, a type can appear more than once.
741 @item VF_BINFO_VALUE
742 Identifies the binfo that caused this vfield to exist.  If this vfield
743 is from the first direct base class that has a virtual function table,
744 then VF_BINFO_VALUE is NULL_TREE, otherwise it will be the binfo of the
745 direct base where the vfield came from.  Can use @code{TREE_VIA_VIRTUAL}
746 on result to find out if it is a virtual base class.  Related to the
747 binfo found by
749 @example
750 get_binfo (VF_BASETYPE_VALUE (vfield), t, 0)
751 @end example
753 @noindent
754 where @samp{t} is the type that has the given vfield.
756 @example
757 get_binfo (VF_BASETYPE_VALUE (vfield), t, 0)
758 @end example
760 @noindent
761 will return the binfo for the given vfield.
763 May or may not be set at @code{modify_vtable_entries} time.  Set at
764 @code{finish_base_struct} time.
766 What things can this be used on:
768         TREE_LISTs that are vfields
771 @item VF_DERIVED_VALUE
772 Identifies the type of the most derived class of the vfield, excluding
773 the class this vfield is for.
775 Set at @code{finish_base_struct} time.
777 What things can this be used on:
779         TREE_LISTs that are vfields
782 @item VF_NORMAL_VALUE
783 Identifies the type of the most derived class of the vfield, including
784 the class this vfield is for.
786 Set at @code{finish_base_struct} time.
788 What things can this be used on:
790         TREE_LISTs that are vfields
793 @item WRITABLE_VTABLES
794 This is a option that can be defined when building the compiler, that
795 will cause the compiler to output vtables into the data segment so that
796 the vtables maybe written.  This is undefined by default, because
797 normally the vtables should be unwritable.  People that implement object
798 I/O facilities may, or people that want to change the dynamic type of
799 objects may want to have the vtables writable.  Another way of achieving
800 this would be to make a copy of the vtable into writable memory, but the
801 drawback there is that that method only changes the type for one object.
803 @end table
805 @node Typical Behavior, Coding Conventions, Macros, Top
806 @section Typical Behavior
808 @cindex parse errors
810 Whenever seemingly normal code fails with errors like
811 @code{syntax error at `\@{'}, it's highly likely that grokdeclarator is
812 returning a NULL_TREE for whatever reason.
814 @node Coding Conventions, Templates, Typical Behavior, Top
815 @section Coding Conventions
817 It should never be that case that trees are modified in-place by the
818 back-end, @emph{unless} it is guaranteed that the semantics are the same
819 no matter how shared the tree structure is.  @file{fold-const.c} still
820 has some cases where this is not true, but rms hypothesizes that this
821 will never be a problem.
823 @node Templates, Access Control, Coding Conventions, Top
824 @section Templates
826 A template is represented by a @code{TEMPLATE_DECL}.  The specific
827 fields used are:
829 @table @code
830 @item DECL_TEMPLATE_RESULT
831 The generic decl on which instantiations are based.  This looks just
832 like any other decl.
834 @item DECL_TEMPLATE_PARMS
835 The parameters to this template.
836 @end table
838 The generic decl is parsed as much like any other decl as possible,
839 given the parameterization.  The template decl is not built up until the
840 generic decl has been completed.  For template classes, a template decl
841 is generated for each member function and static data member, as well.
843 Template members of template classes are represented by a TEMPLATE_DECL
844 for the class' parameters around another TEMPLATE_DECL for the member's
845 parameters.
847 All declarations that are instantiations or specializations of templates
848 refer to their template and parameters through DECL_TEMPLATE_INFO.
850 How should I handle parsing member functions with the proper param
851 decls?  Set them up again or try to use the same ones?  Currently we do
852 the former.  We can probably do this without any extra machinery in
853 store_pending_inline, by deducing the parameters from the decl in
854 do_pending_inlines.  PRE_PARSED_TEMPLATE_DECL?
856 If a base is a parm, we can't check anything about it.  If a base is not
857 a parm, we need to check it for name binding.  Do finish_base_struct if
858 no bases are parameterized (only if none, including indirect, are
859 parms).  Nah, don't bother trying to do any of this until instantiation
860 -- we only need to do name binding in advance.
862 Always set up method vec and fields, inc. synthesized methods.  Really?
863 We can't know the types of the copy folks, or whether we need a
864 destructor, or can have a default ctor, until we know our bases and
865 fields.  Otherwise, we can assume and fix ourselves later.  Hopefully.
867 @node Access Control, Error Reporting, Templates, Top
868 @section Access Control
869 The function compute_access returns one of three values:
871 @table @code
872 @item access_public
873 means that the field can be accessed by the current lexical scope.
875 @item access_protected
876 means that the field cannot be accessed by the current lexical scope
877 because it is protected.
879 @item access_private
880 means that the field cannot be accessed by the current lexical scope
881 because it is private.
882 @end table
884 DECL_ACCESS is used for access declarations; alter_access creates a list
885 of types and accesses for a given decl.
887 Formerly, DECL_@{PUBLIC,PROTECTED,PRIVATE@} corresponded to the return
888 codes of compute_access and were used as a cache for compute_access.
889 Now they are not used at all.
891 TREE_PROTECTED and TREE_PRIVATE are used to record the access levels
892 granted by the containing class.  BEWARE: TREE_PUBLIC means something
893 completely unrelated to access control!
895 @node Error Reporting, Parser, Access Control, Top
896 @section Error Reporting
898 The C++ front-end uses a call-back mechanism to allow functions to print
899 out reasonable strings for types and functions without putting extra
900 logic in the functions where errors are found.  The interface is through
901 the @code{cp_error} function (or @code{cp_warning}, etc.).  The
902 syntax is exactly like that of @code{error}, except that a few more
903 conversions are supported:
905 @itemize @bullet
906 @item
907 %C indicates a value of `enum tree_code'.
908 @item
909 %D indicates a *_DECL node.
910 @item
911 %E indicates a *_EXPR node.
912 @item
913 %L indicates a value of `enum languages'.
914 @item
915 %P indicates the name of a parameter (i.e. "this", "1", "2", ...)
916 @item
917 %T indicates a *_TYPE node.
918 @item
919 %O indicates the name of an operator (MODIFY_EXPR -> "operator =").
921 @end itemize
923 There is some overlap between these; for instance, any of the node
924 options can be used for printing an identifier (though only @code{%D}
925 tries to decipher function names).
927 For a more verbose message (@code{class foo} as opposed to just @code{foo},
928 including the return type for functions), use @code{%#c}.
929 To have the line number on the error message indicate the line of the
930 DECL, use @code{cp_error_at} and its ilk; to indicate which argument you want,
931 use @code{%+D}, or it will default to the first.
933 @node Parser, Exception Handling, Error Reporting, Top
934 @section Parser
936 Some comments on the parser:
938 The @code{after_type_declarator} / @code{notype_declarator} hack is
939 necessary in order to allow redeclarations of @code{TYPENAME}s, for
940 instance
942 @example
943 typedef int foo;
944 class A @{
945   char *foo;
947 @end example
949 In the above, the first @code{foo} is parsed as a @code{notype_declarator},
950 and the second as a @code{after_type_declarator}.
952 Ambiguities:
954 There are currently four reduce/reduce ambiguities in the parser.  They are:
956 1) Between @code{template_parm} and
957 @code{named_class_head_sans_basetype}, for the tokens @code{aggr
958 identifier}.  This situation occurs in code looking like
960 @example
961 template <class T> class A @{ @};
962 @end example
964 It is ambiguous whether @code{class T} should be parsed as the
965 declaration of a template type parameter named @code{T} or an unnamed
966 constant parameter of type @code{class T}.  Section 14.6, paragraph 3 of
967 the January '94 working paper states that the first interpretation is
968 the correct one.  This ambiguity results in two reduce/reduce conflicts.
970 2) Between @code{primary} and @code{type_id} for code like @samp{int()}
971 in places where both can be accepted, such as the argument to
972 @code{sizeof}.  Section 8.1 of the pre-San Diego working paper specifies
973 that these ambiguous constructs will be interpreted as @code{typename}s.
974 This ambiguity results in six reduce/reduce conflicts between
975 @samp{absdcl} and @samp{functional_cast}.
977 3) Between @code{functional_cast} and
978 @code{complex_direct_notype_declarator}, for various token strings.
979 This situation occurs in code looking like
981 @example
982 int (*a);
983 @end example
985 This code is ambiguous; it could be a declaration of the variable
986 @samp{a} as a pointer to @samp{int}, or it could be a functional cast of
987 @samp{*a} to @samp{int}.  Section 6.8 specifies that the former
988 interpretation is correct.  This ambiguity results in 7 reduce/reduce
989 conflicts.  Another aspect of this ambiguity is code like 'int (x[2]);',
990 which is resolved at the '[' and accounts for 6 reduce/reduce conflicts
991 between @samp{direct_notype_declarator} and
992 @samp{primary}/@samp{overqualified_id}.  Finally, there are 4 r/r
993 conflicts between @samp{expr_or_declarator} and @samp{primary} over code
994 like 'int (a);', which could probably be resolved but would also
995 probably be more trouble than it's worth.  In all, this situation
996 accounts for 17 conflicts.  Ack!
998 The second case above is responsible for the failure to parse 'LinppFile
999 ppfile (String (argv[1]), &outs, argc, argv);' (from Rogue Wave
1000 Math.h++) as an object declaration, and must be fixed so that it does
1001 not resolve until later.
1003 4) Indirectly between @code{after_type_declarator} and @code{parm}, for
1004 type names.  This occurs in (as one example) code like
1006 @example
1007 typedef int foo, bar;
1008 class A @{
1009   foo (bar);
1011 @end example
1013 What is @code{bar} inside the class definition?  We currently interpret
1014 it as a @code{parm}, as does Cfront, but IBM xlC interprets it as an
1015 @code{after_type_declarator}.  I believe that xlC is correct, in light
1016 of 7.1p2, which says "The longest sequence of @i{decl-specifiers} that
1017 could possibly be a type name is taken as the @i{decl-specifier-seq} of
1018 a @i{declaration}."  However, it seems clear that this rule must be
1019 violated in the case of constructors.  This ambiguity accounts for 8
1020 conflicts.
1022 Unlike the others, this ambiguity is not recognized by the Working Paper.
1024 @node  Exception Handling, Free Store, Parser, Top
1025 @section Exception Handling
1027 Note, exception handling in g++ is still under development.  
1029 This section describes the mapping of C++ exceptions in the C++
1030 front-end, into the back-end exception handling framework.
1032 The basic mechanism of exception handling in the back-end is
1033 unwind-protect a la elisp.  This is a general, robust, and language
1034 independent representation for exceptions.
1036 The C++ front-end exceptions are mapping into the unwind-protect
1037 semantics by the C++ front-end.  The mapping is describe below.
1039 When -frtti is used, rtti is used to do exception object type checking,
1040 when it isn't used, the encoded name for the type of the object being
1041 thrown is used instead.  All code that originates exceptions, even code
1042 that throws exceptions as a side effect, like dynamic casting, and all
1043 code that catches exceptions must be compiled with either -frtti, or
1044 -fno-rtti.  It is not possible to mix rtti base exception handling
1045 objects with code that doesn't use rtti.  The exceptions to this, are
1046 code that doesn't catch or throw exceptions, catch (...), and code that
1047 just rethrows an exception.
1049 Currently we use the normal mangling used in building functions names
1050 (int's are "i", const char * is PCc) to build the non-rtti base type
1051 descriptors for exception handling.  These descriptors are just plain
1052 NULL terminated strings, and internally they are passed around as char
1055 In C++, all cleanups should be protected by exception regions.  The
1056 region starts just after the reason why the cleanup is created has
1057 ended.  For example, with an automatic variable, that has a constructor,
1058 it would be right after the constructor is run.  The region ends just
1059 before the finalization is expanded.  Since the backend may expand the
1060 cleanup multiple times along different paths, once for normal end of the
1061 region, once for non-local gotos, once for returns, etc, the backend
1062 must take special care to protect the finalization expansion, if the
1063 expansion is for any other reason than normal region end, and it is
1064 `inline' (it is inside the exception region).  The backend can either
1065 choose to move them out of line, or it can created an exception region
1066 over the finalization to protect it, and in the handler associated with
1067 it, it would not run the finalization as it otherwise would have, but
1068 rather just rethrow to the outer handler, careful to skip the normal
1069 handler for the original region.
1071 In Ada, they will use the more runtime intensive approach of having
1072 fewer regions, but at the cost of additional work at run time, to keep a
1073 list of things that need cleanups.  When a variable has finished
1074 construction, they add the cleanup to the list, when the come to the end
1075 of the lifetime of the variable, the run the list down.  If the take a
1076 hit before the section finishes normally, they examine the list for
1077 actions to perform.  I hope they add this logic into the back-end, as it
1078 would be nice to get that alternative approach in C++.
1080 On an rs6000, xlC stores exception objects on that stack, under the try
1081 block.  When is unwinds down into a handler, the frame pointer is
1082 adjusted back to the normal value for the frame in which the handler
1083 resides, and the stack pointer is left unchanged from the time at which
1084 the object was thrown.  This is so that there is always someplace for
1085 the exception object, and nothing can overwrite it, once we start
1086 throwing.  The only bad part, is that the stack remains large.
1088 The below points out some things that work in g++'s exception handling.
1090 All completely constructed temps and local variables are cleaned up in
1091 all unwinded scopes.  Completely constructed parts of partially
1092 constructed objects are cleaned up.  This includes partially built
1093 arrays.  Exception specifications are now handled.  Thrown objects are
1094 now cleaned up all the time.  We can now tell if we have an active
1095 exception being thrown or not (__eh_type != 0).  We use this to call
1096 terminate if someone does a throw; without there being an active
1097 exception object.  uncaught_exception () works.  Exception handling
1098 should work right if you optimize.  Exception handling should work with
1099 -fpic or -fPIC.
1101 The below points out some flaws in g++'s exception handling, as it now
1102 stands.
1104 Only exact type matching or reference matching of throw types works when
1105 -fno-rtti is used.  Only works on a SPARC (like Suns) (both -mflat and
1106 -mno-flat models work), SPARClite, Hitachi SH, i386, arm, rs6000,
1107 PowerPC, Alpha, mips, VAX, m68k and z8k machines.  SPARC v9 may not
1108 work.  HPPA is mostly done, but throwing between a shared library and
1109 user code doesn't yet work.  Some targets have support for data-driven
1110 unwinding.  Partial support is in for all other machines, but a stack
1111 unwinder called __unwind_function has to be written, and added to
1112 libgcc2 for them.  The new EH code doesn't rely upon the
1113 __unwind_function for C++ code, instead it creates per function
1114 unwinders right inside the function, unfortunately, on many platforms
1115 the definition of RETURN_ADDR_RTX in the tm.h file for the machine port
1116 is wrong.  See below for details on __unwind_function.  RTL_EXPRs for EH
1117 cond variables for && and || exprs should probably be wrapped in
1118 UNSAVE_EXPRs, and RTL_EXPRs tweaked so that they can be unsaved.
1120 We only do pointer conversions on exception matching a la 15.3 p2 case
1121 3: `A handler with type T, const T, T&, or const T& is a match for a
1122 throw-expression with an object of type E if [3]T is a pointer type and
1123 E is a pointer type that can be converted to T by a standard pointer
1124 conversion (_conv.ptr_) not involving conversions to pointers to private
1125 or protected base classes.' when -frtti is given.
1127 We don't call delete on new expressions that die because the ctor threw
1128 an exception.  See except/18 for a test case.
1130 15.2 para 13: The exception being handled should be rethrown if control
1131 reaches the end of a handler of the function-try-block of a constructor
1132 or destructor, right now, it is not.
1134 15.2 para 12: If a return statement appears in a handler of
1135 function-try-block of a constructor, the program is ill-formed, but this
1136 isn't diagnosed.
1138 15.2 para 11: If the handlers of a function-try-block contain a jump
1139 into the body of a constructor or destructor, the program is ill-formed,
1140 but this isn't diagnosed.
1142 15.2 para 9: Check that the fully constructed base classes and members
1143 of an object are destroyed before entering the handler of a
1144 function-try-block of a constructor or destructor for that object.
1146 build_exception_variant should sort the incoming list, so that it
1147 implements set compares, not exact list equality.  Type smashing should
1148 smash exception specifications using set union.
1150 Thrown objects are usually allocated on the heap, in the usual way.  If
1151 one runs out of heap space, throwing an object will probably never work.
1152 This could be relaxed some by passing an __in_chrg parameter to track
1153 who has control over the exception object.  Thrown objects are not
1154 allocated on the heap when they are pointer to object types.  We should
1155 extend it so that all small (<4*sizeof(void*)) objects are stored
1156 directly, instead of allocated on the heap.
1158 When the backend returns a value, it can create new exception regions
1159 that need protecting.  The new region should rethrow the object in
1160 context of the last associated cleanup that ran to completion.
1162 The structure of the code that is generated for C++ exception handling
1163 code is shown below:
1165 @example
1166 Ln:                                     throw value;
1167         copy value onto heap
1168         jump throw (Ln, id, address of copy of value on heap)
1170                                         try @{
1171 +Lstart:        the start of the main EH region
1172 |...                                            ...
1173 +Lend:          the end of the main EH region
1174                                         @} catch (T o) @{
1175                                                 ...1
1176                                         @}
1177 Lresume:
1178         nop     used to make sure there is something before
1179                 the next region ends, if there is one
1180 ...                                     ...
1182         jump Ldone
1184 Lmainhandler:    handler for the region Lstart-Lend
1185         cleanup
1186 ] zero or more, depending upon automatic vars with dtors
1187 +Lpartial:
1188 |        jump Lover
1189 +Lhere:
1190         rethrow (Lhere, same id, same obj);
1191 Lterm:          handler for the region Lpartial-Lhere
1192         call terminate
1193 Lover:
1196         call throw_type_match
1197         if (eq) @{
1198  ] these lines disappear when there is no catch condition
1199 +Lsregion2:
1200 |       ...1
1201 |       jump Lresume
1202 |Lhandler:      handler for the region Lsregion2-Leregion2
1203 |       rethrow (Lresume, same id, same obj);
1204 +Leregion2
1205         @}
1206 ] there are zero or more of these sections, depending upon how many
1207   catch clauses there are
1208 ----------------------------- expand_end_all_catch --------------------------
1209                 here we have fallen off the end of all catch
1210                 clauses, so we rethrow to outer
1211         rethrow (Lresume, same id, same obj);
1212 ----------------------------- expand_end_all_catch --------------------------
1214 L1:     maybe throw routine
1215 ] depending upon if we have expanded it or not
1216 Ldone:
1217         ret
1219 start_all_catch emits labels: Lresume, 
1221 @end example
1223 The __unwind_function takes a pointer to the throw handler, and is
1224 expected to pop the stack frame that was built to call it, as well as
1225 the frame underneath and then jump to the throw handler.  It must
1226 restore all registers to their proper values as well as all other
1227 machine state as determined by the context in which we are unwinding
1228 into.  The way I normally start is to compile:
1230         void *g;
1231         foo(void* a) @{ g = a; @}
1233 with -S, and change the thing that alters the PC (return, or ret
1234 usually) to not alter the PC, making sure to leave all other semantics
1235 (like adjusting the stack pointer, or frame pointers) in.  After that,
1236 replicate the prologue once more at the end, again, changing the PC
1237 altering instructions, and finally, at the very end, jump to `g'.
1239 It takes about a week to write this routine, if someone wants to
1240 volunteer to write this routine for any architecture, exception support
1241 for that architecture will be added to g++.  Please send in those code
1242 donations.  One other thing that needs to be done, is to double check
1243 that __builtin_return_address (0) works.
1245 @subsection Specific Targets
1247 For the alpha, the __unwind_function will be something resembling:
1249 @example
1250 void
1251 __unwind_function(void *ptr)
1253   /* First frame */
1254   asm ("ldq $15, 8($30)"); /* get the saved frame ptr; 15 is fp, 30 is sp */
1255   asm ("bis $15, $15, $30"); /* reload sp with the fp we found */
1257   /* Second frame */
1258   asm ("ldq $15, 8($30)"); /* fp */
1259   asm ("bis $15, $15, $30"); /* reload sp with the fp we found */
1261   /* Return */
1262   asm ("ret $31, ($16), 1"); /* return to PTR, stored in a0 */
1264 @end example
1266 @noindent
1267 However, there are a few problems preventing it from working.  First of
1268 all, the gcc-internal function @code{__builtin_return_address} needs to
1269 work given an argument of 0 for the alpha.  As it stands as of August
1270 30th, 1995, the code for @code{BUILT_IN_RETURN_ADDRESS} in @file{expr.c}
1271 will definitely not work on the alpha.  Instead, we need to define
1272 the macros @code{DYNAMIC_CHAIN_ADDRESS} (maybe),
1273 @code{RETURN_ADDR_IN_PREVIOUS_FRAME}, and definitely need a new
1274 definition for @code{RETURN_ADDR_RTX}.
1276 In addition (and more importantly), we need a way to reliably find the
1277 frame pointer on the alpha.  The use of the value 8 above to restore the
1278 frame pointer (register 15) is incorrect.  On many systems, the frame
1279 pointer is consistently offset to a specific point on the stack.  On the
1280 alpha, however, the frame pointer is pushed last.  First the return
1281 address is stored, then any other registers are saved (e.g., @code{s0}),
1282 and finally the frame pointer is put in place.  So @code{fp} could have
1283 an offset of 8, but if the calling function saved any registers at all,
1284 they add to the offset.
1286 The only places the frame size is noted are with the @samp{.frame}
1287 directive, for use by the debugger and the OSF exception handling model
1288 (useless to us), and in the initial computation of the new value for
1289 @code{sp}, the stack pointer.  For example, the function may start with:
1291 @example
1292 lda $30,-32($30)
1293 .frame $15,32,$26,0
1294 @end example 
1296 @noindent
1297 The 32 above is exactly the value we need.  With this, we can be sure
1298 that the frame pointer is stored 8 bytes less---in this case, at 24(sp)).
1299 The drawback is that there is no way that I (Brendan) have found to let
1300 us discover the size of a previous frame @emph{inside} the definition
1301 of @code{__unwind_function}.
1303 So to accomplish exception handling support on the alpha, we need two
1304 things: first, a way to figure out where the frame pointer was stored,
1305 and second, a functional @code{__builtin_return_address} implementation
1306 for except.c to be able to use it.
1308 Or just support DWARF 2 unwind info.
1310 @subsection New Backend Exception Support
1312 This subsection discusses various aspects of the design of the
1313 data-driven model being implemented for the exception handling backend.
1315 The goal is to generate enough data during the compilation of user code,
1316 such that we can dynamically unwind through functions at run time with a
1317 single routine (@code{__throw}) that lives in libgcc.a, built by the
1318 compiler, and dispatch into associated exception handlers.
1320 This information is generated by the DWARF 2 debugging backend, and
1321 includes all of the information __throw needs to unwind an arbitrary
1322 frame.  It specifies where all of the saved registers and the return
1323 address can be found at any point in the function.
1325 Major disadvantages when enabling exceptions are:
1327 @itemize @bullet
1328 @item
1329 Code that uses caller saved registers, can't, when flow can be
1330 transferred into that code from an exception handler.  In high performance
1331 code this should not usually be true, so the effects should be minimal.
1333 @end itemize
1335 @subsection Backend Exception Support
1337 The backend must be extended to fully support exceptions.  Right now
1338 there are a few hooks into the alpha exception handling backend that
1339 resides in the C++ frontend from that backend that allows exception
1340 handling to work in g++.  An exception region is a segment of generated
1341 code that has a handler associated with it.  The exception regions are
1342 denoted in the generated code as address ranges denoted by a starting PC
1343 value and an ending PC value of the region.  Some of the limitations
1344 with this scheme are:
1346 @itemize @bullet
1347 @item
1348 The backend replicates insns for such things as loop unrolling and
1349 function inlining.  Right now, there are no hooks into the frontend's
1350 exception handling backend to handle the replication of insns.  When
1351 replication happens, a new exception region descriptor needs to be
1352 generated for the new region.
1354 @item
1355 The backend expects to be able to rearrange code, for things like jump
1356 optimization.  Any rearranging of the code needs have exception region
1357 descriptors updated appropriately.
1359 @item
1360 The backend can eliminate dead code.  Any associated exception region
1361 descriptor that refers to fully contained code that has been eliminated
1362 should also be removed, although not doing this is harmless in terms of
1363 semantics.
1365 @end itemize
1367 The above is not meant to be exhaustive, but does include all things I
1368 have thought of so far.  I am sure other limitations exist.
1370 Below are some notes on the migration of the exception handling code
1371 backend from the C++ frontend to the backend.
1373 NOTEs are to be used to denote the start of an exception region, and the
1374 end of the region.  I presume that the interface used to generate these
1375 notes in the backend would be two functions, start_exception_region and
1376 end_exception_region (or something like that).  The frontends are
1377 required to call them in pairs.  When marking the end of a region, an
1378 argument can be passed to indicate the handler for the marked region.
1379 This can be passed in many ways, currently a tree is used.  Another
1380 possibility would be insns for the handler, or a label that denotes a
1381 handler.  I have a feeling insns might be the best way to pass it.
1382 Semantics are, if an exception is thrown inside the region, control is
1383 transferred unconditionally to the handler.  If control passes through
1384 the handler, then the backend is to rethrow the exception, in the
1385 context of the end of the original region.  The handler is protected by
1386 the conventional mechanisms; it is the frontend's responsibility to
1387 protect the handler, if special semantics are required.
1389 This is a very low level view, and it would be nice is the backend
1390 supported a somewhat higher level view in addition to this view.  This
1391 higher level could include source line number, name of the source file,
1392 name of the language that threw the exception and possibly the name of
1393 the exception.  Kenner may want to rope you into doing more than just
1394 the basics required by C++.  You will have to resolve this.  He may want
1395 you to do support for non-local gotos, first scan for exception handler,
1396 if none is found, allow the debugger to be entered, without any cleanups
1397 being done.  To do this, the backend would have to know the difference
1398 between a cleanup-rethrower, and a real handler, if would also have to
1399 have a way to know if a handler `matches' a thrown exception, and this
1400 is frontend specific.
1402 The stack unwinder is one of the hardest parts to do.  It is highly
1403 machine dependent.  The form that kenner seems to like was a couple of
1404 macros, that would do the machine dependent grunt work.  One preexisting
1405 function that might be of some use is __builtin_return_address ().  One
1406 macro he seemed to want was __builtin_return_address, and the other
1407 would do the hard work of fixing up the registers, adjusting the stack
1408 pointer, frame pointer, arg pointer and so on.
1411 @node Free Store, Mangling, Exception Handling, Top
1412 @section Free Store
1414 @code{operator new []} adds a magic cookie to the beginning of arrays
1415 for which the number of elements will be needed by @code{operator delete
1416 []}.  These are arrays of objects with destructors and arrays of objects
1417 that define @code{operator delete []} with the optional size_t argument.
1418 This cookie can be examined from a program as follows:
1420 @example
1421 typedef unsigned long size_t;
1422 extern "C" int printf (const char *, ...);
1424 size_t nelts (void *p)
1426   struct cookie @{
1427     size_t nelts __attribute__ ((aligned (sizeof (double))));
1428   @};
1430   cookie *cp = (cookie *)p;
1431   --cp;
1433   return cp->nelts;
1436 struct A @{
1437   ~A() @{ @}
1440 main()
1442   A *ap = new A[3];
1443   printf ("%ld\n", nelts (ap));
1445 @end example
1447 @section Linkage
1448 The linkage code in g++ is horribly twisted in order to meet two design goals:
1450 1) Avoid unnecessary emission of inlines and vtables.
1452 2) Support pedantic assemblers like the one in AIX.
1454 To meet the first goal, we defer emission of inlines and vtables until
1455 the end of the translation unit, where we can decide whether or not they
1456 are needed, and how to emit them if they are.
1457         
1458 @node Mangling, Concept Index, Free Store, Top
1459 @section Function name mangling for C++ and Java
1461 Both C++ and Jave provide overloaded function and methods,
1462 which are methods with the same types but different parameter lists.
1463 Selecting the correct version is done at compile time.
1464 Though the overloaded functions have the same name in the source code,
1465 they need to be translated into different assembler-level names,
1466 since typical assemblers and linkers cannot handle overloading.
1467 This process of encoding the parameter types with the method name
1468 into a unique name is called @dfn{name mangling}.  The inverse
1469 process is called @dfn{demangling}.
1471 It is convenient that C++ and Java use compatible mangling schemes,
1472 since the makes life easier for tools such as gdb, and it eases
1473 integration between C++ and Java.
1475 Note there is also a standard "Jave Native Interface" (JNI) which
1476 implements a different calling convention, and uses a different
1477 mangling scheme.  The JNI is a rather abstract ABI so Java can call methods
1478 written in C or C++; 
1479 we are concerned here about a lower-level interface primarily
1480 intended for methods written in Java, but that can also be used for C++
1481 (and less easily C).
1483 Note that on systems that follow BSD tradition, a C identifier @code{var}
1484 would get "mangled" into the assembler name @samp{_var}.  On such
1485 systems, all other mangled names are also prefixed by a @samp{_}
1486 which is not shown in the following examples.
1488 @subsection Method name mangling
1490 C++ mangles a method by emitting the function name, followed by @code{__},
1491 followed by encodings of any method qualifiers (such as @code{const}),
1492 followed by the mangling of the method's class,
1493 followed by the mangling of the parameters, in order.
1495 For example @code{Foo::bar(int, long) const} is mangled
1496 as @samp{bar__C3Fooil}.
1498 For a constructor, the method name is left out.
1499 That is @code{Foo::Foo(int, long) const}  is mangled 
1500 as @samp{__C3Fooil}. 
1502 GNU Java does the same.
1504 @subsection Primitive types
1506 The C++ types @code{int}, @code{long}, @code{short}, @code{char},
1507 and @code{long long} are mangled as @samp{i}, @samp{l},
1508 @samp{s}, @samp{c}, and @samp{x}, respectively.
1509 The corresponding unsigned types have @samp{U} prefixed
1510 to the mangling.  The type @code{signed char} is mangled @samp{Sc}.
1512 The C++ and Java floating-point types @code{float} and @code{double}
1513 are mangled as @samp{f} and @samp{d} respectively.
1515 The C++ @code{bool} type and the Java @code{boolean} type are
1516 mangled as @samp{b}.
1518 The C++ @code{wchar_t} and the Java @code{char} types are
1519 mangled as @samp{w}.
1521 The Java integral types @code{byte}, @code{short}, @code{int}
1522 and @code{long} are mangled as @samp{c}, @samp{s}, @samp{i},
1523 and @samp{x}, respectively.
1525 C++ code that has included @code{javatypes.h} will mangle
1526 the typedefs  @code{jbyte}, @code{jshort}, @code{jint}
1527 and @code{jlong} as respectively @samp{c}, @samp{s}, @samp{i},
1528 and @samp{x}.  (This has not been implemented yet.)
1530 @subsection Mangling of simple names
1532 A simple class, package, template, or namespace name is
1533 encoded as the number of characters in the name, followed by
1534 the actual characters.  Thus the class @code{Foo}
1535 is encoded as @samp{3Foo}.
1537 If any of the characters in the name are not alphanumeric
1538 (i.e not one of the standard ASCII letters, digits, or '_'),
1539 or the initial character is a digit, then the name is
1540 mangled as a sequence of encoded Unicode letters.
1541 A Unicode encoding starts with a @samp{U} to indicate
1542 that Unicode escapes are used, followed by the number of
1543 bytes used by the Unicode encoding, followed by the bytes
1544 representing the encoding.  ASSCI letters and
1545 non-initial digits are encoded without change.  However, all
1546 other characters (including underscore and initial digits) are
1547 translated into a sequence starting with an underscore,
1548 followed by the big-endian 4-hex-digit lower-case encoding of the character.
1550 If a method name contains Unicode-escaped characters, the
1551 entire mangled method name is followed by a @samp{U}.
1553 For example, the method @code{X\u0319::M\u002B(int)} is encoded as
1554 @samp{M_002b__U6X_0319iU}.
1557 @subsection Pointer and reference types
1559 A C++ pointer type is mangled as @samp{P} followed by the
1560 mangling of the type pointed to.
1562 A C++ reference type as mangled as @samp{R} followed by the
1563 mangling of the type referenced.
1565 A Java object reference type is equivalent
1566 to a C++ pointer parameter, so we mangle such an parameter type
1567 as @samp{P} followed by the mangling of the class name.
1569 @subsection Squangled type compression
1571 Squangling (enabled with the @samp{-fsquangle} option), utilizes the
1572 @samp{B} code to indicate reuse of a previously seen type within an
1573 indentifier. Types are recognized in a left to right manner and given
1574 increasing values, which are appended to the code in the standard
1575 manner. Ie, multiple digit numbers are delimited by @samp{_}
1576 characters. A type is considered to be any non primitive type,
1577 regardless of whether its a parameter, template parameter, or entire
1578 template. Certain codes are considered modifiers of a type, and are not
1579 included as part of the type. These are the @samp{C}, @samp{V},
1580 @samp{P}, @samp{A}, @samp{R}, @samp{U} and @samp{u} codes, denoting
1581 constant, volatile, pointer, array, reference, unsigned, and restrict.
1582 These codes may precede a @samp{B} type in order to make the required
1583 modifications to the type.
1585 For example:
1586 @example
1587 template <class T> class class1 @{ @};
1589 template <class T> class class2 @{ @};
1591 class class3 @{ @};
1593 int f(class2<class1<class3> > a ,int b, const class1<class3>&c, class3 *d) @{ @}
1595     B0 -> class2<class1<class3>
1596     B1 -> class1<class3>
1597     B2 -> class3
1598 @end example
1599 Produces the mangled name @samp{f__FGt6class21Zt6class11Z6class3iRCB1PB2}.
1600 The int parameter is a basic type, and does not receive a B encoding...
1602 @subsection Qualified names
1604 Both C++ and Java allow a class to be lexically nested inside another
1605 class.  C++ also supports namespaces.
1606 Java also supports packages.
1608 These are all mangled the same way:  First the letter @samp{Q}
1609 indicates that we are emitting a qualified name.
1610 That is followed by the number of parts in the qualified name.
1611 If that number is 9 or less, it is emitted with no delimiters.
1612 Otherwise, an underscore is written before and after the count.
1613 Then follows each part of the qualified name, as described above.
1615 For example @code{Foo::\u0319::Bar} is encoded as
1616 @samp{Q33FooU5_03193Bar}.
1618 Squangling utilizes the the letter @samp{K} to indicate a 
1619 remembered portion of a qualified name. As qualified names are processed
1620 for an identifier, the names are numbered and remembered in a 
1621 manner similar to the @samp{B} type compression code. 
1622 Names are recognized left to right, and given increasing values, which are
1623 appended to the code in the standard manner. ie, multiple digit numbers
1624 are delimited by @samp{_} characters.
1626 For example 
1627 @example
1628 class Andrew 
1630   class WasHere 
1631   @{
1632       class AndHereToo 
1633       @{
1634       @};
1635   @};
1638 f(Andrew&r1, Andrew::WasHere& r2, Andrew::WasHere::AndHereToo& r3) @{ @}
1640    K0 ->  Andrew
1641    K1 ->  Andrew::WasHere
1642    K2 ->  Andrew::WasHere::AndHereToo
1643 @end example
1644 Function @samp{f()} would be mangled as : 
1645 @samp{f__FR6AndrewRQ2K07WasHereRQ2K110AndHereToo}
1647 There are some occasions when either a @samp{B} or @samp{K} code could
1648 be chosen, preference is always given to the @samp{B} code. Ie, the example
1649 in the section on @samp{B} mangling could have used a @samp{K} code 
1650 instead of @samp{B2}.
1652 @subsection Templates
1654 A class template instantiation is encoded as the letter @samp{t},
1655 followed by the encoding of the template name, followed
1656 the number of template parameters, followed by encoding of the template
1657 parameters.  If a template parameter is a type, it is written
1658 as a @samp{Z} followed by the encoding of the type.
1660 A function template specialization (either an instantiation or an
1661 explicit specialization) is encoded by an @samp{H} followed by the
1662 encoding of the template parameters, as described above, followed by an
1663 @samp{_}, the encoding of the argument types to the template function
1664 (not the specialization), another @samp{_}, and the return type.  (Like
1665 the argument types, the return type is the return type of the function
1666 template, not the specialization.)  Template parameters in the argument
1667 and return types are encoded by an @samp{X} for type parameters, or a
1668 @samp{Y} for constant parameters, an index indicating their position
1669 in the template parameter list declaration, and their template depth.
1671 @subsection Arrays
1673 C++ array types are mangled by emitting @samp{A}, followed by
1674 the length of the array, followed by an @samp{_}, followed by
1675 the mangling of the element type.  Of course, normally
1676 array parameter types decay into a pointer types, so you
1677 don't see this.
1679 Java arrays are objects.  A Java type @code{T[]} is mangled
1680 as if it were the C++ type @code{JArray<T>}.
1681 For example @code{java.lang.String[]} is encoded as
1682 @samp{Pt6JArray1ZPQ34java4lang6String}.
1684 @subsection Static fields
1686 Both C++ and Java classes can have static fields.
1687 These are allocated statically, and are shared among all instances.
1689 The mangling starts with a prefix (@samp{_} in most systems), which is
1690 followed by the mangling
1691 of the class name, followed by the "joiner" and finally the field name.
1692 The joiner (see @code{JOINER} in @code{cp-tree.h}) is a special
1693 separator character.  For historical reasons (and idiosyncracies
1694 of assembler syntax) it can @samp{$} or @samp{.} (or even
1695 @samp{_} on a few systems).  If the joiner is @samp{_} then the prefix
1696 is @samp{__static_} instead of just @samp{_}.
1698 For example @code{Foo::Bar::var} (or @code{Foo.Bar.var} in Java syntax)
1699 would be encoded as @samp{_Q23Foo3Bar$var} or @samp{_Q23Foo3Bar.var}
1700 (or rarely @samp{__static_Q23Foo3Bar_var}).
1702 If the name of a static variable needs Unicode escapes,
1703 the Unicode indicator @samp{U} comes before the "joiner".
1704 This @code{\u1234Foo::var\u3445} becomes @code{_U8_1234FooU.var_3445}.
1706 @subsection Table of demangling code characters
1708 The following special characters are used in mangling:
1710 @table @samp
1711 @item A
1712 Indicates a C++ array type.
1714 @item b
1715 Encodes the C++ @code{bool} type,
1716 and the Java @code{boolean} type.
1718 @item B
1719 Used for squangling. Similar in concept to the 'T' non-squangled code.
1721 @item c
1722 Encodes the C++ @code{char} type, and the Java @code{byte} type.
1724 @item C
1725 A modifier to indicate a @code{const} type.
1726 Also used to indicate a @code{const} member function
1727 (in which cases it precedes the encoding of the method's class).
1729 @item d
1730 Encodes the C++ and Java @code{double} types.
1732 @item e
1733 Indicates extra unknown arguments @code{...}.
1735 @item E
1736 Indicates the opening parenthesis of an expression.
1738 @item f
1739 Encodes the C++ and Java @code{float} types.
1741 @item F
1742 Used to indicate a function type.
1744 @item H
1745 Used to indicate a template function.
1747 @item i
1748 Encodes the C++ and Java @code{int} types.
1750 @item I
1751 Encodes typedef names of the form @code{int@var{n}_t}, where @var{n} is a
1752 positive decimal number.  The @samp{I} is followed by either two
1753 hexidecimal digits, which encode the value of @var{n}, or by an
1754 arbitrary number of hexidecimal digits between underscores.  For
1755 example, @samp{I40} encodes the type @code{int64_t}, and @samp{I_200_}
1756 encodes the type @code{int512_t}.
1758 @item J
1759 Indicates a complex type.
1761 @item K
1762 Used by squangling to compress qualified names.
1764 @item l
1765 Encodes the C++ @code{long} type.
1767 @item n
1768 Immediate repeated type. Followed by the repeat count.
1770 @item N 
1771 Repeated type. Followed by the repeat count of the repeated type,
1772 followed by the type index of the repeated type. Due to a bug in
1773 g++ 2.7.2, this is only generated if index is 0. Superceded by
1774 @samp{n} when squangling.
1776 @item P
1777 Indicates a pointer type.  Followed by the type pointed to.
1779 @item Q
1780 Used to mangle qualified names, which arise from nested classes.
1781 Also used for namespaces.
1782 In Java used to mangle package-qualified names, and inner classes.
1784 @item r
1785 Encodes the GNU C++ @code{long double} type.
1787 @item R
1788 Indicates a reference type.  Followed by the referenced type.
1790 @item s
1791 Encodes the C++ and java @code{short} types.
1793 @item S
1794 A modifier that indicates that the following integer type is signed.
1795 Only used with @code{char}.
1797 Also used as a modifier to indicate a static member function.
1799 @item t
1800 Indicates a template instantiation.
1802 @item T
1803 A back reference to a previously seen type.
1805 @item U
1806 A modifier that indicates that the following integer type is unsigned.
1807 Also used to indicate that the following class or namespace name
1808 is encoded using Unicode-mangling.
1810 @item u
1811 The @code{restrict} type qualifier.
1813 @item v
1814 Encodes the C++ and Java @code{void} types.
1816 @item V
1817 A modifier for a @code{volatile} type or method.
1819 @item w
1820 Encodes the C++ @code{wchar_t} type, and the Java @code{char} types.
1822 @item W
1823 Indicates the closing parenthesis of an expression.
1825 @item x
1826 Encodes the GNU C++ @code{long long} type, and the Java @code{long} type.
1828 @item X
1829 Encodes a template type parameter, when part of a function type.
1831 @item Y
1832 Encodes a template constant parameter, when part of a function type.
1834 @item Z
1835 Used for template type parameters. 
1837 @end table
1839 The letters @samp{G}, @samp{M}, @samp{O}, and @samp{p}
1840 also seem to be used for obscure purposes ...
1842 @node Concept Index,  , Mangling, Top
1844 @section Concept Index
1846 @printindex cp
1848 @bye