OSDN Git Service

2010-05-28 Tobias Burnus <burnus@net-b.de>
[pf3gnuchains/gcc-fork.git] / gcc / fortran / gfc-internals.texi
1 \input texinfo  @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename gfc-internals.info
4 @set copyrights-gfortran 2007-2010
5
6 @include gcc-common.texi
7
8 @synindex tp cp
9
10 @settitle GNU Fortran Compiler Internals
11
12 @c %**end of header
13
14 @c Use with @@smallbook.
15
16 @c %** start of document
17
18 @c Cause even numbered pages to be printed on the left hand side of
19 @c the page and odd numbered pages to be printed on the right hand
20 @c side of the page.  Using this, you can print on both sides of a
21 @c sheet of paper and have the text on the same part of the sheet.
22
23 @c The text on right hand pages is pushed towards the right hand
24 @c margin and the text on left hand pages is pushed toward the left
25 @c hand margin.
26 @c (To provide the reverse effect, set bindingoffset to -0.75in.)
27
28 @c @tex
29 @c \global\bindingoffset=0.75in
30 @c \global\normaloffset =0.75in
31 @c @end tex
32
33 @copying
34 Copyright @copyright{} @value{copyrights-gfortran} Free Software Foundation,
35 Inc.
36
37 Permission is granted to copy, distribute and/or modify this document
38 under the terms of the GNU Free Documentation License, Version 1.2 or
39 any later version published by the Free Software Foundation; with the
40 Invariant Sections being ``Funding Free Software'', the Front-Cover
41 Texts being (a) (see below), and with the Back-Cover Texts being (b)
42 (see below).  A copy of the license is included in the section entitled
43 ``GNU Free Documentation License''.
44
45 (a) The FSF's Front-Cover Text is:
46
47      A GNU Manual
48
49 (b) The FSF's Back-Cover Text is:
50
51      You have freedom to copy and modify this GNU Manual, like GNU
52      software.  Copies published by the Free Software Foundation raise
53      funds for GNU development.
54 @end copying
55
56 @ifinfo
57 @dircategory Software development
58 @direntry
59 * gfortran: (gfortran).                  The GNU Fortran Compiler.
60 @end direntry
61 This file documents the internals of the GNU Fortran
62 compiler, (@command{gfortran}).
63
64 Published by the Free Software Foundation
65 51 Franklin Street, Fifth Floor
66 Boston, MA 02110-1301 USA
67
68 @insertcopying
69 @end ifinfo
70
71
72 @setchapternewpage odd
73 @titlepage
74 @title GNU Fortran Internals
75 @versionsubtitle
76 @author The @t{gfortran} team
77 @page
78 @vskip 0pt plus 1filll
79 Published by the Free Software Foundation@*
80 51 Franklin Street, Fifth Floor@*
81 Boston, MA 02110-1301, USA@*
82 @c Last printed ??ber, 19??.@*
83 @c Printed copies are available for $? each.@*
84 @c ISBN ???
85 @sp 1
86 @insertcopying
87 @end titlepage
88
89 @summarycontents
90 @contents
91
92 @page
93
94 @c ---------------------------------------------------------------------
95 @c TexInfo table of contents.
96 @c ---------------------------------------------------------------------
97
98 @ifnottex
99 @node Top
100 @top Introduction
101 @cindex Introduction
102
103 This manual documents the internals of @command{gfortran}, 
104 the GNU Fortran compiler.
105
106 @ifset DEVELOPMENT
107 @emph{Warning:} This document, and the compiler it describes, are still
108 under development.  While efforts are made to keep it up-to-date, it might
109 not accurately reflect the status of the most recent GNU Fortran compiler.
110 @end ifset
111
112 @comment
113 @comment  When you add a new menu item, please keep the right hand
114 @comment  aligned to the same column.  Do not use tabs.  This provides
115 @comment  better formatting.
116 @comment
117 @menu
118 * Introduction::           About this manual.
119 * User Interface::         Code that Interacts with the User.
120 * Frontend Data Structures::
121                            Data structures used by the frontend
122 * Object Orientation::     Internals of Fortran 2003 OOP features.
123 * LibGFortran::            The LibGFortran Runtime Library.
124 * GNU Free Documentation License::
125                            How you can copy and share this manual.
126 * Index::                  Index of this documentation.
127 @end menu
128 @end ifnottex
129
130 @c ---------------------------------------------------------------------
131 @c Introduction
132 @c ---------------------------------------------------------------------
133
134 @node Introduction
135 @chapter Introduction
136
137 @c The following duplicates the text on the TexInfo table of contents.
138 @iftex
139 This manual documents the internals of @command{gfortran}, the GNU Fortran
140 compiler.
141
142 @ifset DEVELOPMENT
143 @emph{Warning:} This document, and the compiler it describes, are still
144 under development.  While efforts are made to keep it up-to-date, it
145 might not accurately reflect the status of the most recent GNU Fortran
146 compiler.
147 @end ifset
148 @end iftex
149
150 At present, this manual is very much a work in progress, containing 
151 miscellaneous notes about the internals of the compiler.  It is hoped
152 that at some point in the future it will become a reasonably complete
153 guide; in the interim, GNU Fortran developers are strongly encouraged to
154 contribute to it as a way of keeping notes while working on the 
155 compiler.
156
157
158 @c ---------------------------------------------------------------------
159 @c Code that Interacts with the User
160 @c ---------------------------------------------------------------------
161
162 @node User Interface
163 @chapter Code that Interacts with the User
164
165 @menu
166 * Command-Line Options::    Command-Line Options.
167 * Error Handling::          Error Handling.
168 @end menu
169
170
171 @c ---------------------------------------------------------------------
172 @c Command-Line Options
173 @c ---------------------------------------------------------------------
174
175 @node Command-Line Options
176 @section Command-Line Options
177
178 Command-line options for @command{gfortran} involve four interrelated
179 pieces within the Fortran compiler code.
180
181 The relevant command-line flag is defined in @file{lang.opt}, according
182 to the documentation in @ref{Options,, Options, gccint, GNU Compiler
183 Collection Internals}.  This is then processed by the overall GCC
184 machinery to create the code that enables @command{gfortran} and
185 @command{gcc} to recognize the option in the command-line arguments and
186 call the relevant handler function.
187
188 This generated code calls the @code{gfc_handle_option} code in
189 @file{options.c} with an enumerator variable indicating which option is
190 to be processed, and the relevant integer or string values associated
191 with that option flag.  Typically, @code{gfc_handle_option} uses these
192 arguments to set global flags which record the option states.
193
194 The global flags that record the option states are stored in the
195 @code{gfc_option_t} struct, which is defined in @file{gfortran.h}.
196 Before the options are processed, initial values for these flags are set
197 in @code{gfc_init_option} in @file{options.c}; these become the default
198 values for the options.
199
200
201
202 @c ---------------------------------------------------------------------
203 @c Error Handling
204 @c ---------------------------------------------------------------------
205
206 @node Error Handling
207 @section Error Handling
208
209 The GNU Fortran compiler's parser operates by testing each piece of
210 source code against a variety of matchers.  In some cases, if these
211 matchers do not match the source code, they will store an error message
212 in a buffer.  If the parser later finds a matcher that does correctly
213 match the source code, then the buffered error is discarded.  However,
214 if the parser cannot find a match, then the buffered error message is
215 reported to the user.  This enables the compiler to provide more
216 meaningful error messages even in the many cases where (erroneous)
217 Fortran syntax is ambiguous due to things like the absence of reserved
218 keywords.
219
220 As an example of how this works, consider the following line:
221 @smallexample
222 IF = 3
223 @end smallexample
224 Hypothetically, this may get passed to the matcher for an @code{IF}
225 statement.  Since this could plausibly be an erroneous @code{IF}
226 statement, the matcher will buffer an error message reporting the
227 absence of an expected @samp{(} following an @code{IF}.  Since no
228 matchers reported an error-free match, however, the parser will also try
229 matching this against a variable assignment.  When @code{IF} is a valid
230 variable, this will be parsed as an assignment statement, and the error
231 discarded.  However, when @code{IF} is not a valid variable, this
232 buffered error message will be reported to the user.
233
234 The error handling code is implemented in @file{error.c}.  Errors are
235 normally entered into the buffer with the @code{gfc_error} function.
236 Warnings go through a similar buffering process, and are entered into
237 the buffer with @code{gfc_warning}.  There is also a special-purpose
238 function, @code{gfc_notify_std}, for things which have an error/warning
239 status that depends on the currently-selected language standard.
240
241 The @code{gfc_error_check} function checks the buffer for errors,
242 reports the error message to the user if one exists, clears the buffer,
243 and returns a flag to the user indicating whether or not an error
244 existed.  To check the state of the buffer without changing its state or
245 reporting the errors, the @code{gfc_error_flag_test} function can be
246 used.  The @code{gfc_clear_error} function will clear out any errors in
247 the buffer, without reporting them.  The @code{gfc_warning_check} and
248 @code{gfc_clear_warning} functions provide equivalent functionality for
249 the warning buffer.
250
251 Only one error and one warning can be in the buffers at a time, and
252 buffering another will overwrite the existing one.  In cases where one
253 may wish to work on a smaller piece of source code without disturbing an
254 existing error state, the @code{gfc_push_error}, @code{gfc_pop_error},
255 and @code{gfc_free_error} mechanism exists to implement a stack for the
256 error buffer.
257
258 For cases where an error or warning should be reported immediately
259 rather than buffered, the @code{gfc_error_now} and
260 @code{gfc_warning_now} functions can be used.  Normally, the compiler
261 will continue attempting to parse the program after an error has
262 occurred, but if this is not appropriate, the @code{gfc_fatal_error}
263 function should be used instead.  For errors that are always the result
264 of a bug somewhere in the compiler, the @code{gfc_internal_error}
265 function should be used.
266
267 The syntax for the strings used to produce the error/warning message in
268 the various error and warning functions is similar to the @code{printf}
269 syntax, with @samp{%}-escapes to insert variable values.  The details,
270 and the allowable codes, are documented in the @code{error_print}
271 function in @file{error.c}.
272
273 @c ---------------------------------------------------------------------
274 @c Frontend Data Structures
275 @c ---------------------------------------------------------------------
276
277 @node Frontend Data Structures
278 @chapter Frontend Data Structures
279 @cindex data structures
280
281 This chapter should describe the details necessary to understand how
282 the various @code{gfc_*} data are used and interact.  In general it is
283 advisable to read the code in @file{dump-parse-tree.c} as its routines
284 should exhaust all possible valid combinations of content for these
285 structures.
286
287 @menu
288 * gfc_code:: Representation of Executable Statements.
289 * gfc_expr:: Representation of Values and Expressions.
290 @end menu
291
292
293 @c gfc_code
294 @c --------
295
296 @node gfc_code
297 @section @code{gfc_code}
298 @cindex statement chaining
299 @tindex @code{gfc_code}
300 @tindex @code{struct gfc_code}
301
302 The executable statements in a program unit are represented by a
303 nested chain of @code{gfc_code} structures.  The type of statement is
304 identified by the @code{op} member of the structure, the different
305 possible values are enumerated in @code{gfc_exec_op}.  A special
306 member of this @code{enum} is @code{EXEC_NOP} which is used to
307 represent the various @code{END} statements if they carry a label.
308 Depending on the type of statement some of the other fields will be
309 filled in.  Fields that are generally applicable are the @code{next}
310 and @code{here} fields.  The former points to the next statement in
311 the current block or is @code{NULL} if the current statement is the
312 last in a block, @code{here} points to the statement label of the
313 current statement.
314
315 If the current statement is one of @code{IF}, @code{DO}, @code{SELECT}
316 it starts a block, i.e.@: a nested level in the program.  In order to
317 represent this, the @code{block} member is set to point to a
318 @code{gfc_code} structure whose @code{next} member starts the chain of
319 statements inside the block; this structure's @code{op} member should be set to
320 the same value as the parent structure's @code{op} member.  The @code{SELECT}
321 and @code{IF} statements may contain various blocks (the chain of @code{ELSE IF}
322 and @code{ELSE} blocks or the various @code{CASE}s, respectively).  These chains
323 are linked-lists formed by the @code{block} members.
324
325 Consider the following example code:
326
327 @example
328 IF (foo < 20) THEN
329   PRINT *, "Too small"
330   foo = 20
331 ELSEIF (foo > 50) THEN
332   PRINT *, "Too large"
333   foo = 50
334 ELSE
335   PRINT *, "Good"
336 END IF
337 @end example
338
339 This statement-block will be represented in the internal gfortran tree as
340 follows, were the horizontal link-chains are those induced by the @code{next}
341 members and vertical links down are those of @code{block}. @samp{==|} and
342 @samp{--|} mean @code{NULL} pointers to mark the end of a chain:
343
344 @example
345 ... ==> IF ==> ...
346         |
347         +--> IF foo < 20 ==> PRINT *, "Too small" ==> foo = 20 ==|
348              |
349              +--> IF foo > 50 ==> PRINT *, "Too large" ==> foo = 50 ==|
350                   |
351                   +--> ELSE ==> PRINT *, "Good" ==|
352                        |
353                        +--|
354 @end example
355
356
357 @subsection IF Blocks
358
359 Conditionals are represented by @code{gfc_code} structures with their
360 @code{op} member set to @code{EXEC_IF}.  This structure's @code{block}
361 member must point to another @code{gfc_code} node that is the header of the
362 if-block.  This header's @code{op} member must be set to @code{EXEC_IF}, too,
363 its @code{expr} member holds the condition to check for, and its @code{next}
364 should point to the code-chain of the statements to execute if the condition is
365 true.
366
367 If in addition an @code{ELSEIF} or @code{ELSE} block is present, the
368 @code{block} member of the if-block-header node points to yet another
369 @code{gfc_code} structure that is the header of the elseif- or else-block.  Its
370 structure is identical to that of the if-block-header, except that in case of an
371 @code{ELSE} block without a new condition the @code{expr} member should be
372 @code{NULL}.  This block can itself have its @code{block} member point to the
373 next @code{ELSEIF} or @code{ELSE} block if there's a chain of them.
374
375
376 @subsection Loops
377
378 @code{DO} loops are stored in the tree as @code{gfc_code} nodes with their
379 @code{op} set to @code{EXEC_DO} for a @code{DO} loop with iterator variable and
380 to @code{EXEC_DO_WHILE} for infinite @code{DO}s and @code{DO WHILE} blocks.
381 Their @code{block} member should point to a @code{gfc_code} structure heading
382 the code-chain of the loop body; its @code{op} member should be set to
383 @code{EXEC_DO} or @code{EXEC_DO_WHILE}, too, respectively.
384
385 For @code{DO WHILE} loops, the loop condition is stored on the top
386 @code{gfc_code} structure's @code{expr} member; @code{DO} forever loops are
387 simply @code{DO WHILE} loops with a constant @code{.TRUE.} loop condition in
388 the internal representation.
389
390 Similarly, @code{DO} loops with an iterator have instead of the condition their
391 @code{ext.iterator} member set to the correct values for the loop iterator
392 variable and its range.
393
394
395 @subsection @code{SELECT} Statements
396
397 A @code{SELECT} block is introduced by a @code{gfc_code} structure with an
398 @code{op} member of @code{EXEC_SELECT} and @code{expr} containing the expression
399 to evaluate and test.  Its @code{block} member starts a list of @code{gfc_code}
400 structures linked together by their @code{block} members that stores the various
401 @code{CASE} parts.
402
403 Each @code{CASE} node has its @code{op} member set to @code{EXEC_SELECT}, too,
404 its @code{next} member points to the code-chain to be executed in the current
405 case-block, and @code{extx.case_list} contains the case-values this block
406 corresponds to.  The @code{block} member links to the next case in the list.
407
408
409 @c gfc_expr
410 @c --------
411
412 @node gfc_expr
413 @section @code{gfc_expr}
414 @tindex @code{gfc_expr}
415 @tindex @code{struct gfc_expr}
416
417 Expressions and ``values'', including constants, variable-, array- and
418 component-references as well as complex expressions consisting of operators and
419 function calls are internally represented as one or a whole tree of
420 @code{gfc_expr} objects.  The member @code{expr_type} specifies the overall
421 type of an expression (for instance, @code{EXPR_CONSTANT} for constants or
422 @code{EXPR_VARIABLE} for variable references).  The members @code{ts} and
423 @code{rank} as well as @code{shape}, which can be @code{NULL}, specify
424 the type, rank and, if applicable, shape of the whole expression or expression
425 tree of which the current structure is the root.  @code{where} is the locus of
426 this expression in the source code.
427
428 Depending on the flavor of the expression being described by the object
429 (that is, the value of its @code{expr_type} member), the corresponding structure
430 in the @code{value} union will usually contain additional data describing the
431 expression's value in a type-specific manner.  The @code{ref} member is used to
432 build chains of (array-, component- and substring-) references if the expression
433 in question contains such references, see below for details.
434
435
436 @subsection Constants
437
438 Scalar constants are represented by @code{gfc_expr} nodes with their
439 @code{expr_type} set to @code{EXPR_CONSTANT}.  The constant's value shall
440 already be known at compile-time and is stored in the @code{logical},
441 @code{integer}, @code{real}, @code{complex} or @code{character} struct inside
442 @code{value}, depending on the constant's type specification.
443
444
445 @subsection Operators
446
447 Operator-expressions are expressions that are the result of the execution of
448 some operator on one or two operands.  The expressions have an @code{expr_type}
449 of @code{EXPR_OP}.  Their @code{value.op} structure contains additional data.
450
451 @code{op1} and optionally @code{op2} if the operator is binary point to the
452 two operands, and @code{operator} or @code{uop} describe the operator that
453 should be evaluated on these operands, where @code{uop} describes a user-defined
454 operator.
455
456
457 @subsection Function Calls
458
459 If the expression is the return value of a function-call, its @code{expr_type}
460 is set to @code{EXPR_FUNCTION}, and @code{symtree} must point to the symtree
461 identifying the function to be called.  @code{value.function.actual} holds the
462 actual arguments given to the function as a linked list of
463 @code{gfc_actual_arglist} nodes.
464
465 The other members of @code{value.function} describe the function being called
466 in more detail, containing a link to the intrinsic symbol or user-defined
467 function symbol if the call is to an intrinsic or external function,
468 respectively.  These values are determined during resolution-phase from the
469 structure's @code{symtree} member.
470
471 A special case of function calls are ``component calls'' to type-bound
472 procedures; those have the @code{expr_type} @code{EXPR_COMPCALL} with
473 @code{value.compcall} containing the argument list and the procedure called,
474 while @code{symtree} and @code{ref} describe the object on which the procedure
475 was called in the same way as a @code{EXPR_VARIABLE} expression would.
476 @xref{Type-bound Procedures}.
477
478
479 @subsection Array- and Structure-Constructors
480
481 Array- and structure-constructors (one could probably call them ``array-'' and
482 ``derived-type constants'') are @code{gfc_expr} structures with their
483 @code{expr_type} member set to @code{EXPR_ARRAY} or @code{EXPR_STRUCTURE},
484 respectively.  For structure constructors, @code{symtree} points to the
485 derived-type symbol for the type being constructed.
486
487 The values for initializing each array element or structure component are
488 stored as linked-list of @code{gfc_constructor} nodes in the
489 @code{value.constructor} member.
490
491
492 @subsection Null
493
494 @code{NULL} is a special value for pointers; it can be of different base types.
495 Such a @code{NULL} value is represented in the internal tree by a
496 @code{gfc_expr} node with @code{expr_type} @code{EXPR_NULL}.  If the base type
497 of the @code{NULL} expression is known, it is stored in @code{ts} (that's for
498 instance the case for default-initializers of @code{ALLOCATABLE} components),
499 but this member can also be set to @code{BT_UNKNOWN} if the information is not
500 available (for instance, when the expression is a pointer-initializer
501 @code{NULL()}).
502
503
504 @subsection Variables and Reference Expressions
505
506 Variable references are @code{gfc_expr} structures with their @code{expr_type}
507 set to @code{EXPR_VARIABLE}; their @code{symtree} should point to the variable
508 that is referenced.
509
510 For this type of expression, it's also possible to chain array-, component-
511 or substring-references to the original expression to get something like
512 @samp{struct%component(2:5)}, where @code{component} is either an array or
513 a @code{CHARACTER} member of @code{struct} that is of some derived-type.  Such a
514 chain of references is achieved by a linked list headed by @code{ref} of the
515 @code{gfc_expr} node.  For the example above it would be (@samp{==|} is the
516 last @code{NULL} pointer):
517
518 @smallexample
519 EXPR_VARIABLE(struct) ==> REF_COMPONENT(component) ==> REF_ARRAY(2:5) ==|
520 @end smallexample
521
522 If @code{component} is a string rather than an array, the last element would be
523 a @code{REF_SUBSTRING} reference, of course.  If the variable itself or some
524 component referenced is an array and the expression should reference the whole
525 array rather than being followed by an array-element or -section reference, a
526 @code{REF_ARRAY} reference must be built as the last element in the chain with
527 an array-reference type of @code{AR_FULL}. Consider this example code:
528
529 @smallexample
530 TYPE :: mytype
531   INTEGER :: array(42)
532 END TYPE mytype
533
534 TYPE(mytype) :: variable
535 INTEGER :: local_array(5)
536
537 CALL do_something (variable%array, local_array)
538 @end smallexample
539
540 The @code{gfc_expr} nodes representing the arguments to the @samp{do_something}
541 call will have a reference-chain like this:
542
543 @smallexample
544 EXPR_VARIABLE(variable) ==> REF_COMPONENT(array) ==> REF_ARRAY(FULL) ==|
545 EXPR_VARIABLE(local_array) ==> REF_ARRAY(FULL) ==|
546 @end smallexample
547
548
549 @subsection Constant Substring References
550
551 @code{EXPR_SUBSTRING} is a special type of expression that encodes a substring
552 reference of a constant string, as in the following code snippet:
553
554 @smallexample
555 x = "abcde"(1:2)
556 @end smallexample
557
558 In this case, @code{value.character} contains the full string's data as if it
559 was a string constant, but the @code{ref} member is also set and points to a
560 substring reference as described in the subsection above.
561
562
563 @c ---------------------------------------------------------------------
564 @c F2003 OOP
565 @c ---------------------------------------------------------------------
566
567 @node Object Orientation
568 @chapter Internals of Fortran 2003 OOP Features
569
570 @menu
571 * Type-bound Procedures:: Type-bound procedures.
572 * Type-bound Operators::  Type-bound operators.
573 @end menu
574
575
576 @c Type-bound procedures
577 @c ---------------------
578
579 @node Type-bound Procedures
580 @section Type-bound Procedures
581
582 Type-bound procedures are stored in the @code{tb_sym_root} of the namespace
583 @code{f2k_derived} associated with the derived-type symbol as @code{gfc_symtree}
584 nodes.  The name and symbol of these symtrees corresponds to the binding-name
585 of the procedure, i.e. the name that is used to call it from the context of an
586 object of the derived-type.
587
588 In addition, this type of symtrees stores in @code{n.tb} a struct of type
589 @code{gfc_typebound_proc} containing the additional data needed:  The
590 binding attributes (like @code{PASS} and @code{NOPASS}, @code{NON_OVERRIDABLE} 
591 or the access-specifier), the binding's target(s) and, if the current binding
592 overrides or extends an inherited binding of the same name, @code{overridden}
593 points to this binding's @code{gfc_typebound_proc} structure.
594
595
596 @subsection Specific Bindings
597 @c --------------------------
598
599 For specific bindings (declared with @code{PROCEDURE}), if they have a
600 passed-object argument, the passed-object dummy argument is first saved by its
601 name, and later during resolution phase the corresponding argument is looked for
602 and its position remembered as @code{pass_arg_num} in @code{gfc_typebound_proc}.
603 The binding's target procedure is pointed-to by @code{u.specific}.
604
605 @code{DEFERRED} bindings are just like ordinary specific bindings, except
606 that their @code{deferred} flag is set of course and that @code{u.specific}
607 points to their ``interface'' defining symbol (might be an abstract interface)
608 instead of the target procedure.
609
610 At the moment, all type-bound procedure calls are statically dispatched and
611 transformed into ordinary procedure calls at resolution time; their actual
612 argument list is updated to include at the right position the passed-object
613 argument, if applicable, and then a simple procedure call to the binding's
614 target procedure is built.  To handle dynamic dispatch in the future, this will
615 be extended to allow special code generation during the trans-phase to dispatch
616 based on the object's dynamic type.
617
618
619 @subsection Generic Bindings
620 @c -------------------------
621
622 Bindings declared as @code{GENERIC} store the specific bindings they target as
623 a linked list using nodes of type @code{gfc_tbp_generic} in @code{u.generic}.
624 For each specific target, the parser records its symtree and during resolution
625 this symtree is bound to the corresponding @code{gfc_typebound_proc} structure
626 of the specific target.
627
628 Calls to generic bindings are handled entirely in the resolution-phase, where
629 for the actual argument list present the matching specific binding is found
630 and the call's target procedure (@code{value.compcall.tbp}) is re-pointed to
631 the found specific binding and this call is subsequently handled by the logic
632 for specific binding calls.
633
634
635 @subsection Calls to Type-bound Procedures
636 @c ---------------------------------------
637
638 Calls to type-bound procedures are stored in the parse-tree as @code{gfc_expr}
639 nodes of type @code{EXPR_COMPCALL}.  Their @code{value.compcall.actual} saves
640 the actual argument list of the call and @code{value.compcall.tbp} points to the
641 @code{gfc_typebound_proc} structure of the binding to be called.  The object
642 in whose context the procedure was called is saved by combination of
643 @code{symtree} and @code{ref}, as if the expression was of type
644 @code{EXPR_VARIABLE}.
645
646 For code like this:
647 @smallexample
648 CALL myobj%procedure (arg1, arg2)
649 @end smallexample
650 @noindent
651 the @code{CALL} is represented in the parse-tree as a @code{gfc_code} node of
652 type @code{EXEC_COMPCALL}.  The @code{expr} member of this node holds an
653 expression of type @code{EXPR_COMPCALL} of the same structure as mentioned above
654 except that its target procedure is of course a @code{SUBROUTINE} and not a
655 @code{FUNCTION}.
656
657 Expressions that are generated internally (as expansion of a type-bound
658 operator call) may also use additional flags and members.
659 @code{value.compcall.ignore_pass} signals that even though a @code{PASS}
660 attribute may be present the actual argument list should not be updated because
661 it already contains the passed-object.
662 @code{value.compcall.base_object} overrides, if it is set, the base-object
663 (that is normally stored in @code{symtree} and @code{ref} as mentioned above);
664 this is needed because type-bound operators can be called on a base-object that
665 need not be of type @code{EXPR_VARIABLE} and thus representable in this way.
666 Finally, if @code{value.compcall.assign} is set, the call was produced in
667 expansion of a type-bound assignment; this means that proper dependency-checking
668 needs to be done when relevant.
669
670
671 @c Type-bound operators
672 @c --------------------
673
674 @node Type-bound Operators
675 @section Type-bound Operators
676
677 Type-bound operators are in fact basically just @code{GENERIC} procedure
678 bindings and are represented much in the same way as those (see
679 @ref{Type-bound Procedures}).
680
681 They come in two flavours:
682 User-defined operators (like @code{.MYOPERATOR.})
683 are stored in the @code{f2k_derived} namespace's @code{tb_uop_root}
684 symtree exactly like ordinary type-bound procedures are stored in
685 @code{tb_sym_root}; their symtrees' names are the operator-names (e.g.
686 @samp{myoperator} in the example).
687 Intrinsic operators on the other hand are stored in the namespace's
688 array member @code{tb_op} indexed by the intrinsic operator's enum
689 value.  Those need not be packed into @code{gfc_symtree} structures and are
690 only @code{gfc_typebound_proc} instances.
691
692 When an operator call or assignment is found that can not be handled in
693 another way (i.e. neither matches an intrinsic nor interface operator
694 definition) but that contains a derived-type expression, all type-bound
695 operators defined on that derived-type are checked for a match with
696 the operator call.  If there's indeed a relevant definition, the
697 operator call is replaced with an internally generated @code{GENERIC}
698 type-bound procedure call to the respective definition and that call is
699 further processed.
700
701
702 @c ---------------------------------------------------------------------
703 @c LibGFortran
704 @c ---------------------------------------------------------------------
705
706 @node LibGFortran
707 @chapter The LibGFortran Runtime Library
708
709 @menu
710 * Symbol Versioning::    Symbol Versioning.
711 @end menu
712
713
714 @c ---------------------------------------------------------------------
715 @c Symbol Versioning
716 @c ---------------------------------------------------------------------
717
718 @node Symbol Versioning
719 @section Symbol Versioning
720 @comment Based on http://gcc.gnu.org/wiki/SymbolVersioning,
721 @comment as of 2006-11-05, written by Janne Blomqvist.
722
723 In general, this capability exists only on a few platforms, thus there
724 is a need for configure magic so that it is used only on those targets
725 where it is supported. 
726
727 The central concept in symbol versioning is the so-called map file,
728 which specifies the version node(s) exported symbols are labeled with.
729 Also, the map file is used to hide local symbols. 
730
731 Some relevant references:
732 @itemize @bullet
733 @item
734 @uref{http://www.gnu.org/software/binutils/manual/ld-2.9.1/html_node/ld_25.html,
735 GNU @command{ld} manual}
736
737 @item
738 @uref{http://people.redhat.com/drepper/symbol-versioning, ELF Symbol
739 Versioning - Ulrich Depper}
740
741 @item
742 @uref{http://people.redhat.com/drepper/dsohowto.pdf, How to Write Shared
743 Libraries - Ulrich Drepper (see Chapter 3)}
744
745 @end itemize
746
747 If one adds a new symbol to a library that should be exported, the new
748 symbol should be mentioned in the map file and a new version node
749 defined, e.g., if one adds a new symbols @code{foo} and @code{bar} to
750 libgfortran for the next GCC release, the following should be added to
751 the map file: 
752 @smallexample
753 GFORTRAN_1.1 @{
754     global:
755         foo;
756         bar;
757 @} GFORTRAN_1.0;
758 @end smallexample
759 @noindent
760 where @code{GFORTRAN_1.0} is the version node of the current release,
761 and @code{GFORTRAN_1.1} is the version node of the next release where
762 foo and bar are made available. 
763
764 If one wants to change an existing interface, it is possible by using
765 some asm trickery (from the @command{ld} manual referenced above): 
766
767 @smallexample
768 __asm__(".symver original_foo,foo@@");
769 __asm__(".symver old_foo,foo@@VERS_1.1");
770 __asm__(".symver old_foo1,foo@@VERS_1.2");
771 __asm__(".symver new_foo,foo@@VERS_2.0");
772 @end smallexample
773
774 In this example, @code{foo@@} represents the symbol @code{foo} bound to
775 the unspecified base version of the symbol. The source file that
776 contains this example would define 4 C functions: @code{original_foo},
777 @code{old_foo}, @code{old_foo1}, and @code{new_foo}. 
778
779 In this case the map file must contain @code{foo} in @code{VERS_1.1}
780 and @code{VERS_1.2} as well as in @code{VERS_2.0}.
781
782
783 @c ---------------------------------------------------------------------
784 @c GNU Free Documentation License
785 @c ---------------------------------------------------------------------
786
787 @include fdl.texi
788
789
790 @c ---------------------------------------------------------------------
791 @c Index
792 @c ---------------------------------------------------------------------
793
794 @node Index
795 @unnumbered Index
796
797 @printindex cp
798
799 @bye