Annotation of GNUtools/cc/g++int.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++ frontend 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: * Error Reporting::             
                     23: * Concept Index::               
                     24: @end menu
                     25: 
                     26: @node Limitations of g++, Routines, Top, Top
                     27: @section Limitations of g++
                     28: 
                     29: @itemize @bullet
                     30: @item
                     31: Limitations on input source code: 240 nesting levels with the parser
                     32: stacksize (YYSTACKSIZE) set to 500 (the default), and requires around
                     33: 16.4k swap space per nesting level.  The parser needs about 2.09 *
                     34: number of nesting levels worth of stackspace.
                     35: 
                     36: @cindex pushdecl_class_level
                     37: @item
                     38: I suspect there are other uses of pushdecl_class_level that do not call
                     39: set_identifier_type_value in tandem with the call to
                     40: pushdecl_class_level.  It would seem to be an omission.
                     41: 
                     42: @cindex delete, two argument
                     43: @item
                     44: For two argument delete, the second argument is always calculated by
                     45: ``virtual_size ='' in the source.  It currently has a problem, in that
                     46: object size is not calculated by the virtual destructor and passed back
                     47: for the second parameter to delete.  Destructors need to return a value
                     48: just like constructors.  ANSI C++ Jun 5 92 wp 12.5.6
                     49: 
                     50: The second argument is magically deleted in build_method_call, if it is
                     51: not used.  It needs to be deleted for global operator delete also.
                     52: 
                     53: @cindex visibility checking
                     54: @item
                     55: Visibility checking in general is unimplemented, there are a few cases
                     56: where it is implemented.  grok_enum_decls should be used in more places
                     57: to do visibility checking, but this is only the tip of a bigger problem.
                     58: 
                     59: @cindex @code{volatile}
                     60: @item
                     61: @code{volatile} is not implemented in general.
                     62: 
                     63: @cindex pointers to members
                     64: @item
                     65: Pointers to members are only minimally supported, and there are places
                     66: where the grammar doesn't even properly accept them yet.
                     67: 
                     68: @end itemize
                     69: 
                     70: @node Routines, Implementation Specifics, Limitations of g++, Top
                     71: @section Routines
                     72: 
                     73: This section describes some of the routines used in the C++ front-end.
                     74: 
                     75: @code{build_vtable} and @code{prepare_fresh_vtable} is used only within
                     76: the @file{cp-class.c} file, and only in @code{finish_struct} and
                     77: @code{modify_vtable_entries}.
                     78: 
                     79: @code{build_vtable}, @code{prepare_fresh_vtable}, and
                     80: @code{finish_struct} are the only routines that set @code{DECL_VPARENT}.
                     81: 
                     82: @code{finish_struct} can steal the virtual function table from parents,
                     83: this prohibits related_vslot from working.  When finish_struct steals,
                     84: we know that
                     85: 
                     86: @example
                     87: get_binfo (DECL_FIELD_CONTEXT (CLASSTYPE_VFIELD (t)), t, 0)
                     88: @end example
                     89: 
                     90: @noindent
                     91: will get the related binfo.
                     92: 
                     93: @code{layout_basetypes} does something with the VIRTUALS.
                     94: 
                     95: Supposedly (according to Tiemann) most of the breadth first searching
                     96: done, like in @code{get_base_distance} and in @code{get_binfo} was not
                     97: because of any design decision.  I have since found out the at least one
                     98: part of the compiler needs the notion of depth first binfo searching, I
                     99: am going to try and convert the whole thing, it should just work.  The
                    100: term left-most refers to the depth first left-most node.  It uses
                    101: @code{MAIN_VARIANT == type} as the condition to get left-most, because
                    102: the things that have @code{BINFO_OFFSET}s of zero are shared and will
                    103: have themselves as their own @code{MAIN_VARIANT}s.  The non-shared right
                    104: ones, are copies of the left-most one, hence if it is its own
                    105: @code{MAIN_VARIENT}, we know it IS a left-most one, if it is not, it is
                    106: a non-left-most one.
                    107: 
                    108: @code{get_base_distance}'s path and distance matters in its use in:
                    109: 
                    110: @itemize @bullet
                    111: @item
                    112: @code{prepare_fresh_vtable} (the code is probably wrong)
                    113: @item
                    114: @code{init_vfields} Depends upon distance probably in a safe way,
                    115: build_offset_ref might use partial paths to do further lookups,
                    116: hack_identifier is probably not properly checking visibility.
                    117: 
                    118: @item
                    119: @code{get_first_matching_virtual} probably should check for
                    120: @code{get_base_distance} returning -2.
                    121: 
                    122: @item
                    123: @code{resolve_offset_ref} should be called in a more deterministic
                    124: manner.  Right now, it is called in some random contexts, like for
                    125: arguments at @code{build_method_call} time, @code{default_conversion}
                    126: time, @code{convert_arguments} time, @code{build_unary_op} time,
                    127: @code{build_c_cast} time, @code{build_modify_expr} time,
                    128: @code{convert_for_assignment} time, and
                    129: @code{convert_for_initialization} time.
                    130: 
                    131: But, there are still more contexts it needs to be called in, one was the
                    132: ever simple:
                    133: 
                    134: @example
                    135: if (obj.*pmi != 7)
                    136:    @dots{}
                    137: @end example
                    138: 
                    139: Seems that the problems were due to the fact that @code{TREE_TYPE} of
                    140: the @code{OFFSET_REF} was not a @code{OFFSET_TYPE}, but rather the type
                    141: of the referent (like @code{INTEGER_TYPE}).  This problem was fixed by
                    142: changing @code{default_conversion} to check @code{TREE_CODE (x)},
                    143: instead of only checking @code{TREE_CODE (TREE_TYPE (x))} to see if it
                    144: was @code{OFFSET_TYPE}.
                    145: 
                    146: @end itemize
                    147: 
                    148: @node Implementation Specifics, Glossary, Routines, Top
                    149: @section Implementation Specifics
                    150: 
                    151: @itemize @bullet
                    152: @item Explicit Initialization
                    153: 
                    154: The global list @code{current_member_init_list} contains the list of
                    155: mem-initializers specified in a constructor declaration.  For example:
                    156: 
                    157: @example
                    158: foo::foo() : a(1), b(2) @{@}
                    159: @end example
                    160: 
                    161: @noindent
                    162: will initialize @samp{a} with 1 and @samp{b} with 2.
                    163: @code{expand_member_init} places each initialization (a with 1) on the
                    164: global list.  Then, when the fndecl is being processed,
                    165: @code{emit_base_init} runs down the list, initializing them.  It used to
                    166: be the case that g++ first ran down @code{current_member_init_list},
                    167: then ran down the list of members initializing the ones that weren't
                    168: explicitly initialized.  Things were rewritten to perform the
                    169: initializations in order of declaration in the class.  So, for the above
                    170: example, @samp{a} and @samp{b} will be initialized in the order that
                    171: they were declared:
                    172: 
                    173: @example
                    174: class foo @{ public: int b; int a; foo (); @};
                    175: @end example
                    176: 
                    177: @noindent
                    178: Thus, @samp{b} will be initialized with 2 first, then @samp{a} will be
                    179: initialized with 1, regardless of how they're listed in the mem-initializer.
                    180: 
                    181: @item Argument Matching
                    182: 
                    183: In early 1993, the argument matching scheme in @sc{gnu} C++ changed
                    184: significantly.  The original code was completely replaced with a new
                    185: method that will, hopefully, be easier to understand and make fixing
                    186: specific cases much easier.
                    187: 
                    188: The @samp{-fansi-overloading} option is used to enable the new code; at
                    189: some point in the future, it will become the default behavior of the
                    190: compiler.
                    191: 
                    192: The file @file{cp-call.c} contains all of the new work, in the functions
                    193: @code{rank_for_overload}, @code{compute_harshness},
                    194: @code{compute_conversion_costs}, and @code{ideal_candidate}.
                    195: 
                    196: Instead of using obscure numerical values, the quality of an argument
                    197: match is now represented by clear, individual codes.  The new data
                    198: structure @code{struct harshness} (it used to be an @code{unsigned}
                    199: number) contains:
                    200: 
                    201: @enumerate a
                    202: @item the @samp{code} field, to signify what was involved in matching two
                    203: arguments;
                    204: @item the @samp{distance} field, used in situations where inheritance
                    205: decides which function should be called (one is ``closer'' than
                    206: another);
                    207: @item and the @samp{int_penalty} field, used by some codes as a tie-breaker.
                    208: @end enumerate
                    209: 
                    210: The @samp{code} field is a number with a given bit set for each type of
                    211: code, OR'd together.  The new codes are:
                    212: 
                    213: @itemize @bullet
                    214: @item @code{EVIL_CODE}
                    215: The argument was not a permissible match.
                    216: 
                    217: @item @code{CONST_CODE}
                    218: Currently, this is only used by @code{compute_conversion_costs}, to
                    219: distinguish when a non-@code{const} member function is called from a
                    220: @code{const} member function.
                    221: 
                    222: @item @code{ELLIPSIS_CODE}
                    223: A match against an ellipsis @samp{...} is considered worse than all others.
                    224: 
                    225: @item @code{USER_CODE}
                    226: Used for a match involving a user-defined conversion.
                    227: 
                    228: @item @code{STD_CODE}
                    229: A match involving a standard conversion.
                    230: 
                    231: @item @code{PROMO_CODE}
                    232: A match involving an integral promotion.  For these, the
                    233: @code{int_penalty} field is used to handle the ARM's rule (XXX cite)
                    234: that a smaller @code{unsigned} type should promote to a @code{int}, not
                    235: to an @code{unsigned int}.
                    236: 
                    237: @item @code{QUAL_CODE}
                    238: Used to mark use of qualifiers like @code{const} and @code{volatile}.
                    239: 
                    240: @item @code{TRIVIAL_CODE}
                    241: Used for trivial conversions.  The @samp{int_penalty} field is used by
                    242: @code{convert_harshness} to communicate further penalty information back
                    243: to @code{build_overload_call_real} when deciding which function should
                    244: be call.
                    245: @end itemize
                    246: 
                    247: The functions @code{convert_to_aggr} and @code{build_method_call} use
                    248: @code{compute_conversion_costs} to rate each argument's suitability for
                    249: a given candidate function (that's how we get the list of candidates for
                    250: @code{ideal_candidate}).
                    251: 
                    252: @end itemize
                    253: 
                    254: @node Glossary, Macros, Implementation Specifics, Top
                    255: @section Glossary
                    256: 
                    257: @table @r
                    258: @item binfo
                    259: The main data structure in the compiler used to represent the
                    260: inheritance relationships between classes.  The data in the binfo can be
                    261: accessed by the BINFO_ accessor macros.
                    262: 
                    263: @item vtable
                    264: @itemx virtual function table
                    265: 
                    266: The virtual function table holds information used in virtual function
                    267: dispatching.  In the compiler, they are usually referred to as vtables,
                    268: or vtbls.  The first index is not used in the normal way, I believe it
                    269: is probably used for the virtual destructor.
                    270: 
                    271: @item vfield
                    272: 
                    273: vfields can be thought of as the base information needed to build
                    274: vtables.  For every vtable that exists for a class, there is a vfield.
                    275: See also vtable and virtual function table pointer.  When a type is used
                    276: as a base class to another type, the virtual function table for the
                    277: derived class can be based upon the vtable for the base class, just
                    278: extended to include the additional virtual methods declared in the
                    279: derived class.
                    280: 
                    281: @item virtual function table pointer
                    282: 
                    283: These are @code{FIELD_DECL}s that are pointer types that point to
                    284: vtables.  See also vtable and vfield.
                    285: @end table
                    286: 
                    287: @node Macros, Typical Behavior, Glossary, Top
                    288: @section Macros
                    289: 
                    290: This section describes some of the macros used on trees.  The list
                    291: should be alphabetical.  Eventually all macros should be documented
                    292: here.  There are some postscript drawings that can be used to better
                    293: understnad from of the more complex data structures, contact Mike Stump
                    294: (@code{mrs@@cygnus.com}) for information about them.
                    295: 
                    296: @table @code
                    297: @item BINFO_BASETYPES
                    298: A vector of additional binfos for the types inherited by this basetype.
                    299: The binfos are fully unshared (except for virtual bases, in which
                    300: case the binfo structure is shared).
                    301: 
                    302:    If this basetype describes type D as inherited in C,
                    303:    and if the basetypes of D are E anf F,
                    304:    then this vector contains binfos for inheritance of E and F by C.
                    305: 
                    306: Has values of:
                    307: 
                    308:        TREE_VECs
                    309: 
                    310: 
                    311: @item BINFO_INHERITANCE_CHAIN
                    312: Temporarily used to represent specific inheritances.  It usually points
                    313: to the binfo associated with the lesser derived type, but it can be
                    314: reversed by reverse_path.  For example:
                    315: 
                    316: @example
                    317:        Z ZbY   least derived
                    318:        |
                    319:        Y YbX
                    320:        |
                    321:        X Xb    most derived
                    322: 
                    323: TYPE_BINFO (X) == Xb
                    324: BINFO_INHERITANCE_CHAIN (Xb) == YbX
                    325: BINFO_INHERITANCE_CHAIN (Yb) == ZbY
                    326: BINFO_INHERITANCE_CHAIN (Zb) == 0
                    327: @end example
                    328: 
                    329: Not sure is the above is really true, get_base_distance has is point
                    330: towards the most derived type, opposite from above.
                    331: 
                    332: Set by build_vbase_path, recursive_bounded_basetype_p,
                    333: get_base_distance, lookup_field, lookup_fnfields, and reverse_path.
                    334: 
                    335: What things can this be used on:
                    336: 
                    337:        TREE_VECs that are binfos
                    338: 
                    339: 
                    340: @item BINFO_OFFSET
                    341: The offset where this basetype appears in its containing type.
                    342: BINFO_OFFSET slot holds the offset (in bytes) from the base of the
                    343: complete object to the base of the part of the object that is allocated
                    344: on behalf of this `type'.  This is always 0 except when there is
                    345: multiple inheritance.
                    346: 
                    347: Used on TREE_VEC_ELTs of the binfos BINFO_BASETYPES (...) for example.
                    348: 
                    349: 
                    350: @item BINFO_VIRTUALS
                    351: A unique list of functions for the virtual function table.  See also
                    352: TYPE_BINFO_VIRTUALS.
                    353: 
                    354: What things can this be used on:
                    355: 
                    356:        TREE_VECs that are binfos
                    357: 
                    358: 
                    359: @item BINFO_VTABLE
                    360: Used to find the VAR_DECL that is the virtual function table associated
                    361: with this binfo.  See also TYPE_BINFO_VTABLE.  To get the virtual
                    362: function table pointer, see CLASSTYPE_VFIELD.
                    363: 
                    364: What things can this be used on:
                    365: 
                    366:        TREE_VECs that are binfos
                    367: 
                    368: Has values of:
                    369: 
                    370:        VAR_DECLs that are virtual function tables
                    371: 
                    372: 
                    373: @item BLOCK_SUPERCONTEXT
                    374: In the outermost scope of each function, it points to the FUNCTION_DECL
                    375: node.  It aids in better DWARF support of inline functions.
                    376: 
                    377: 
                    378: @item CLASSTYPE_TAGS
                    379: CLASSTYPE_TAGS is a linked (via TREE_CHAIN) list of member classes of a
                    380: class. TREE_PURPOSE is the name, TREE_VALUE is the type (pushclass scans
                    381: these and calls pushtag on them.)
                    382: 
                    383: finish_struct scans these to produce TYPE_DECLs to add to the
                    384: TYPE_FIELDS of the type.
                    385: 
                    386: It is expected that name found in the TREE_PURPOSE slot is unique,
                    387: resolve_scope_to_name is one such place that depends upon this
                    388: uniqueness.
                    389: 
                    390: 
                    391: @item CLASSTYPE_METHOD_VEC
                    392: The following is true after finish_struct has been called (on the
                    393: class?) but not before.  Before finish_struct is called, things are
                    394: different to some extent.  Contains a TREE_VEC of methods of the class.
                    395: The TREE_VEC_LENGTH is the number of differently named methods plus one
                    396: for the 0th entry.  The 0th entry is always allocated, and reserved for
                    397: ctors and dtors.  If there are none, TREE_VEC_ELT(N,0) == NULL_TREE.
                    398: Each entry of the TREE_VEC is a FUNCTION_DECL.  For each FUNCTION_DECL,
                    399: there is a DECL_CHAIN slot.  If the FUNCTION_DECL is the last one with a
                    400: given name, the DECL_CHAIN slot is NULL_TREE.  Otherwise it is the next
                    401: method that has the same name (but a different signature).  It would
                    402: seem that it is not true that because the DECL_CHAIN slot is used in
                    403: this way, we cannot call pushdecl to put the method in the global scope
                    404: (cause that would overwrite the TREE_CHAIN slot), because they use
                    405: different _CHAINs.  finish_struct_methods setups up one version of the
                    406: TREE_CHAIN slots on the FUNCTION_DECLs.
                    407: 
                    408: friends are kept in TREE_LISTs, so that there's no need to use their
                    409: TREE_CHAIN slot for anything.
                    410: 
                    411: Has values of:
                    412: 
                    413:        TREE_VECs
                    414:        
                    415: 
                    416: @item CLASSTYPE_VFIELD
                    417: Seems to be in the process of being renamed TYPE_VFIELD.  Use on types
                    418: to get the main virtual function table pointer.  To get the virtual
                    419: function table use BINFO_VTABLE (TYPE_BINFO ()).
                    420: 
                    421: Has values of:
                    422: 
                    423:        FIELD_DECLs that are virtual function table pointers
                    424: 
                    425: What things can this be used on:
                    426: 
                    427:        RECORD_TYPEs
                    428: 
                    429: 
                    430: @item DECL_CLASS_CONTEXT
                    431: Identifys the context that the _DECL was found in.  For virtual function
                    432: tables, it points to the type associated with the virtual function
                    433: table.  See also DECL_CONTEXT, DECL_FIELD_CONTEXT and DECL_FCONTEXT.
                    434: 
                    435: The difference between this and DECL_CONTEXT, is that for virtuals
                    436: functions like:
                    437: 
                    438: @example
                    439: struct A
                    440: @{
                    441:   virtual int f ();
                    442: @};
                    443: 
                    444: struct B : A
                    445: @{
                    446:   int f ();
                    447: @};
                    448: 
                    449: DECL_CONTEXT (A::f) == A
                    450: DECL_CLASS_CONTEXT (A::f) == A
                    451: 
                    452: DECL_CONTEXT (B::f) == A
                    453: DECL_CLASS_CONTEXT (B::f) == B
                    454: @end example
                    455: 
                    456: Has values of:
                    457: 
                    458:        RECORD_TYPEs, or UNION_TYPEs
                    459: 
                    460: What things can this be used on:
                    461: 
                    462:        TYPE_DECLs, _DECLs
                    463: 
                    464: 
                    465: @item DECL_CONTEXT
                    466: Identifys the context that the _DECL was found in.  Can be used on
                    467: virtual function tables to find the type associated with the virtual
                    468: function table, but since they are FIELD_DECLs, DECL_FIELD_CONTEXT is a
                    469: better access method.  Internally the same as DECL_FIELD_CONTEXT, so
                    470: don't us both.  See also DECL_FIELD_CONTEXT, DECL_FCONTEXT and
                    471: DECL_CLASS_CONTEXT.
                    472: 
                    473: Has values of:
                    474: 
                    475:        RECORD_TYPEs
                    476: 
                    477: 
                    478: What things can this be used on:
                    479: 
                    480: @display
                    481: VAR_DECLs that are virtual function tables
                    482: _DECLs
                    483: @end display
                    484: 
                    485: 
                    486: @item DECL_FIELD_CONTEXT
                    487: Identifys the context that the FIELD_DECL was found in.  Internally the
                    488: same as DECL_CONTEXT, so don't us both.  See also DECL_CONTEXT,
                    489: DECL_FCONTEXT and DECL_CLASS_CONTEXT.
                    490: 
                    491: Has values of:
                    492: 
                    493:        RECORD_TYPEs
                    494: 
                    495: What things can this be used on:
                    496: 
                    497: @display
                    498: FIELD_DECLs that are virtual function pointers
                    499: FIELD_DECLs
                    500: @end display
                    501: 
                    502: 
                    503: @item DECL_NESTED_TYPENAME
                    504: Holds the fully qualified type name.  Example, Base::Derived.
                    505: 
                    506: Has values of:
                    507: 
                    508:        IDENTIFIER_NODEs
                    509: 
                    510: What things can this be used on:
                    511: 
                    512:        TYPE_DECLs
                    513: 
                    514: 
                    515: @item DECL_NAME
                    516: 
                    517: Has values of:
                    518: 
                    519: @display
                    520: 0 for things that don't have names
                    521: IDENTIFIER_NODEs for TYPE_DECLs
                    522: @end display
                    523: 
                    524: @item DECL_IGNORED_P
                    525: A bit that can be set to inform the debug information output routines in
                    526: the backend that a certain _DECL node should be totally ignored.
                    527: 
                    528: Used in cases where it is known that the debugging information will be
                    529: output in another file, or where a sub-type is known not to be needed
                    530: because the enclosing type is not needed.
                    531: 
                    532: A compiler constructed virtual destructor in derived classes that do not
                    533: define an exlicit destructor that was defined exlicit in a base class
                    534: has this bit set as well.  Also used on __FUNCTION__ and
                    535: __PRETTY_FUNCTION__ to mark they are ``compiler generated.''  c-decl and
                    536: c-lex.c both want DECL_IGNORED_P set for ``internally generated vars,''
                    537: and ``user-invisible variable.''
                    538: 
                    539: Functions built by the C++ front-end such as default destructors,
                    540: virtual desctructors and default constructors want to be marked that
                    541: they are compiler generated, but unsure why.
                    542: 
                    543: Currently, it is used in an absolute way in the C++ front-end, as an
                    544: optimization, to tell the debug information output routines to not
                    545: generate debugging information that will be output by another separately
                    546: compiled file.
                    547: 
                    548: 
                    549: @item DECL_VIRTUAL_P
                    550: A flag used on FIELD_DECLs and VAR_DECLs.  (Documentation in tree.h is
                    551: wrong.)  Used in VAR_DECLs to indicate that the variable is a vtable.
                    552: It is also used in FIELD_DECLs for vtable pointers.
                    553: 
                    554: What things can this be used on:
                    555: 
                    556:        FIELD_DECLs and VAR_DECLs
                    557: 
                    558: 
                    559: @item DECL_VPARENT
                    560: Used to point to the parent type of the vtable if there is one, else it
                    561: is just the type associated with the vtable.  Because of the sharing of
                    562: virtual function tables that goes on, this slot is not very useful, and
                    563: is in fact, not used in the compiler at all.  It can be removed.
                    564: 
                    565: What things can this be used on:
                    566: 
                    567:        VAR_DECLs that are virtual function tables
                    568: 
                    569: Has values of:
                    570: 
                    571:        RECORD_TYPEs maybe UNION_TYPEs
                    572: 
                    573: 
                    574: @item DECL_FCONTEXT
                    575: Used to find the first baseclass in which this FIELD_DECL is defined.
                    576: See also DECL_CONTEXT, DECL_FIELD_CONTEXT and DECL_CLASS_CONTEXT.
                    577: 
                    578: How it is used:
                    579: 
                    580:        Used when writing out debugging information about vfield and
                    581:        vbase decls.
                    582: 
                    583: What things can this be used on:
                    584: 
                    585:        FIELD_DECLs that are virtual function pointers
                    586:        FIELD_DECLs
                    587: 
                    588: 
                    589: @item DECL_REFERENCE_SLOT
                    590: Used to hold the initialize for the reference.
                    591: 
                    592: What things can this be used on:
                    593: 
                    594:        PARM_DECLs and VAR_DECLs that have a reference type
                    595: 
                    596: 
                    597: @item DECL_VINDEX
                    598: Used for FUNCTION_DECLs in two different ways.  Before the structure
                    599: containing the FUNCTION_DECL is laid out, DECL_VINDEX may point to a
                    600: FUNCTION_DECL in a base class which is the FUNCTION_DECL which this
                    601: FUNCTION_DECL will replace as a virtual function.  When the class is
                    602: laid out, this pointer is changed to an INTEGER_CST node which is
                    603: suitable to find an index into the virtual function table.  See
                    604: get_vtable_entry as to how one can find the right index into the virtual
                    605: function table.  The first index 0, of a virtual function table it not
                    606: used in the normal way, so the first real index is 1.
                    607: 
                    608: DECL_VINDEX may be a TREE_LIST, that would seem to be a list of
                    609: overridden FUNCTION_DECLs.  add_virtual_function has code to deal with
                    610: this when it uses the variable base_fndecl_list, but it would seem that
                    611: somehow, it is possible for the TREE_LIST to pursist until method_call,
                    612: and it should not.
                    613: 
                    614: 
                    615: What things can this be used on:
                    616: 
                    617:        FUNCTION_DECLs
                    618: 
                    619: 
                    620: @item DECL_SOURCE_FILE
                    621: Identifies what source file a particular declaration was found in.
                    622: 
                    623: Has values of:
                    624: 
                    625:        "<built-in>" on TYPE_DECLs to mean the typedef is built in
                    626: 
                    627: 
                    628: @item DECL_SOURCE_LINE
                    629: Identifies what source line number in the source file the declaration
                    630: was found at.
                    631: 
                    632: Has values of:
                    633: 
                    634: @display
                    635: 0 for an undefined label
                    636: 
                    637: 0 for TYPE_DECLs that are internally generated
                    638: 
                    639: 0 for FUNCTION_DECLs for functions generated by the compiler
                    640:        (not yet, but should be)
                    641: 
                    642: 0 for ``magic'' arguments to functions, that the user has no
                    643:        control over
                    644: @end display
                    645: 
                    646: 
                    647: @item TREE_USED
                    648: 
                    649: Has values of:
                    650: 
                    651:        0 for unused labels
                    652: 
                    653: 
                    654: @item TREE_ADDRESSABLE
                    655: A flag that is set for any type that has a constructor.
                    656: 
                    657: 
                    658: @item TREE_COMPLEXITY
                    659: They seem a kludge way to track recursion, poping, and pushing.  They only
                    660: appear in cp-decl.c and cp-decl2.c, so the are a good candidate for
                    661: proper fixing, and removal.
                    662: 
                    663: 
                    664: @item TREE_PRIVATE
                    665: Set for FIELD_DECLs by finish_struct.  But not uniformly set.
                    666: 
                    667: The following routines do something with PRIVATE visibility:
                    668: build_method_call, alter_visibility, finish_struct_methods,
                    669: finish_struct, convert_to_aggr, CWriteLanguageDecl, CWriteLanguageType,
                    670: CWriteUseObject, compute_visibility, lookup_field, dfs_pushdecl,
                    671: GNU_xref_member, dbxout_type_fields, dbxout_type_method_1
                    672: 
                    673: 
                    674: @item TREE_PROTECTED
                    675: The following routines do something with PROTECTED visibility:
                    676: build_method_call, alter_visibility, finish_struct, convert_to_aggr,
                    677: CWriteLanguageDecl, CWriteLanguageType, CWriteUseObject,
                    678: compute_visibility, lookup_field, GNU_xref_member, dbxout_type_fields,
                    679: dbxout_type_method_1
                    680: 
                    681: 
                    682: @item TYPE_BINFO
                    683: Used to get the binfo for the type.
                    684: 
                    685: Has values of:
                    686: 
                    687:        TREE_VECs that are binfos
                    688: 
                    689: What things can this be used on:
                    690: 
                    691:        RECORD_TYPEs
                    692: 
                    693: 
                    694: @item TYPE_BINFO_BASETYPES
                    695: See also BINFO_BASETYPES.
                    696: 
                    697: @item TYPE_BINFO_VIRTUALS
                    698: A unique list of functions for the virtual function table.  See also
                    699: BINFO_VIRTUALS.
                    700: 
                    701: What things can this be used on:
                    702: 
                    703:        RECORD_TYPEs
                    704: 
                    705: 
                    706: @item TYPE_BINFO_VTABLE
                    707: Points to the virtual function table associated with the given type.
                    708: See also BINFO_VTABLE.
                    709: 
                    710: What things can this be used on:
                    711: 
                    712:        RECORD_TYPEs
                    713: 
                    714: Has values of:
                    715: 
                    716:        VAR_DECLs that are virtual function tables
                    717: 
                    718: 
                    719: @item TYPE_NAME
                    720: Names the type.
                    721: 
                    722: Has values of:
                    723: 
                    724: @display
                    725: 0 for things that don't have names.
                    726: should be IDENTIFIER_NODE for RECORD_TYPEs UNION_TYPEs and 
                    727:         ENUM_TYPEs.
                    728: TYPE_DECL for RECORD_TYPEs, UNION_TYPEs and ENUM_TYPEs, but 
                    729:         shouldn't be.
                    730: TYPE_DECL for typedefs, unsure why.
                    731: @end display
                    732: 
                    733: What things can one use this on:
                    734: 
                    735: @display
                    736: TYPE_DECLs
                    737: RECORD_TYPEs
                    738: UNION_TYPEs
                    739: ENUM_TYPEs
                    740: @end display
                    741: 
                    742: History:
                    743: 
                    744:        It currently points to the TYPE_DECL for RECORD_TYPEs,
                    745:        UNION_TYPEs and ENUM_TYPEs, but it should be history soon.
                    746: 
                    747: 
                    748: @item TYPE_METHODS
                    749: Synonym for @code{CLASSTYPE_METHOD_VEC}.  Chained together with
                    750: @code{TREE_CHAIN}.  @file{dbxout.c} uses this to get at the methods of a
                    751: class.
                    752: 
                    753: 
                    754: @item TYPE_DECL
                    755: Used to represent typedefs, and used to represent bindings layers.
                    756: 
                    757: Components:
                    758: 
                    759:        DECL_NAME is the name of the typedef.  For example, foo would
                    760:        be found in the DECL_NAME slot when @code{typedef int foo;} is
                    761:        seen.
                    762: 
                    763:        DECL_SOURCE_LINE identifies what source line number in the
                    764:        source file the declaration was found at.  A value of 0
                    765:        indicates that this TYPE_DECL is just an internal binding layer
                    766:        marker, and does not correspond to a user suppiled typedef.
                    767: 
                    768:        DECL_SOURCE_FILE
                    769: 
                    770: @item TYPE_FIELDS
                    771: A linked list (via @code{TREE_CHAIN}) of member types of a class.  The
                    772: list can contain @code{TYPE_DECL}s, but there can also be other things
                    773: in the list apparently.  See also @code{CLASSTYPE_TAGS}.
                    774: 
                    775: 
                    776: @item TYPE_VIRTUAL_P
                    777: A flag used on a @code{FIELD_DECL} or a @code{VAR_DECL}, indicates it is
                    778: a virtual function table or a pointer to one.  When used on a
                    779: @code{FUNCTION_DECL}, indicates that it is a virtual function.  When
                    780: used on an @code{IDENTIFIER_NODE}, indicates that a function with this
                    781: same name exists and has been declared virtual.
                    782: 
                    783: When used on types, it indicates that the type has virtual functions, or
                    784: is derived from one that does.
                    785: 
                    786: Not sure if the above about virtual function tables is still true.  See
                    787: also info on @code{DECL_VIRTUAL_P}.
                    788: 
                    789: What things can this be used on:
                    790: 
                    791:        FIELD_DECLs, VAR_DECLs, FUNCTION_DECLs, IDENTIFIER_NODEs
                    792: 
                    793: 
                    794: @item VF_BASETYPE_VALUE
                    795: Get the associated type from the binfo that caused the given vfield to
                    796: exist.  This is the least derived class (the most parent class) that
                    797: needed a virtual function table.  It is probably the case that all uses
                    798: of this field are misguided, but they need to be examined on a
                    799: case-by-case basis.  See history for more information on why the
                    800: previous statement was made.
                    801: 
                    802: What things can this be used on:
                    803: 
                    804:        TREE_LISTs that are vfields
                    805: 
                    806: History:
                    807: 
                    808:        This field was used to determine if a virtual function table's
                    809:        slot should be filled in with a certain virtual function, by
                    810:        checking to see if the type returned by VF_BASETYPE_VALUE was a
                    811:        parent of the context in which the old virtual function existed.
                    812:        This incorrectly assumes that a given type _could_ not appear as
                    813:        a parent twice in a given inheritance lattice.  For single
                    814:        inheritance, this would in fact work, because a type could not
                    815:        possibly appear more than once in an inheritance lattice, but
                    816:        with multiple inheritance, a type can appear more than once.
                    817: 
                    818: 
                    819: @item VF_BINFO_VALUE
                    820: Identifies the binfo that caused this vfield to exist.  Can use
                    821: @code{TREE_VIA_VIRTUAL} on result to find out if it is a virtual base
                    822: class.  Related to the binfo found by
                    823: 
                    824: @example
                    825: get_binfo (VF_BASETYPE_VALUE (vfield), t, 0)
                    826: @end example
                    827: 
                    828: @noindent
                    829: where @samp{t} is the type that has the given vfield.
                    830: 
                    831: @example
                    832: get_binfo (VF_BASETYPE_VALUE (vfield), t, 0)
                    833: @end example
                    834: 
                    835: @noindent
                    836: will return the binfo for the the given vfield.
                    837: 
                    838: May or may not be set at @code{modify_vtable_entries} time.  Set at
                    839: @code{finish_base_struct} time.
                    840: 
                    841: What things can this be used on:
                    842: 
                    843:        TREE_LISTs that are vfields
                    844: 
                    845: 
                    846: @item VF_DERIVED_VALUE
                    847: Identifies the type of the most derived class of the vfield, excluding
                    848: the the class this vfield is for.
                    849: 
                    850: What things can this be used on:
                    851: 
                    852:        TREE_LISTs that are vfields
                    853: 
                    854: 
                    855: @item VF_NORMAL_VALUE
                    856: Identifies the type of the most derived class of the vfield, including
                    857: the class this vfield is for.
                    858: 
                    859: What things can this be used on:
                    860: 
                    861:        TREE_LISTs that are vfields
                    862: 
                    863: 
                    864: @item WRITABLE_VTABLES
                    865: This is a option that can be defined when building the compiler, that
                    866: will cause the compiler to output vtables into the data segment so that
                    867: the vtables maybe written.  This is undefined by default, because
                    868: normally the vtables should be unwritable.  People that implement object
                    869: I/O facilities may, or people that want to change the dynamic type of
                    870: objects may want to have the vtables writable.  Another way of achieving
                    871: this would be to make a copy of the vtable into writable memory, but the
                    872: drawback there is that that method only changes the type for one object.
                    873: 
                    874: @end table
                    875: 
                    876: @node Typical Behavior, Coding Conventions, Macros, Top
                    877: @section Typical Behavior
                    878: 
                    879: @cindex parse errors
                    880: 
                    881: Whenever seemingly normal code fails with errors like
                    882: @code{syntax error at `\@{'}, it's highly likely that grokdeclarator is
                    883: returning a NULL_TREE for whatever reason.
                    884: 
                    885: @node Coding Conventions, Error Reporting, Typical Behavior, Top
                    886: @section Coding Conventions
                    887: 
                    888: It should never be that case that trees are modified in-place by the
                    889: back-end, @emph{unless} it is guaranteed that the semantics are the same
                    890: no matter how shared the tree structure is.  @file{fold-const.c} still
                    891: has some cases where this is not true, but rms hypothesizes that this
                    892: will never be a problem.
                    893: 
                    894: @node Error Reporting, Concept Index, Coding Conventions, Top
                    895: @section Error Reporting
                    896: 
                    897: The C++ frontend uses a call-back mechanism to allow functions to print
                    898: out reasonable strings for types and functions without putting extra
                    899: logic in the functions where errors are found.  The interface is through
                    900: the @code{lang_error} function (or @code{lang_warning}, etc.).  The
                    901: syntax is exactly like that of @code{error}, except that a few more
                    902: conversions are supported:
                    903: 
                    904: @itemize @bullet
                    905: @item
                    906: %D indicates a *_DECL node
                    907: @item
                    908: %T indicates a *_TYPE node
                    909: @item
                    910: %E indicates a *_EXPR node (currently only used for default parameters
                    911: in FUNCTION_DECLs)
                    912: @end itemize
                    913: 
                    914: For a more verbose message (@code{class foo} as opposed to just @code{foo},
                    915: including the return type for functions), use %#c.
                    916: To have the line number on the error message indicate the line of the
                    917: DECL, use @code{lang_error_at} and its ilk.
                    918: 
                    919: @node Concept Index,  , Error Reporting, Top
                    920: @section Concept Index
                    921: 
                    922: @printindex cp
                    923: 
                    924: @bye

unix.superglobalmegacorp.com

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