langhooks-def.h (LANG_HOOKS_CLEAR_BINDING_STACK): Delete.
[official-gcc.git] / gcc / fortran / f95-lang.c
blob52c0a819025f57b353ac2a592550ff6c223bef0b
1 /* gfortran backend interface
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
3 Free Software Foundation, Inc.
4 Contributed by Paul Brook.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 /* f95-lang.c-- GCC backend interface stuff */
24 /* declare required prototypes: */
26 #include "config.h"
27 #include "system.h"
28 #include "ansidecl.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tree.h"
32 #include "tree-gimple.h"
33 #include "flags.h"
34 #include "langhooks.h"
35 #include "langhooks-def.h"
36 #include "timevar.h"
37 #include "tm.h"
38 #include "function.h"
39 #include "ggc.h"
40 #include "toplev.h"
41 #include "target.h"
42 #include "debug.h"
43 #include "diagnostic.h"
44 #include "tree-dump.h"
45 #include "cgraph.h"
47 #include "gfortran.h"
48 #include "trans.h"
49 #include "trans-types.h"
50 #include "trans-const.h"
52 /* Language-dependent contents of an identifier. */
54 struct lang_identifier
55 GTY(())
57 struct tree_identifier common;
60 /* The resulting tree type. */
62 union lang_tree_node
63 GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
64 chain_next ("(union lang_tree_node *)GENERIC_NEXT (&%h.generic)")))
67 union tree_node GTY((tag ("0"),
68 desc ("tree_node_structure (&%h)"))) generic;
69 struct lang_identifier GTY((tag ("1"))) identifier;
72 /* Save and restore the variables in this file and elsewhere
73 that keep track of the progress of compilation of the current function.
74 Used for nested functions. */
76 struct language_function
77 GTY(())
79 /* struct gfc_language_function base; */
80 struct binding_level *binding_level;
83 /* We don't have a lex/yacc lexer/parser, but toplev expects these to
84 exist anyway. */
85 void yyerror (const char *str);
86 int yylex (void);
88 static void gfc_init_decl_processing (void);
89 static void gfc_init_builtin_functions (void);
91 /* Each front end provides its own. */
92 static bool gfc_init (void);
93 static void gfc_finish (void);
94 static void gfc_print_identifier (FILE *, tree, int);
95 static bool gfc_mark_addressable (tree);
96 void do_function_end (void);
97 int global_bindings_p (void);
98 void insert_block (tree);
99 static void clear_binding_stack (void);
100 static void gfc_be_parse_file (int);
101 static alias_set_type gfc_get_alias_set (tree);
103 #undef LANG_HOOKS_NAME
104 #undef LANG_HOOKS_INIT
105 #undef LANG_HOOKS_FINISH
106 #undef LANG_HOOKS_INIT_OPTIONS
107 #undef LANG_HOOKS_HANDLE_OPTION
108 #undef LANG_HOOKS_POST_OPTIONS
109 #undef LANG_HOOKS_PRINT_IDENTIFIER
110 #undef LANG_HOOKS_PARSE_FILE
111 #undef LANG_HOOKS_MARK_ADDRESSABLE
112 #undef LANG_HOOKS_TYPE_FOR_MODE
113 #undef LANG_HOOKS_TYPE_FOR_SIZE
114 #undef LANG_HOOKS_GET_ALIAS_SET
115 #undef LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE
116 #undef LANG_HOOKS_OMP_PREDETERMINED_SHARING
117 #undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR
118 #undef LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR
119 #undef LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE
120 #undef LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES
121 #undef LANG_HOOKS_BUILTIN_FUNCTION
122 #undef LANG_HOOKS_GET_ARRAY_DESCR_INFO
124 /* Define lang hooks. */
125 #define LANG_HOOKS_NAME "GNU F95"
126 #define LANG_HOOKS_INIT gfc_init
127 #define LANG_HOOKS_FINISH gfc_finish
128 #define LANG_HOOKS_INIT_OPTIONS gfc_init_options
129 #define LANG_HOOKS_HANDLE_OPTION gfc_handle_option
130 #define LANG_HOOKS_POST_OPTIONS gfc_post_options
131 #define LANG_HOOKS_PRINT_IDENTIFIER gfc_print_identifier
132 #define LANG_HOOKS_PARSE_FILE gfc_be_parse_file
133 #define LANG_HOOKS_MARK_ADDRESSABLE gfc_mark_addressable
134 #define LANG_HOOKS_TYPE_FOR_MODE gfc_type_for_mode
135 #define LANG_HOOKS_TYPE_FOR_SIZE gfc_type_for_size
136 #define LANG_HOOKS_GET_ALIAS_SET gfc_get_alias_set
137 #define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE gfc_omp_privatize_by_reference
138 #define LANG_HOOKS_OMP_PREDETERMINED_SHARING gfc_omp_predetermined_sharing
139 #define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR gfc_omp_clause_default_ctor
140 #define LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR gfc_omp_disregard_value_expr
141 #define LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE gfc_omp_private_debug_clause
142 #define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \
143 gfc_omp_firstprivatize_type_sizes
144 #define LANG_HOOKS_BUILTIN_FUNCTION gfc_builtin_function
145 #define LANG_HOOKS_GET_ARRAY_DESCR_INFO gfc_get_array_descr_info
147 const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
149 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
150 that have names. Here so we can clear out their names' definitions
151 at the end of the function. */
153 /* Tree code classes. */
155 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
157 const enum tree_code_class tree_code_type[] = {
158 #include "tree.def"
160 #undef DEFTREECODE
162 /* Table indexed by tree code giving number of expression
163 operands beyond the fixed part of the node structure.
164 Not used for types or decls. */
166 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
168 const unsigned char tree_code_length[] = {
169 #include "tree.def"
171 #undef DEFTREECODE
173 /* Names of tree components.
174 Used for printing out the tree and error messages. */
175 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
177 const char *const tree_code_name[] = {
178 #include "tree.def"
180 #undef DEFTREECODE
183 #define NULL_BINDING_LEVEL (struct binding_level *) NULL
185 /* A chain of binding_level structures awaiting reuse. */
187 static GTY(()) struct binding_level *free_binding_level;
189 /* The elements of `ridpointers' are identifier nodes
190 for the reserved type names and storage classes.
191 It is indexed by a RID_... value. */
192 tree *ridpointers = NULL;
194 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
195 or validate its data type for an `if' or `while' statement or ?..: exp.
197 This preparation consists of taking the ordinary
198 representation of an expression expr and producing a valid tree
199 boolean expression describing whether expr is nonzero. We could
200 simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1),
201 but we optimize comparisons, &&, ||, and !.
203 The resulting type should always be `boolean_type_node'.
204 This is much simpler than the corresponding C version because we have a
205 distinct boolean type. */
207 tree
208 gfc_truthvalue_conversion (tree expr)
210 switch (TREE_CODE (TREE_TYPE (expr)))
212 case BOOLEAN_TYPE:
213 if (TREE_TYPE (expr) == boolean_type_node)
214 return expr;
215 else if (COMPARISON_CLASS_P (expr))
217 TREE_TYPE (expr) = boolean_type_node;
218 return expr;
220 else if (TREE_CODE (expr) == NOP_EXPR)
221 return fold_build1 (NOP_EXPR,
222 boolean_type_node, TREE_OPERAND (expr, 0));
223 else
224 return fold_build1 (NOP_EXPR, boolean_type_node, expr);
226 case INTEGER_TYPE:
227 if (TREE_CODE (expr) == INTEGER_CST)
228 return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
229 else
230 return fold_build2 (NE_EXPR, boolean_type_node, expr,
231 build_int_cst (TREE_TYPE (expr), 0));
233 default:
234 internal_error ("Unexpected type in truthvalue_conversion");
239 static void
240 gfc_create_decls (void)
242 /* GCC builtins. */
243 gfc_init_builtin_functions ();
245 /* Runtime/IO library functions. */
246 gfc_build_builtin_function_decls ();
248 gfc_init_constants ();
252 static void
253 gfc_be_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
255 int errors;
256 int warnings;
258 gfc_create_decls ();
259 gfc_parse_file ();
260 gfc_generate_constructors ();
262 cgraph_finalize_compilation_unit ();
263 cgraph_optimize ();
265 /* Tell the frontent about any errors. */
266 gfc_get_errors (&warnings, &errors);
267 errorcount += errors;
268 warningcount += warnings;
270 clear_binding_stack ();
274 /* Initialize everything. */
276 static bool
277 gfc_init (void)
279 linemap_add (line_table, LC_ENTER, false, gfc_source_file, 1);
280 linemap_add (line_table, LC_RENAME, false, "<built-in>", 0);
282 /* First initialize the backend. */
283 gfc_init_decl_processing ();
284 gfc_static_ctors = NULL_TREE;
286 /* Then the frontend. */
287 gfc_init_1 ();
289 if (gfc_new_file () != SUCCESS)
290 fatal_error ("can't open input file: %s", gfc_source_file);
291 return true;
295 static void
296 gfc_finish (void)
298 gfc_done_1 ();
299 gfc_release_include_path ();
300 return;
303 static void
304 gfc_print_identifier (FILE * file ATTRIBUTE_UNUSED,
305 tree node ATTRIBUTE_UNUSED,
306 int indent ATTRIBUTE_UNUSED)
308 return;
312 /* These functions and variables deal with binding contours. We only
313 need these functions for the list of PARM_DECLs, but we leave the
314 functions more general; these are a simplified version of the
315 functions from GNAT. */
317 /* For each binding contour we allocate a binding_level structure which
318 records the entities defined or declared in that contour. Contours
319 include:
321 the global one
322 one for each subprogram definition
323 one for each compound statement (declare block)
325 Binding contours are used to create GCC tree BLOCK nodes. */
327 struct binding_level
328 GTY(())
330 /* A chain of ..._DECL nodes for all variables, constants, functions,
331 parameters and type declarations. These ..._DECL nodes are chained
332 through the TREE_CHAIN field. Note that these ..._DECL nodes are stored
333 in the reverse of the order supplied to be compatible with the
334 back-end. */
335 tree names;
336 /* For each level (except the global one), a chain of BLOCK nodes for all
337 the levels that were entered and exited one level down from this one. */
338 tree blocks;
339 /* The binding level containing this one (the enclosing binding level). */
340 struct binding_level *level_chain;
343 /* The binding level currently in effect. */
344 static GTY(()) struct binding_level *current_binding_level = NULL;
346 /* The outermost binding level. This binding level is created when the
347 compiler is started and it will exist through the entire compilation. */
348 static GTY(()) struct binding_level *global_binding_level;
350 /* Binding level structures are initialized by copying this one. */
351 static struct binding_level clear_binding_level = { NULL, NULL, NULL };
354 /* Return nonzero if we are currently in the global binding level. */
357 global_bindings_p (void)
359 return current_binding_level == global_binding_level ? -1 : 0;
362 tree
363 getdecls (void)
365 return current_binding_level->names;
368 /* Enter a new binding level. The input parameter is ignored, but has to be
369 specified for back-end compatibility. */
371 void
372 pushlevel (int ignore ATTRIBUTE_UNUSED)
374 struct binding_level *newlevel
375 = (struct binding_level *) ggc_alloc (sizeof (struct binding_level));
377 *newlevel = clear_binding_level;
379 /* Add this level to the front of the chain (stack) of levels that are
380 active. */
381 newlevel->level_chain = current_binding_level;
382 current_binding_level = newlevel;
385 /* Exit a binding level.
386 Pop the level off, and restore the state of the identifier-decl mappings
387 that were in effect when this level was entered.
389 If KEEP is nonzero, this level had explicit declarations, so
390 and create a "block" (a BLOCK node) for the level
391 to record its declarations and subblocks for symbol table output.
393 If FUNCTIONBODY is nonzero, this level is the body of a function,
394 so create a block as if KEEP were set and also clear out all
395 label names.
397 If REVERSE is nonzero, reverse the order of decls before putting
398 them into the BLOCK. */
400 tree
401 poplevel (int keep, int reverse, int functionbody)
403 /* Points to a BLOCK tree node. This is the BLOCK node constructed for the
404 binding level that we are about to exit and which is returned by this
405 routine. */
406 tree block_node = NULL_TREE;
407 tree decl_chain;
408 tree subblock_chain = current_binding_level->blocks;
409 tree subblock_node;
411 /* Reverse the list of XXXX_DECL nodes if desired. Note that the ..._DECL
412 nodes chained through the `names' field of current_binding_level are in
413 reverse order except for PARM_DECL node, which are explicitly stored in
414 the right order. */
415 decl_chain = (reverse) ? nreverse (current_binding_level->names)
416 : current_binding_level->names;
418 /* If there were any declarations in the current binding level, or if this
419 binding level is a function body, or if there are any nested blocks then
420 create a BLOCK node to record them for the life of this function. */
421 if (keep || functionbody)
422 block_node = build_block (keep ? decl_chain : 0, subblock_chain, 0, 0);
424 /* Record the BLOCK node just built as the subblock its enclosing scope. */
425 for (subblock_node = subblock_chain; subblock_node;
426 subblock_node = TREE_CHAIN (subblock_node))
427 BLOCK_SUPERCONTEXT (subblock_node) = block_node;
429 /* Clear out the meanings of the local variables of this level. */
431 for (subblock_node = decl_chain; subblock_node;
432 subblock_node = TREE_CHAIN (subblock_node))
433 if (DECL_NAME (subblock_node) != 0)
434 /* If the identifier was used or addressed via a local extern decl,
435 don't forget that fact. */
436 if (DECL_EXTERNAL (subblock_node))
438 if (TREE_USED (subblock_node))
439 TREE_USED (DECL_NAME (subblock_node)) = 1;
440 if (TREE_ADDRESSABLE (subblock_node))
441 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (subblock_node)) = 1;
444 /* Pop the current level. */
445 current_binding_level = current_binding_level->level_chain;
447 if (functionbody)
449 /* This is the top level block of a function. The ..._DECL chain stored
450 in BLOCK_VARS are the function's parameters (PARM_DECL nodes). Don't
451 leave them in the BLOCK because they are found in the FUNCTION_DECL
452 instead. */
453 DECL_INITIAL (current_function_decl) = block_node;
454 BLOCK_VARS (block_node) = 0;
456 else if (block_node)
458 current_binding_level->blocks
459 = chainon (current_binding_level->blocks, block_node);
462 /* If we did not make a block for the level just exited, any blocks made for
463 inner levels (since they cannot be recorded as subblocks in that level)
464 must be carried forward so they will later become subblocks of something
465 else. */
466 else if (subblock_chain)
467 current_binding_level->blocks
468 = chainon (current_binding_level->blocks, subblock_chain);
469 if (block_node)
470 TREE_USED (block_node) = 1;
472 return block_node;
476 /* Insert BLOCK at the end of the list of subblocks of the
477 current binding level. This is used when a BIND_EXPR is expanded,
478 to handle the BLOCK node inside the BIND_EXPR. */
480 void
481 insert_block (tree block)
483 TREE_USED (block) = 1;
484 current_binding_level->blocks
485 = chainon (current_binding_level->blocks, block);
489 /* Records a ..._DECL node DECL as belonging to the current lexical scope.
490 Returns the ..._DECL node. */
492 tree
493 pushdecl (tree decl)
495 /* External objects aren't nested, other objects may be. */
496 if ((DECL_EXTERNAL (decl)) || (decl == current_function_decl))
497 DECL_CONTEXT (decl) = 0;
498 else
499 DECL_CONTEXT (decl) = current_function_decl;
501 /* Put the declaration on the list. The list of declarations is in reverse
502 order. The list will be reversed later if necessary. This needs to be
503 this way for compatibility with the back-end. */
505 TREE_CHAIN (decl) = current_binding_level->names;
506 current_binding_level->names = decl;
508 /* For the declaration of a type, set its name if it is not already set. */
510 if (TREE_CODE (decl) == TYPE_DECL && TYPE_NAME (TREE_TYPE (decl)) == 0)
512 if (DECL_SOURCE_LINE (decl) == 0)
513 TYPE_NAME (TREE_TYPE (decl)) = decl;
514 else
515 TYPE_NAME (TREE_TYPE (decl)) = DECL_NAME (decl);
518 return decl;
522 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL. */
524 tree
525 pushdecl_top_level (tree x)
527 tree t;
528 struct binding_level *b = current_binding_level;
530 current_binding_level = global_binding_level;
531 t = pushdecl (x);
532 current_binding_level = b;
533 return t;
537 /* Clear the binding stack. */
538 static void
539 clear_binding_stack (void)
541 while (!global_bindings_p ())
542 poplevel (0, 0, 0);
546 #ifndef CHAR_TYPE_SIZE
547 #define CHAR_TYPE_SIZE BITS_PER_UNIT
548 #endif
550 #ifndef INT_TYPE_SIZE
551 #define INT_TYPE_SIZE BITS_PER_WORD
552 #endif
554 #undef SIZE_TYPE
555 #define SIZE_TYPE "long unsigned int"
557 /* Create tree nodes for the basic scalar types of Fortran 95,
558 and some nodes representing standard constants (0, 1, (void *) 0).
559 Initialize the global binding level.
560 Make definitions for built-in primitive functions. */
561 static void
562 gfc_init_decl_processing (void)
564 current_function_decl = NULL;
565 current_binding_level = NULL_BINDING_LEVEL;
566 free_binding_level = NULL_BINDING_LEVEL;
568 /* Make the binding_level structure for global names. We move all
569 variables that are in a COMMON block to this binding level. */
570 pushlevel (0);
571 global_binding_level = current_binding_level;
573 /* Build common tree nodes. char_type_node is unsigned because we
574 only use it for actual characters, not for INTEGER(1). Also, we
575 want double_type_node to actually have double precision. */
576 build_common_tree_nodes (false, false);
577 /* x86_64 minw32 has a sizetype of "unsigned long long", most other hosts
578 have a sizetype of "unsigned long". Therefore choose the correct size
579 in mostly target independent way. */
580 if (TYPE_MODE (long_unsigned_type_node) == Pmode)
581 set_sizetype (long_unsigned_type_node);
582 else if (TYPE_MODE (long_long_unsigned_type_node) == Pmode)
583 set_sizetype (long_long_unsigned_type_node);
584 else
585 set_sizetype (long_unsigned_type_node);
586 build_common_tree_nodes_2 (0);
587 void_list_node = build_tree_list (NULL_TREE, void_type_node);
589 /* Set up F95 type nodes. */
590 gfc_init_kinds ();
591 gfc_init_types ();
595 /* Mark EXP saying that we need to be able to take the
596 address of it; it should not be allocated in a register.
597 In Fortran 95 this is only the case for variables with
598 the TARGET attribute, but we implement it here for a
599 likely future Cray pointer extension.
600 Value is 1 if successful. */
601 /* TODO: Check/fix mark_addressable. */
603 bool
604 gfc_mark_addressable (tree exp)
606 register tree x = exp;
607 while (1)
608 switch (TREE_CODE (x))
610 case COMPONENT_REF:
611 case ADDR_EXPR:
612 case ARRAY_REF:
613 case REALPART_EXPR:
614 case IMAGPART_EXPR:
615 x = TREE_OPERAND (x, 0);
616 break;
618 case CONSTRUCTOR:
619 TREE_ADDRESSABLE (x) = 1;
620 return true;
622 case VAR_DECL:
623 case CONST_DECL:
624 case PARM_DECL:
625 case RESULT_DECL:
626 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x) && DECL_NONLOCAL (x))
628 if (TREE_PUBLIC (x))
630 error ("global register variable %qs used in nested function",
631 IDENTIFIER_POINTER (DECL_NAME (x)));
632 return false;
634 pedwarn ("register variable %qs used in nested function",
635 IDENTIFIER_POINTER (DECL_NAME (x)));
637 else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
639 if (TREE_PUBLIC (x))
641 error ("address of global register variable %qs requested",
642 IDENTIFIER_POINTER (DECL_NAME (x)));
643 return true;
646 #if 0
647 /* If we are making this addressable due to its having
648 volatile components, give a different error message. Also
649 handle the case of an unnamed parameter by not trying
650 to give the name. */
652 else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x)))
654 error ("cannot put object with volatile field into register");
655 return false;
657 #endif
659 pedwarn ("address of register variable %qs requested",
660 IDENTIFIER_POINTER (DECL_NAME (x)));
663 /* drops in */
664 case FUNCTION_DECL:
665 TREE_ADDRESSABLE (x) = 1;
667 default:
668 return true;
673 /* Return the typed-based alias set for T, which may be an expression
674 or a type. Return -1 if we don't do anything special. */
676 static alias_set_type
677 gfc_get_alias_set (tree t)
679 tree u;
681 /* Permit type-punning when accessing an EQUIVALENCEd variable or
682 mixed type entry master's return value. */
683 for (u = t; handled_component_p (u); u = TREE_OPERAND (u, 0))
684 if (TREE_CODE (u) == COMPONENT_REF
685 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
686 return 0;
688 return -1;
692 /* press the big red button - garbage (ggc) collection is on */
694 int ggc_p = 1;
696 /* Builtin function initialization. */
698 tree
699 gfc_builtin_function (tree decl)
701 make_decl_rtl (decl);
702 pushdecl (decl);
703 return decl;
707 static void
708 gfc_define_builtin (const char *name,
709 tree type,
710 int code,
711 const char *library_name,
712 bool const_p)
714 tree decl;
716 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
717 library_name, NULL_TREE);
718 if (const_p)
719 TREE_READONLY (decl) = 1;
721 built_in_decls[code] = decl;
722 implicit_built_in_decls[code] = decl;
726 #define DO_DEFINE_MATH_BUILTIN(code, name, argtype, tbase) \
727 gfc_define_builtin ("__builtin_" name "l", tbase##longdouble[argtype], \
728 BUILT_IN_ ## code ## L, name "l", true); \
729 gfc_define_builtin ("__builtin_" name, tbase##double[argtype], \
730 BUILT_IN_ ## code, name, true); \
731 gfc_define_builtin ("__builtin_" name "f", tbase##float[argtype], \
732 BUILT_IN_ ## code ## F, name "f", true);
734 #define DEFINE_MATH_BUILTIN(code, name, argtype) \
735 DO_DEFINE_MATH_BUILTIN (code, name, argtype, mfunc_)
737 #define DEFINE_MATH_BUILTIN_C(code, name, argtype) \
738 DO_DEFINE_MATH_BUILTIN (code, name, argtype, mfunc_) \
739 DO_DEFINE_MATH_BUILTIN (C##code, "c" name, argtype, mfunc_c)
742 /* Create function types for builtin functions. */
744 static void
745 build_builtin_fntypes (tree *fntype, tree type)
747 tree tmp;
749 /* type (*) (type) */
750 tmp = tree_cons (NULL_TREE, type, void_list_node);
751 fntype[0] = build_function_type (type, tmp);
752 /* type (*) (type, type) */
753 tmp = tree_cons (NULL_TREE, type, tmp);
754 fntype[1] = build_function_type (type, tmp);
755 /* type (*) (int, type) */
756 tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
757 tmp = tree_cons (NULL_TREE, type, tmp);
758 fntype[2] = build_function_type (type, tmp);
759 /* type (*) (void) */
760 fntype[3] = build_function_type (type, void_list_node);
761 /* type (*) (type, &int) */
762 tmp = tree_cons (NULL_TREE, type, void_list_node);
763 tmp = tree_cons (NULL_TREE, build_pointer_type (integer_type_node), tmp);
764 fntype[4] = build_function_type (type, tmp);
765 /* type (*) (type, int) */
766 tmp = tree_cons (NULL_TREE, type, void_list_node);
767 tmp = tree_cons (NULL_TREE, integer_type_node, tmp);
768 fntype[5] = build_function_type (type, tmp);
772 static tree
773 builtin_type_for_size (int size, bool unsignedp)
775 tree type = lang_hooks.types.type_for_size (size, unsignedp);
776 return type ? type : error_mark_node;
779 /* Initialization of builtin function nodes. */
781 static void
782 gfc_init_builtin_functions (void)
784 enum builtin_type
786 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
787 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
788 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
789 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
790 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
791 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
792 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
793 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
794 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
795 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
796 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
797 #include "types.def"
798 #undef DEF_PRIMITIVE_TYPE
799 #undef DEF_FUNCTION_TYPE_0
800 #undef DEF_FUNCTION_TYPE_1
801 #undef DEF_FUNCTION_TYPE_2
802 #undef DEF_FUNCTION_TYPE_3
803 #undef DEF_FUNCTION_TYPE_4
804 #undef DEF_FUNCTION_TYPE_5
805 #undef DEF_FUNCTION_TYPE_6
806 #undef DEF_FUNCTION_TYPE_7
807 #undef DEF_FUNCTION_TYPE_VAR_0
808 #undef DEF_POINTER_TYPE
809 BT_LAST
811 typedef enum builtin_type builtin_type;
812 enum
814 /* So far we need just these 2 attribute types. */
815 ATTR_NOTHROW_LIST,
816 ATTR_CONST_NOTHROW_LIST
819 tree mfunc_float[6];
820 tree mfunc_double[6];
821 tree mfunc_longdouble[6];
822 tree mfunc_cfloat[6];
823 tree mfunc_cdouble[6];
824 tree mfunc_clongdouble[6];
825 tree func_cfloat_float, func_float_cfloat;
826 tree func_cdouble_double, func_double_cdouble;
827 tree func_clongdouble_longdouble, func_longdouble_clongdouble;
828 tree func_float_floatp_floatp;
829 tree func_double_doublep_doublep;
830 tree func_longdouble_longdoublep_longdoublep;
831 tree ftype, ptype;
832 tree tmp, type;
833 tree builtin_types[(int) BT_LAST + 1];
835 build_builtin_fntypes (mfunc_float, float_type_node);
836 build_builtin_fntypes (mfunc_double, double_type_node);
837 build_builtin_fntypes (mfunc_longdouble, long_double_type_node);
838 build_builtin_fntypes (mfunc_cfloat, complex_float_type_node);
839 build_builtin_fntypes (mfunc_cdouble, complex_double_type_node);
840 build_builtin_fntypes (mfunc_clongdouble, complex_long_double_type_node);
842 tmp = tree_cons (NULL_TREE, complex_float_type_node, void_list_node);
843 func_cfloat_float = build_function_type (float_type_node, tmp);
845 tmp = tree_cons (NULL_TREE, float_type_node, void_list_node);
846 func_float_cfloat = build_function_type (complex_float_type_node, tmp);
848 tmp = tree_cons (NULL_TREE, complex_double_type_node, void_list_node);
849 func_cdouble_double = build_function_type (double_type_node, tmp);
851 tmp = tree_cons (NULL_TREE, double_type_node, void_list_node);
852 func_double_cdouble = build_function_type (complex_double_type_node, tmp);
854 tmp = tree_cons (NULL_TREE, complex_long_double_type_node, void_list_node);
855 func_clongdouble_longdouble =
856 build_function_type (long_double_type_node, tmp);
858 tmp = tree_cons (NULL_TREE, long_double_type_node, void_list_node);
859 func_longdouble_clongdouble =
860 build_function_type (complex_long_double_type_node, tmp);
862 ptype = build_pointer_type (float_type_node);
863 tmp = tree_cons (NULL_TREE, float_type_node,
864 tree_cons (NULL_TREE, ptype,
865 build_tree_list (NULL_TREE, ptype)));
866 func_float_floatp_floatp =
867 build_function_type (void_type_node, tmp);
869 ptype = build_pointer_type (double_type_node);
870 tmp = tree_cons (NULL_TREE, double_type_node,
871 tree_cons (NULL_TREE, ptype,
872 build_tree_list (NULL_TREE, ptype)));
873 func_double_doublep_doublep =
874 build_function_type (void_type_node, tmp);
876 ptype = build_pointer_type (long_double_type_node);
877 tmp = tree_cons (NULL_TREE, long_double_type_node,
878 tree_cons (NULL_TREE, ptype,
879 build_tree_list (NULL_TREE, ptype)));
880 func_longdouble_longdoublep_longdoublep =
881 build_function_type (void_type_node, tmp);
883 #include "mathbuiltins.def"
885 /* We define these separately as the fortran versions have different
886 semantics (they return an integer type) */
887 gfc_define_builtin ("__builtin_roundl", mfunc_longdouble[0],
888 BUILT_IN_ROUNDL, "roundl", true);
889 gfc_define_builtin ("__builtin_round", mfunc_double[0],
890 BUILT_IN_ROUND, "round", true);
891 gfc_define_builtin ("__builtin_roundf", mfunc_float[0],
892 BUILT_IN_ROUNDF, "roundf", true);
894 gfc_define_builtin ("__builtin_truncl", mfunc_longdouble[0],
895 BUILT_IN_TRUNCL, "truncl", true);
896 gfc_define_builtin ("__builtin_trunc", mfunc_double[0],
897 BUILT_IN_TRUNC, "trunc", true);
898 gfc_define_builtin ("__builtin_truncf", mfunc_float[0],
899 BUILT_IN_TRUNCF, "truncf", true);
901 gfc_define_builtin ("__builtin_cabsl", func_clongdouble_longdouble,
902 BUILT_IN_CABSL, "cabsl", true);
903 gfc_define_builtin ("__builtin_cabs", func_cdouble_double,
904 BUILT_IN_CABS, "cabs", true);
905 gfc_define_builtin ("__builtin_cabsf", func_cfloat_float,
906 BUILT_IN_CABSF, "cabsf", true);
908 gfc_define_builtin ("__builtin_copysignl", mfunc_longdouble[1],
909 BUILT_IN_COPYSIGNL, "copysignl", true);
910 gfc_define_builtin ("__builtin_copysign", mfunc_double[1],
911 BUILT_IN_COPYSIGN, "copysign", true);
912 gfc_define_builtin ("__builtin_copysignf", mfunc_float[1],
913 BUILT_IN_COPYSIGNF, "copysignf", true);
915 gfc_define_builtin ("__builtin_nextafterl", mfunc_longdouble[1],
916 BUILT_IN_NEXTAFTERL, "nextafterl", true);
917 gfc_define_builtin ("__builtin_nextafter", mfunc_double[1],
918 BUILT_IN_NEXTAFTER, "nextafter", true);
919 gfc_define_builtin ("__builtin_nextafterf", mfunc_float[1],
920 BUILT_IN_NEXTAFTERF, "nextafterf", true);
922 gfc_define_builtin ("__builtin_frexpl", mfunc_longdouble[4],
923 BUILT_IN_FREXPL, "frexpl", false);
924 gfc_define_builtin ("__builtin_frexp", mfunc_double[4],
925 BUILT_IN_FREXP, "frexp", false);
926 gfc_define_builtin ("__builtin_frexpf", mfunc_float[4],
927 BUILT_IN_FREXPF, "frexpf", false);
929 gfc_define_builtin ("__builtin_fabsl", mfunc_longdouble[0],
930 BUILT_IN_FABSL, "fabsl", true);
931 gfc_define_builtin ("__builtin_fabs", mfunc_double[0],
932 BUILT_IN_FABS, "fabs", true);
933 gfc_define_builtin ("__builtin_fabsf", mfunc_float[0],
934 BUILT_IN_FABSF, "fabsf", true);
936 gfc_define_builtin ("__builtin_scalbnl", mfunc_longdouble[5],
937 BUILT_IN_SCALBNL, "scalbnl", true);
938 gfc_define_builtin ("__builtin_scalbn", mfunc_double[5],
939 BUILT_IN_SCALBN, "scalbn", true);
940 gfc_define_builtin ("__builtin_scalbnf", mfunc_float[5],
941 BUILT_IN_SCALBNF, "scalbnf", true);
943 gfc_define_builtin ("__builtin_fmodl", mfunc_longdouble[1],
944 BUILT_IN_FMODL, "fmodl", true);
945 gfc_define_builtin ("__builtin_fmod", mfunc_double[1],
946 BUILT_IN_FMOD, "fmod", true);
947 gfc_define_builtin ("__builtin_fmodf", mfunc_float[1],
948 BUILT_IN_FMODF, "fmodf", true);
950 gfc_define_builtin ("__builtin_infl", mfunc_longdouble[3],
951 BUILT_IN_INFL, "__builtin_infl", true);
952 gfc_define_builtin ("__builtin_inf", mfunc_double[3],
953 BUILT_IN_INF, "__builtin_inf", true);
954 gfc_define_builtin ("__builtin_inff", mfunc_float[3],
955 BUILT_IN_INFF, "__builtin_inff", true);
957 /* lround{f,,l} and llround{f,,l} */
958 type = tree_cons (NULL_TREE, float_type_node, void_list_node);
959 tmp = build_function_type (long_integer_type_node, type);
960 gfc_define_builtin ("__builtin_lroundf", tmp, BUILT_IN_LROUNDF,
961 "lroundf", true);
962 tmp = build_function_type (long_long_integer_type_node, type);
963 gfc_define_builtin ("__builtin_llroundf", tmp, BUILT_IN_LLROUNDF,
964 "llroundf", true);
966 type = tree_cons (NULL_TREE, double_type_node, void_list_node);
967 tmp = build_function_type (long_integer_type_node, type);
968 gfc_define_builtin ("__builtin_lround", tmp, BUILT_IN_LROUND,
969 "lround", true);
970 tmp = build_function_type (long_long_integer_type_node, type);
971 gfc_define_builtin ("__builtin_llround", tmp, BUILT_IN_LLROUND,
972 "llround", true);
974 type = tree_cons (NULL_TREE, long_double_type_node, void_list_node);
975 tmp = build_function_type (long_integer_type_node, type);
976 gfc_define_builtin ("__builtin_lroundl", tmp, BUILT_IN_LROUNDL,
977 "lroundl", true);
978 tmp = build_function_type (long_long_integer_type_node, type);
979 gfc_define_builtin ("__builtin_llroundl", tmp, BUILT_IN_LLROUNDL,
980 "llroundl", true);
982 /* These are used to implement the ** operator. */
983 gfc_define_builtin ("__builtin_powl", mfunc_longdouble[1],
984 BUILT_IN_POWL, "powl", true);
985 gfc_define_builtin ("__builtin_pow", mfunc_double[1],
986 BUILT_IN_POW, "pow", true);
987 gfc_define_builtin ("__builtin_powf", mfunc_float[1],
988 BUILT_IN_POWF, "powf", true);
989 gfc_define_builtin ("__builtin_cpowl", mfunc_clongdouble[1],
990 BUILT_IN_CPOWL, "cpowl", true);
991 gfc_define_builtin ("__builtin_cpow", mfunc_cdouble[1],
992 BUILT_IN_CPOW, "cpow", true);
993 gfc_define_builtin ("__builtin_cpowf", mfunc_cfloat[1],
994 BUILT_IN_CPOWF, "cpowf", true);
995 gfc_define_builtin ("__builtin_powil", mfunc_longdouble[2],
996 BUILT_IN_POWIL, "powil", true);
997 gfc_define_builtin ("__builtin_powi", mfunc_double[2],
998 BUILT_IN_POWI, "powi", true);
999 gfc_define_builtin ("__builtin_powif", mfunc_float[2],
1000 BUILT_IN_POWIF, "powif", true);
1003 if (TARGET_C99_FUNCTIONS)
1005 gfc_define_builtin ("__builtin_cbrtl", mfunc_longdouble[0],
1006 BUILT_IN_CBRTL, "cbrtl", true);
1007 gfc_define_builtin ("__builtin_cbrt", mfunc_double[0],
1008 BUILT_IN_CBRT, "cbrt", true);
1009 gfc_define_builtin ("__builtin_cbrtf", mfunc_float[0],
1010 BUILT_IN_CBRTF, "cbrtf", true);
1011 gfc_define_builtin ("__builtin_cexpil", func_longdouble_clongdouble,
1012 BUILT_IN_CEXPIL, "cexpil", true);
1013 gfc_define_builtin ("__builtin_cexpi", func_double_cdouble,
1014 BUILT_IN_CEXPI, "cexpi", true);
1015 gfc_define_builtin ("__builtin_cexpif", func_float_cfloat,
1016 BUILT_IN_CEXPIF, "cexpif", true);
1019 if (TARGET_HAS_SINCOS)
1021 gfc_define_builtin ("__builtin_sincosl",
1022 func_longdouble_longdoublep_longdoublep,
1023 BUILT_IN_SINCOSL, "sincosl", false);
1024 gfc_define_builtin ("__builtin_sincos", func_double_doublep_doublep,
1025 BUILT_IN_SINCOS, "sincos", false);
1026 gfc_define_builtin ("__builtin_sincosf", func_float_floatp_floatp,
1027 BUILT_IN_SINCOSF, "sincosf", false);
1030 /* Other builtin functions we use. */
1032 tmp = tree_cons (NULL_TREE, long_integer_type_node, void_list_node);
1033 tmp = tree_cons (NULL_TREE, long_integer_type_node, tmp);
1034 ftype = build_function_type (long_integer_type_node, tmp);
1035 gfc_define_builtin ("__builtin_expect", ftype, BUILT_IN_EXPECT,
1036 "__builtin_expect", true);
1038 tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
1039 ftype = build_function_type (void_type_node, tmp);
1040 gfc_define_builtin ("__builtin_free", ftype, BUILT_IN_FREE,
1041 "free", false);
1043 tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
1044 ftype = build_function_type (pvoid_type_node, tmp);
1045 gfc_define_builtin ("__builtin_malloc", ftype, BUILT_IN_MALLOC,
1046 "malloc", false);
1047 DECL_IS_MALLOC (built_in_decls[BUILT_IN_MALLOC]) = 1;
1049 tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
1050 tmp = tree_cons (NULL_TREE, size_type_node, tmp);
1051 ftype = build_function_type (pvoid_type_node, tmp);
1052 gfc_define_builtin ("__builtin_realloc", ftype, BUILT_IN_REALLOC,
1053 "realloc", false);
1055 tmp = tree_cons (NULL_TREE, void_type_node, void_list_node);
1056 ftype = build_function_type (integer_type_node, tmp);
1057 gfc_define_builtin ("__builtin_isnan", ftype, BUILT_IN_ISNAN,
1058 "__builtin_isnan", true);
1060 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
1061 builtin_types[(int) ENUM] = VALUE;
1062 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
1063 builtin_types[(int) ENUM] \
1064 = build_function_type (builtin_types[(int) RETURN], \
1065 void_list_node);
1066 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
1067 builtin_types[(int) ENUM] \
1068 = build_function_type (builtin_types[(int) RETURN], \
1069 tree_cons (NULL_TREE, \
1070 builtin_types[(int) ARG1], \
1071 void_list_node));
1072 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
1073 builtin_types[(int) ENUM] \
1074 = build_function_type \
1075 (builtin_types[(int) RETURN], \
1076 tree_cons (NULL_TREE, \
1077 builtin_types[(int) ARG1], \
1078 tree_cons (NULL_TREE, \
1079 builtin_types[(int) ARG2], \
1080 void_list_node)));
1081 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
1082 builtin_types[(int) ENUM] \
1083 = build_function_type \
1084 (builtin_types[(int) RETURN], \
1085 tree_cons (NULL_TREE, \
1086 builtin_types[(int) ARG1], \
1087 tree_cons (NULL_TREE, \
1088 builtin_types[(int) ARG2], \
1089 tree_cons (NULL_TREE, \
1090 builtin_types[(int) ARG3], \
1091 void_list_node))));
1092 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
1093 builtin_types[(int) ENUM] \
1094 = build_function_type \
1095 (builtin_types[(int) RETURN], \
1096 tree_cons (NULL_TREE, \
1097 builtin_types[(int) ARG1], \
1098 tree_cons (NULL_TREE, \
1099 builtin_types[(int) ARG2], \
1100 tree_cons \
1101 (NULL_TREE, \
1102 builtin_types[(int) ARG3], \
1103 tree_cons (NULL_TREE, \
1104 builtin_types[(int) ARG4], \
1105 void_list_node)))));
1106 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
1107 builtin_types[(int) ENUM] \
1108 = build_function_type \
1109 (builtin_types[(int) RETURN], \
1110 tree_cons (NULL_TREE, \
1111 builtin_types[(int) ARG1], \
1112 tree_cons (NULL_TREE, \
1113 builtin_types[(int) ARG2], \
1114 tree_cons \
1115 (NULL_TREE, \
1116 builtin_types[(int) ARG3], \
1117 tree_cons (NULL_TREE, \
1118 builtin_types[(int) ARG4], \
1119 tree_cons (NULL_TREE, \
1120 builtin_types[(int) ARG5],\
1121 void_list_node))))));
1122 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
1123 ARG6) \
1124 builtin_types[(int) ENUM] \
1125 = build_function_type \
1126 (builtin_types[(int) RETURN], \
1127 tree_cons (NULL_TREE, \
1128 builtin_types[(int) ARG1], \
1129 tree_cons (NULL_TREE, \
1130 builtin_types[(int) ARG2], \
1131 tree_cons \
1132 (NULL_TREE, \
1133 builtin_types[(int) ARG3], \
1134 tree_cons \
1135 (NULL_TREE, \
1136 builtin_types[(int) ARG4], \
1137 tree_cons (NULL_TREE, \
1138 builtin_types[(int) ARG5], \
1139 tree_cons (NULL_TREE, \
1140 builtin_types[(int) ARG6],\
1141 void_list_node)))))));
1142 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
1143 ARG6, ARG7) \
1144 builtin_types[(int) ENUM] \
1145 = build_function_type \
1146 (builtin_types[(int) RETURN], \
1147 tree_cons (NULL_TREE, \
1148 builtin_types[(int) ARG1], \
1149 tree_cons (NULL_TREE, \
1150 builtin_types[(int) ARG2], \
1151 tree_cons \
1152 (NULL_TREE, \
1153 builtin_types[(int) ARG3], \
1154 tree_cons \
1155 (NULL_TREE, \
1156 builtin_types[(int) ARG4], \
1157 tree_cons (NULL_TREE, \
1158 builtin_types[(int) ARG5], \
1159 tree_cons (NULL_TREE, \
1160 builtin_types[(int) ARG6],\
1161 tree_cons (NULL_TREE, \
1162 builtin_types[(int) ARG6], \
1163 void_list_node))))))));
1164 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
1165 builtin_types[(int) ENUM] \
1166 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
1167 #define DEF_POINTER_TYPE(ENUM, TYPE) \
1168 builtin_types[(int) ENUM] \
1169 = build_pointer_type (builtin_types[(int) TYPE]);
1170 #include "types.def"
1171 #undef DEF_PRIMITIVE_TYPE
1172 #undef DEF_FUNCTION_TYPE_1
1173 #undef DEF_FUNCTION_TYPE_2
1174 #undef DEF_FUNCTION_TYPE_3
1175 #undef DEF_FUNCTION_TYPE_4
1176 #undef DEF_FUNCTION_TYPE_5
1177 #undef DEF_FUNCTION_TYPE_6
1178 #undef DEF_FUNCTION_TYPE_VAR_0
1179 #undef DEF_POINTER_TYPE
1180 builtin_types[(int) BT_LAST] = NULL_TREE;
1182 /* Initialize synchronization builtins. */
1183 #undef DEF_SYNC_BUILTIN
1184 #define DEF_SYNC_BUILTIN(code, name, type, attr) \
1185 gfc_define_builtin (name, builtin_types[type], code, name, \
1186 attr == ATTR_CONST_NOTHROW_LIST);
1187 #include "../sync-builtins.def"
1188 #undef DEF_SYNC_BUILTIN
1190 if (gfc_option.flag_openmp || flag_tree_parallelize_loops)
1192 #undef DEF_GOMP_BUILTIN
1193 #define DEF_GOMP_BUILTIN(code, name, type, attr) \
1194 gfc_define_builtin ("__builtin_" name, builtin_types[type], \
1195 code, name, attr == ATTR_CONST_NOTHROW_LIST);
1196 #include "../omp-builtins.def"
1197 #undef DEF_GOMP_BUILTIN
1200 gfc_define_builtin ("__builtin_trap", builtin_types[BT_FN_VOID],
1201 BUILT_IN_TRAP, NULL, false);
1202 TREE_THIS_VOLATILE (built_in_decls[BUILT_IN_TRAP]) = 1;
1204 gfc_define_builtin ("__emutls_get_address",
1205 builtin_types[BT_FN_PTR_PTR], BUILT_IN_EMUTLS_GET_ADDRESS,
1206 "__emutls_get_address", true);
1207 gfc_define_builtin ("__emutls_register_common",
1208 builtin_types[BT_FN_VOID_PTR_WORD_WORD_PTR],
1209 BUILT_IN_EMUTLS_REGISTER_COMMON,
1210 "__emutls_register_common", false);
1212 build_common_builtin_nodes ();
1213 targetm.init_builtins ();
1216 #undef DEFINE_MATH_BUILTIN_C
1217 #undef DEFINE_MATH_BUILTIN
1219 #include "gt-fortran-f95-lang.h"
1220 #include "gtype-fortran.h"