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