1 \input texinfo @c -*-texinfo-*-
3 @setfilename gfc-internals.info
4 @set copyrights-gfortran 2007-2019
6 @include gcc-common.texi
10 @settitle GNU Fortran Compiler Internals
14 @c Use with @@smallbook.
16 @c %** start of document
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.
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
26 @c (To provide the reverse effect, set bindingoffset to -0.75in.)
29 @c \global\bindingoffset=0.75in
30 @c \global\normaloffset =0.75in
34 Copyright @copyright{} @value{copyrights-gfortran} Free Software Foundation, Inc.
36 Permission is granted to copy, distribute and/or modify this document
37 under the terms of the GNU Free Documentation License, Version 1.3 or
38 any later version published by the Free Software Foundation; with the
39 Invariant Sections being ``Funding Free Software'', the Front-Cover
40 Texts being (a) (see below), and with the Back-Cover Texts being (b)
41 (see below). A copy of the license is included in the section entitled
42 ``GNU Free Documentation License''.
44 (a) The FSF's Front-Cover Text is:
48 (b) The FSF's Back-Cover Text is:
50 You have freedom to copy and modify this GNU Manual, like GNU
51 software. Copies published by the Free Software Foundation raise
52 funds for GNU development.
56 @dircategory Software development
58 * gfortran: (gfortran). The GNU Fortran Compiler.
60 This file documents the internals of the GNU Fortran
61 compiler, (@command{gfortran}).
63 Published by the Free Software Foundation
64 51 Franklin Street, Fifth Floor
65 Boston, MA 02110-1301 USA
71 @setchapternewpage odd
73 @title GNU Fortran Internals
75 @author The @t{gfortran} team
77 @vskip 0pt plus 1filll
78 Published by the Free Software Foundation@*
79 51 Franklin Street, Fifth Floor@*
80 Boston, MA 02110-1301, USA@*
81 @c Last printed ??ber, 19??.@*
82 @c Printed copies are available for $? each.@*
93 @c ---------------------------------------------------------------------
94 @c TexInfo table of contents.
95 @c ---------------------------------------------------------------------
102 This manual documents the internals of @command{gfortran},
103 the GNU Fortran compiler.
106 @emph{Warning:} This document, and the compiler it describes, are still
107 under development. While efforts are made to keep it up-to-date, it might
108 not accurately reflect the status of the most recent GNU Fortran compiler.
112 @comment When you add a new menu item, please keep the right hand
113 @comment aligned to the same column. Do not use tabs. This provides
114 @comment better formatting.
117 * Introduction:: About this manual.
118 * User Interface:: Code that Interacts with the User.
119 * Frontend Data Structures::
120 Data structures used by the frontend
121 * Object Orientation:: Internals of Fortran 2003 OOP features.
122 * Translating to GENERIC::
123 Generating the intermediate language for later stages.
124 * LibGFortran:: The LibGFortran Runtime Library.
125 * GNU Free Documentation License::
126 How you can copy and share this manual.
127 * Index:: Index of this documentation.
131 @c ---------------------------------------------------------------------
133 @c ---------------------------------------------------------------------
136 @chapter Introduction
138 @c The following duplicates the text on the TexInfo table of contents.
140 This manual documents the internals of @command{gfortran}, the GNU Fortran
144 @emph{Warning:} This document, and the compiler it describes, are still
145 under development. While efforts are made to keep it up-to-date, it
146 might not accurately reflect the status of the most recent GNU Fortran
151 At present, this manual is very much a work in progress, containing
152 miscellaneous notes about the internals of the compiler. It is hoped
153 that at some point in the future it will become a reasonably complete
154 guide; in the interim, GNU Fortran developers are strongly encouraged to
155 contribute to it as a way of keeping notes while working on the
159 @c ---------------------------------------------------------------------
160 @c Code that Interacts with the User
161 @c ---------------------------------------------------------------------
164 @chapter Code that Interacts with the User
167 * Command-Line Options:: Command-Line Options.
168 * Error Handling:: Error Handling.
172 @c ---------------------------------------------------------------------
173 @c Command-Line Options
174 @c ---------------------------------------------------------------------
176 @node Command-Line Options
177 @section Command-Line Options
179 Command-line options for @command{gfortran} involve four interrelated
180 pieces within the Fortran compiler code.
182 The relevant command-line flag is defined in @file{lang.opt}, according
183 to the documentation in @ref{Options,, Options, gccint, GNU Compiler
184 Collection Internals}. This is then processed by the overall GCC
185 machinery to create the code that enables @command{gfortran} and
186 @command{gcc} to recognize the option in the command-line arguments and
187 call the relevant handler function.
189 This generated code calls the @code{gfc_handle_option} code in
190 @file{options.c} with an enumerator variable indicating which option is
191 to be processed, and the relevant integer or string values associated
192 with that option flag. Typically, @code{gfc_handle_option} uses these
193 arguments to set global flags which record the option states.
195 The global flags that record the option states are stored in the
196 @code{gfc_option_t} struct, which is defined in @file{gfortran.h}.
197 Before the options are processed, initial values for these flags are set
198 in @code{gfc_init_option} in @file{options.c}; these become the default
199 values for the options.
203 @c ---------------------------------------------------------------------
205 @c ---------------------------------------------------------------------
208 @section Error Handling
210 The GNU Fortran compiler's parser operates by testing each piece of
211 source code against a variety of matchers. In some cases, if these
212 matchers do not match the source code, they will store an error message
213 in a buffer. If the parser later finds a matcher that does correctly
214 match the source code, then the buffered error is discarded. However,
215 if the parser cannot find a match, then the buffered error message is
216 reported to the user. This enables the compiler to provide more
217 meaningful error messages even in the many cases where (erroneous)
218 Fortran syntax is ambiguous due to things like the absence of reserved
221 As an example of how this works, consider the following line:
225 Hypothetically, this may get passed to the matcher for an @code{IF}
226 statement. Since this could plausibly be an erroneous @code{IF}
227 statement, the matcher will buffer an error message reporting the
228 absence of an expected @samp{(} following an @code{IF}. Since no
229 matchers reported an error-free match, however, the parser will also try
230 matching this against a variable assignment. When @code{IF} is a valid
231 variable, this will be parsed as an assignment statement, and the error
232 discarded. However, when @code{IF} is not a valid variable, this
233 buffered error message will be reported to the user.
235 The error handling code is implemented in @file{error.c}. Errors are
236 normally entered into the buffer with the @code{gfc_error} function.
237 Warnings go through a similar buffering process, and are entered into
238 the buffer with @code{gfc_warning}. There is also a special-purpose
239 function, @code{gfc_notify_std}, for things which have an error/warning
240 status that depends on the currently-selected language standard.
242 The @code{gfc_error_check} function checks the buffer for errors,
243 reports the error message to the user if one exists, clears the buffer,
244 and returns a flag to the user indicating whether or not an error
245 existed. To check the state of the buffer without changing its state or
246 reporting the errors, the @code{gfc_error_flag_test} function can be
247 used. The @code{gfc_clear_error} function will clear out any errors in
248 the buffer, without reporting them. The @code{gfc_warning_check} and
249 @code{gfc_clear_warning} functions provide equivalent functionality for
252 Only one error and one warning can be in the buffers at a time, and
253 buffering another will overwrite the existing one. In cases where one
254 may wish to work on a smaller piece of source code without disturbing an
255 existing error state, the @code{gfc_push_error}, @code{gfc_pop_error},
256 and @code{gfc_free_error} mechanism exists to implement a stack for the
259 For cases where an error or warning should be reported immediately
260 rather than buffered, the @code{gfc_error_now} and
261 @code{gfc_warning_now} functions can be used. Normally, the compiler
262 will continue attempting to parse the program after an error has
263 occurred, but if this is not appropriate, the @code{gfc_fatal_error}
264 function should be used instead. For errors that are always the result
265 of a bug somewhere in the compiler, the @code{gfc_internal_error}
266 function should be used.
268 The syntax for the strings used to produce the error/warning message in
269 the various error and warning functions is similar to the @code{printf}
270 syntax, with @samp{%}-escapes to insert variable values. The details,
271 and the allowable codes, are documented in the @code{error_print}
272 function in @file{error.c}.
274 @c ---------------------------------------------------------------------
275 @c Frontend Data Structures
276 @c ---------------------------------------------------------------------
278 @node Frontend Data Structures
279 @chapter Frontend Data Structures
280 @cindex data structures
282 This chapter should describe the details necessary to understand how
283 the various @code{gfc_*} data are used and interact. In general it is
284 advisable to read the code in @file{dump-parse-tree.c} as its routines
285 should exhaust all possible valid combinations of content for these
289 * gfc_code:: Representation of Executable Statements.
290 * gfc_expr:: Representation of Values and Expressions.
298 @section @code{gfc_code}
299 @cindex statement chaining
300 @tindex @code{gfc_code}
301 @tindex @code{struct gfc_code}
303 The executable statements in a program unit are represented by a
304 nested chain of @code{gfc_code} structures. The type of statement is
305 identified by the @code{op} member of the structure, the different
306 possible values are enumerated in @code{gfc_exec_op}. A special
307 member of this @code{enum} is @code{EXEC_NOP} which is used to
308 represent the various @code{END} statements if they carry a label.
309 Depending on the type of statement some of the other fields will be
310 filled in. Fields that are generally applicable are the @code{next}
311 and @code{here} fields. The former points to the next statement in
312 the current block or is @code{NULL} if the current statement is the
313 last in a block, @code{here} points to the statement label of the
316 If the current statement is one of @code{IF}, @code{DO}, @code{SELECT}
317 it starts a block, i.e.@: a nested level in the program. In order to
318 represent this, the @code{block} member is set to point to a
319 @code{gfc_code} structure whose @code{next} member starts the chain of
320 statements inside the block; this structure's @code{op} member should be set to
321 the same value as the parent structure's @code{op} member. The @code{SELECT}
322 and @code{IF} statements may contain various blocks (the chain of @code{ELSE IF}
323 and @code{ELSE} blocks or the various @code{CASE}s, respectively). These chains
324 are linked-lists formed by the @code{block} members.
326 Consider the following example code:
332 ELSEIF (foo > 50) THEN
340 This statement-block will be represented in the internal gfortran tree as
341 follows, were the horizontal link-chains are those induced by the @code{next}
342 members and vertical links down are those of @code{block}. @samp{==|} and
343 @samp{--|} mean @code{NULL} pointers to mark the end of a chain:
348 +--> IF foo < 20 ==> PRINT *, "Too small" ==> foo = 20 ==|
350 +--> IF foo > 50 ==> PRINT *, "Too large" ==> foo = 50 ==|
352 +--> ELSE ==> PRINT *, "Good" ==|
358 @subsection IF Blocks
360 Conditionals are represented by @code{gfc_code} structures with their
361 @code{op} member set to @code{EXEC_IF}. This structure's @code{block}
362 member must point to another @code{gfc_code} node that is the header of the
363 if-block. This header's @code{op} member must be set to @code{EXEC_IF}, too,
364 its @code{expr} member holds the condition to check for, and its @code{next}
365 should point to the code-chain of the statements to execute if the condition is
368 If in addition an @code{ELSEIF} or @code{ELSE} block is present, the
369 @code{block} member of the if-block-header node points to yet another
370 @code{gfc_code} structure that is the header of the elseif- or else-block. Its
371 structure is identical to that of the if-block-header, except that in case of an
372 @code{ELSE} block without a new condition the @code{expr} member should be
373 @code{NULL}. This block can itself have its @code{block} member point to the
374 next @code{ELSEIF} or @code{ELSE} block if there's a chain of them.
379 @code{DO} loops are stored in the tree as @code{gfc_code} nodes with their
380 @code{op} set to @code{EXEC_DO} for a @code{DO} loop with iterator variable and
381 to @code{EXEC_DO_WHILE} for infinite @code{DO}s and @code{DO WHILE} blocks.
382 Their @code{block} member should point to a @code{gfc_code} structure heading
383 the code-chain of the loop body; its @code{op} member should be set to
384 @code{EXEC_DO} or @code{EXEC_DO_WHILE}, too, respectively.
386 For @code{DO WHILE} loops, the loop condition is stored on the top
387 @code{gfc_code} structure's @code{expr} member; @code{DO} forever loops are
388 simply @code{DO WHILE} loops with a constant @code{.TRUE.} loop condition in
389 the internal representation.
391 Similarly, @code{DO} loops with an iterator have instead of the condition their
392 @code{ext.iterator} member set to the correct values for the loop iterator
393 variable and its range.
396 @subsection @code{SELECT} Statements
398 A @code{SELECT} block is introduced by a @code{gfc_code} structure with an
399 @code{op} member of @code{EXEC_SELECT} and @code{expr} containing the expression
400 to evaluate and test. Its @code{block} member starts a list of @code{gfc_code}
401 structures linked together by their @code{block} members that stores the various
404 Each @code{CASE} node has its @code{op} member set to @code{EXEC_SELECT}, too,
405 its @code{next} member points to the code-chain to be executed in the current
406 case-block, and @code{extx.case_list} contains the case-values this block
407 corresponds to. The @code{block} member links to the next case in the list.
410 @subsection @code{BLOCK} and @code{ASSOCIATE}
412 The code related to a @code{BLOCK} statement is stored inside an
413 @code{gfc_code} structure (say @var{c})
414 with @code{c.op} set to @code{EXEC_BLOCK}. The
415 @code{gfc_namespace} holding the locally defined variables of the
416 @code{BLOCK} is stored in @code{c.ext.block.ns}. The code inside the
417 construct is in @code{c.code}.
419 @code{ASSOCIATE} constructs are based on @code{BLOCK} and thus also have
420 the internal storage structure described above (including @code{EXEC_BLOCK}).
421 However, for them @code{c.ext.block.assoc} is set additionally and points
422 to a linked list of @code{gfc_association_list} structures. Those
423 structures basically store a link of associate-names to target expressions.
424 The associate-names themselves are still also added to the @code{BLOCK}'s
425 namespace as ordinary symbols, but they have their @code{gfc_symbol}'s
426 member @code{assoc} set also pointing to the association-list structure.
427 This way associate-names can be distinguished from ordinary variables
428 and their target expressions identified.
430 For association to expressions (as opposed to variables), at the very beginning
431 of the @code{BLOCK} construct assignments are automatically generated to
432 set the corresponding variables to their target expressions' values, and
433 later on the compiler simply disallows using such associate-names in contexts
434 that may change the value.
441 @section @code{gfc_expr}
442 @tindex @code{gfc_expr}
443 @tindex @code{struct gfc_expr}
445 Expressions and ``values'', including constants, variable-, array- and
446 component-references as well as complex expressions consisting of operators and
447 function calls are internally represented as one or a whole tree of
448 @code{gfc_expr} objects. The member @code{expr_type} specifies the overall
449 type of an expression (for instance, @code{EXPR_CONSTANT} for constants or
450 @code{EXPR_VARIABLE} for variable references). The members @code{ts} and
451 @code{rank} as well as @code{shape}, which can be @code{NULL}, specify
452 the type, rank and, if applicable, shape of the whole expression or expression
453 tree of which the current structure is the root. @code{where} is the locus of
454 this expression in the source code.
456 Depending on the flavor of the expression being described by the object
457 (that is, the value of its @code{expr_type} member), the corresponding structure
458 in the @code{value} union will usually contain additional data describing the
459 expression's value in a type-specific manner. The @code{ref} member is used to
460 build chains of (array-, component- and substring-) references if the expression
461 in question contains such references, see below for details.
464 @subsection Constants
466 Scalar constants are represented by @code{gfc_expr} nodes with their
467 @code{expr_type} set to @code{EXPR_CONSTANT}. The constant's value shall
468 already be known at compile-time and is stored in the @code{logical},
469 @code{integer}, @code{real}, @code{complex} or @code{character} struct inside
470 @code{value}, depending on the constant's type specification.
473 @subsection Operators
475 Operator-expressions are expressions that are the result of the execution of
476 some operator on one or two operands. The expressions have an @code{expr_type}
477 of @code{EXPR_OP}. Their @code{value.op} structure contains additional data.
479 @code{op1} and optionally @code{op2} if the operator is binary point to the
480 two operands, and @code{operator} or @code{uop} describe the operator that
481 should be evaluated on these operands, where @code{uop} describes a user-defined
485 @subsection Function Calls
487 If the expression is the return value of a function-call, its @code{expr_type}
488 is set to @code{EXPR_FUNCTION}, and @code{symtree} must point to the symtree
489 identifying the function to be called. @code{value.function.actual} holds the
490 actual arguments given to the function as a linked list of
491 @code{gfc_actual_arglist} nodes.
493 The other members of @code{value.function} describe the function being called
494 in more detail, containing a link to the intrinsic symbol or user-defined
495 function symbol if the call is to an intrinsic or external function,
496 respectively. These values are determined during resolution-phase from the
497 structure's @code{symtree} member.
499 A special case of function calls are ``component calls'' to type-bound
500 procedures; those have the @code{expr_type} @code{EXPR_COMPCALL} with
501 @code{value.compcall} containing the argument list and the procedure called,
502 while @code{symtree} and @code{ref} describe the object on which the procedure
503 was called in the same way as a @code{EXPR_VARIABLE} expression would.
504 @xref{Type-bound Procedures}.
507 @subsection Array- and Structure-Constructors
509 Array- and structure-constructors (one could probably call them ``array-'' and
510 ``derived-type constants'') are @code{gfc_expr} structures with their
511 @code{expr_type} member set to @code{EXPR_ARRAY} or @code{EXPR_STRUCTURE},
512 respectively. For structure constructors, @code{symtree} points to the
513 derived-type symbol for the type being constructed.
515 The values for initializing each array element or structure component are
516 stored as linked-list of @code{gfc_constructor} nodes in the
517 @code{value.constructor} member.
522 @code{NULL} is a special value for pointers; it can be of different base types.
523 Such a @code{NULL} value is represented in the internal tree by a
524 @code{gfc_expr} node with @code{expr_type} @code{EXPR_NULL}. If the base type
525 of the @code{NULL} expression is known, it is stored in @code{ts} (that's for
526 instance the case for default-initializers of @code{ALLOCATABLE} components),
527 but this member can also be set to @code{BT_UNKNOWN} if the information is not
528 available (for instance, when the expression is a pointer-initializer
532 @subsection Variables and Reference Expressions
534 Variable references are @code{gfc_expr} structures with their @code{expr_type}
535 set to @code{EXPR_VARIABLE}; their @code{symtree} should point to the variable
538 For this type of expression, it's also possible to chain array-, component-
539 or substring-references to the original expression to get something like
540 @samp{struct%component(2:5)}, where @code{component} is either an array or
541 a @code{CHARACTER} member of @code{struct} that is of some derived-type. Such a
542 chain of references is achieved by a linked list headed by @code{ref} of the
543 @code{gfc_expr} node. For the example above it would be (@samp{==|} is the
544 last @code{NULL} pointer):
547 EXPR_VARIABLE(struct) ==> REF_COMPONENT(component) ==> REF_ARRAY(2:5) ==|
550 If @code{component} is a string rather than an array, the last element would be
551 a @code{REF_SUBSTRING} reference, of course. If the variable itself or some
552 component referenced is an array and the expression should reference the whole
553 array rather than being followed by an array-element or -section reference, a
554 @code{REF_ARRAY} reference must be built as the last element in the chain with
555 an array-reference type of @code{AR_FULL}. Consider this example code:
562 TYPE(mytype) :: variable
563 INTEGER :: local_array(5)
565 CALL do_something (variable%array, local_array)
568 The @code{gfc_expr} nodes representing the arguments to the @samp{do_something}
569 call will have a reference-chain like this:
572 EXPR_VARIABLE(variable) ==> REF_COMPONENT(array) ==> REF_ARRAY(FULL) ==|
573 EXPR_VARIABLE(local_array) ==> REF_ARRAY(FULL) ==|
577 @subsection Constant Substring References
579 @code{EXPR_SUBSTRING} is a special type of expression that encodes a substring
580 reference of a constant string, as in the following code snippet:
586 In this case, @code{value.character} contains the full string's data as if it
587 was a string constant, but the @code{ref} member is also set and points to a
588 substring reference as described in the subsection above.
591 @c ---------------------------------------------------------------------
593 @c ---------------------------------------------------------------------
595 @node Object Orientation
596 @chapter Internals of Fortran 2003 OOP Features
599 * Type-bound Procedures:: Type-bound procedures.
600 * Type-bound Operators:: Type-bound operators.
604 @c Type-bound procedures
605 @c ---------------------
607 @node Type-bound Procedures
608 @section Type-bound Procedures
610 Type-bound procedures are stored in the @code{tb_sym_root} of the namespace
611 @code{f2k_derived} associated with the derived-type symbol as @code{gfc_symtree}
612 nodes. The name and symbol of these symtrees corresponds to the binding-name
613 of the procedure, i.e. the name that is used to call it from the context of an
614 object of the derived-type.
616 In addition, this type of symtrees stores in @code{n.tb} a struct of type
617 @code{gfc_typebound_proc} containing the additional data needed: The
618 binding attributes (like @code{PASS} and @code{NOPASS}, @code{NON_OVERRIDABLE}
619 or the access-specifier), the binding's target(s) and, if the current binding
620 overrides or extends an inherited binding of the same name, @code{overridden}
621 points to this binding's @code{gfc_typebound_proc} structure.
624 @subsection Specific Bindings
625 @c --------------------------
627 For specific bindings (declared with @code{PROCEDURE}), if they have a
628 passed-object argument, the passed-object dummy argument is first saved by its
629 name, and later during resolution phase the corresponding argument is looked for
630 and its position remembered as @code{pass_arg_num} in @code{gfc_typebound_proc}.
631 The binding's target procedure is pointed-to by @code{u.specific}.
633 @code{DEFERRED} bindings are just like ordinary specific bindings, except
634 that their @code{deferred} flag is set of course and that @code{u.specific}
635 points to their ``interface'' defining symbol (might be an abstract interface)
636 instead of the target procedure.
638 At the moment, all type-bound procedure calls are statically dispatched and
639 transformed into ordinary procedure calls at resolution time; their actual
640 argument list is updated to include at the right position the passed-object
641 argument, if applicable, and then a simple procedure call to the binding's
642 target procedure is built. To handle dynamic dispatch in the future, this will
643 be extended to allow special code generation during the trans-phase to dispatch
644 based on the object's dynamic type.
647 @subsection Generic Bindings
648 @c -------------------------
650 Bindings declared as @code{GENERIC} store the specific bindings they target as
651 a linked list using nodes of type @code{gfc_tbp_generic} in @code{u.generic}.
652 For each specific target, the parser records its symtree and during resolution
653 this symtree is bound to the corresponding @code{gfc_typebound_proc} structure
654 of the specific target.
656 Calls to generic bindings are handled entirely in the resolution-phase, where
657 for the actual argument list present the matching specific binding is found
658 and the call's target procedure (@code{value.compcall.tbp}) is re-pointed to
659 the found specific binding and this call is subsequently handled by the logic
660 for specific binding calls.
663 @subsection Calls to Type-bound Procedures
664 @c ---------------------------------------
666 Calls to type-bound procedures are stored in the parse-tree as @code{gfc_expr}
667 nodes of type @code{EXPR_COMPCALL}. Their @code{value.compcall.actual} saves
668 the actual argument list of the call and @code{value.compcall.tbp} points to the
669 @code{gfc_typebound_proc} structure of the binding to be called. The object
670 in whose context the procedure was called is saved by combination of
671 @code{symtree} and @code{ref}, as if the expression was of type
672 @code{EXPR_VARIABLE}.
676 CALL myobj%procedure (arg1, arg2)
679 the @code{CALL} is represented in the parse-tree as a @code{gfc_code} node of
680 type @code{EXEC_COMPCALL}. The @code{expr} member of this node holds an
681 expression of type @code{EXPR_COMPCALL} of the same structure as mentioned above
682 except that its target procedure is of course a @code{SUBROUTINE} and not a
685 Expressions that are generated internally (as expansion of a type-bound
686 operator call) may also use additional flags and members.
687 @code{value.compcall.ignore_pass} signals that even though a @code{PASS}
688 attribute may be present the actual argument list should not be updated because
689 it already contains the passed-object.
690 @code{value.compcall.base_object} overrides, if it is set, the base-object
691 (that is normally stored in @code{symtree} and @code{ref} as mentioned above);
692 this is needed because type-bound operators can be called on a base-object that
693 need not be of type @code{EXPR_VARIABLE} and thus representable in this way.
694 Finally, if @code{value.compcall.assign} is set, the call was produced in
695 expansion of a type-bound assignment; this means that proper dependency-checking
696 needs to be done when relevant.
699 @c Type-bound operators
700 @c --------------------
702 @node Type-bound Operators
703 @section Type-bound Operators
705 Type-bound operators are in fact basically just @code{GENERIC} procedure
706 bindings and are represented much in the same way as those (see
707 @ref{Type-bound Procedures}).
709 They come in two flavours:
710 User-defined operators (like @code{.MYOPERATOR.})
711 are stored in the @code{f2k_derived} namespace's @code{tb_uop_root}
712 symtree exactly like ordinary type-bound procedures are stored in
713 @code{tb_sym_root}; their symtrees' names are the operator-names (e.g.
714 @samp{myoperator} in the example).
715 Intrinsic operators on the other hand are stored in the namespace's
716 array member @code{tb_op} indexed by the intrinsic operator's enum
717 value. Those need not be packed into @code{gfc_symtree} structures and are
718 only @code{gfc_typebound_proc} instances.
720 When an operator call or assignment is found that cannot be handled in
721 another way (i.e. neither matches an intrinsic nor interface operator
722 definition) but that contains a derived-type expression, all type-bound
723 operators defined on that derived-type are checked for a match with
724 the operator call. If there's indeed a relevant definition, the
725 operator call is replaced with an internally generated @code{GENERIC}
726 type-bound procedure call to the respective definition and that call is
729 @c ---------------------------------------------------------------------
730 @c - Translating to GENERIC
731 @c ---------------------------------------------------------------------
733 @node Translating to GENERIC
734 @chapter Generating the intermediate language for later stages.
736 This chapter deals with the transformation of gfortran's frontend data
737 structures to the intermediate language used by the later stages of
738 the compiler, the so-called middle end.
740 Data structures relating to this are found in the source files
741 @file{trans*.h} and @file{trans-*.c}.
744 * Basic Data Structures:: Basic data structures.
745 * Converting Expressions:: Converting expressions to tree.
746 * Translating Statements:: Translating statements.
747 * Accessing Declarations:: Accessing declarations.
750 @node Basic Data Structures
751 @section Basic data structures
753 Gfortran creates GENERIC as an intermediate language for the
754 middle-end. Details about GENERIC can be found in the GCC manual.
756 The basic data structure of GENERIC is a @code{tree}. Everything in
757 GENERIC is a @code{tree}, including types and statements. Fortunately
758 for the gfortran programmer, @code{tree} variables are
759 garbage-collected, so doing memory management for them is not
762 @code{tree} expressions are built using functions such as, for
763 example, @code{fold_build2_loc}. For two tree variables @code{a} and
764 @code{b}, both of which have the type @code{gfc_arry_index_type},
765 calculation @code{c = a * b} would be done by
768 c = fold_build2_loc (input_location, MULT_EXPR,
769 gfc_array_index_type, a, b);
772 The types have to agree, otherwise internal compiler errors will occur
773 at a later stage. Expressions can be converted to a different type
774 using @code{fold_convert}.
776 Accessing individual members in the @code{tree} structures should not
777 be done. Rather, access should be done via macros.
779 One basic data structure is the @code{stmtblock_t} struct. This is
780 used for holding a list of statements, expressed as @code{tree}
781 expressions. If a block is created using @code{gfc_start_block}, it
782 has its own scope for variables; if it is created using
783 @code{gfc_init_block}, it does not have its own scope.
787 @item Add an expression to the end of a block using
788 @code{gfc_add_expr_to_block}
789 @item Add an expression to the beginning of a block using
790 @code{void gfc_prepend_expr_to_block}
791 @item Make a block into a single @code{tree} using
792 @code{gfc_finish_block}. For example, this is needed to put the
793 contents of a block into the @code{if} or @code{else} branch of
797 Variables are also @code{tree} expressions, they can be created using
798 @code{gfc_create_var}. Assigning to a variable can be done with
799 @code{gfc_add_modify}.
801 An example: Creating a default integer type variable in the current
802 scope with the prefix ``everything'' in the @code{stmt_block}
803 @code{block} and assigning the value 42 would be
807 /* Initialize block somewhere here. */
808 var = gfc_create_var (integer_type_node, "everything");
809 gfc_add_modify (block, var, build_int_cst (integer_type_node, 42));
812 @node Converting Expressions
813 @section Converting Expressons to tree
815 Converting expressions to @code{tree} is done by functions called
818 The central data structure for a GENERIC expression is the
819 @code{gfc_se} structure. Its @code{expr} member is a @code{tree} that
820 holds the value of the expression. A @code{gfc_se} structure is
821 initialized using @code{gfc_init_se}; it needs to be embedded in an
824 Evaluating Fortran expressions often require things to be done before
825 and after evaluation of the expression, for example code for the
826 allocation of a temporary variable and its subsequent deallocation.
827 Therefore, @code{gfc_se} contains the members @code{pre} and
828 @code{post}, which point to @code{stmt_block} blocks for code that
829 needs to be executed before and after evaluation of the expression.
831 When using a local @code{gfc_se} to convert some expression, it is
832 often necessary to add the generated @code{pre} and @code{post} blocks
833 to the @code{pre} or @code{post} blocks of the outer @code{gfc_se}.
834 Code like this (lifted from @file{trans-expr.c}) is fairly common:
840 /* cont_var = is_contiguous (expr); . */
841 gfc_init_se (&cont_se, parmse);
842 gfc_conv_is_contiguous_expr (&cont_se, expr);
843 gfc_add_block_to_block (&se->pre, &(&cont_se)->pre);
844 gfc_add_modify (&se->pre, cont_var, cont_se.expr);
845 gfc_add_block_to_block (&se->pre, &(&cont_se)->post);
848 Conversion functions which need a @code{gfc_se} structure will have a
849 corresponding argument.
851 @code{gfc_se} also contains pointers to a @code{gfc_ss} and a
852 @code{gfc_loopinfo} structure. These are needed by the scalarizer.
854 @node Translating Statements
855 @section Translating statements
856 Translating statements to @code{tree} is done by functions called
857 @code{gfc_trans_*}. These functions usually get passed a
858 @code{gfc_code} structure, evaluate any expressions and then
859 return a @code{tree} structure.
861 @node Accessing Declarations
862 @section Accessing declarations
864 @code{gfc_symbol}, @code{gfc_charlen} and other front-end structures
865 contain a @code{backend_decl} variable, which contains the @code{tree}
866 used for accessing that entity in the middle-end.
868 Accessing declarations is usually done by functions called
871 @c ---------------------------------------------------------------------
873 @c ---------------------------------------------------------------------
876 @chapter The LibGFortran Runtime Library
879 * Symbol Versioning:: Symbol Versioning.
883 @c ---------------------------------------------------------------------
885 @c ---------------------------------------------------------------------
887 @node Symbol Versioning
888 @section Symbol Versioning
889 @comment Based on https://gcc.gnu.org/wiki/SymbolVersioning,
890 @comment as of 2006-11-05, written by Janne Blomqvist.
892 In general, this capability exists only on a few platforms, thus there
893 is a need for configure magic so that it is used only on those targets
894 where it is supported.
896 The central concept in symbol versioning is the so-called map file,
897 which specifies the version node(s) exported symbols are labeled with.
898 Also, the map file is used to hide local symbols.
900 Some relevant references:
903 @uref{https://sourceware.org/binutils/docs/ld/VERSION.html,
904 GNU @command{ld} manual}
907 @uref{https://www.akkadia.org/drepper/symbol-versioning, ELF Symbol
908 Versioning - Ulrich Depper}
911 @uref{https://www.akkadia.org/drepper/dsohowto.pdf, How to Write Shared
912 Libraries - Ulrich Drepper (see Chapter 3)}
916 If one adds a new symbol to a library that should be exported, the new
917 symbol should be mentioned in the map file and a new version node
918 defined, e.g., if one adds a new symbols @code{foo} and @code{bar} to
919 libgfortran for the next GCC release, the following should be added to
929 where @code{GFORTRAN_1.0} is the version node of the current release,
930 and @code{GFORTRAN_1.1} is the version node of the next release where
931 foo and bar are made available.
933 If one wants to change an existing interface, it is possible by using
934 some asm trickery (from the @command{ld} manual referenced above):
937 __asm__(".symver original_foo,foo@@");
938 __asm__(".symver old_foo,foo@@VERS_1.1");
939 __asm__(".symver old_foo1,foo@@VERS_1.2");
940 __asm__(".symver new_foo,foo@@VERS_2.0");
943 In this example, @code{foo@@} represents the symbol @code{foo} bound to
944 the unspecified base version of the symbol. The source file that
945 contains this example would define 4 C functions: @code{original_foo},
946 @code{old_foo}, @code{old_foo1}, and @code{new_foo}.
948 In this case the map file must contain @code{foo} in @code{VERS_1.1}
949 and @code{VERS_1.2} as well as in @code{VERS_2.0}.
952 @c ---------------------------------------------------------------------
953 @c GNU Free Documentation License
954 @c ---------------------------------------------------------------------
959 @c ---------------------------------------------------------------------
961 @c ---------------------------------------------------------------------