Home | History | Annotate | Line # | Download | only in gcc
lto-section-in.cc revision 1.1
      1  1.1  mrg /* Input functions for reading LTO sections.
      2  1.1  mrg 
      3  1.1  mrg    Copyright (C) 2009-2022 Free Software Foundation, Inc.
      4  1.1  mrg    Contributed by Kenneth Zadeck <zadeck (at) naturalbridge.com>
      5  1.1  mrg 
      6  1.1  mrg This file is part of GCC.
      7  1.1  mrg 
      8  1.1  mrg GCC is free software; you can redistribute it and/or modify it under
      9  1.1  mrg the terms of the GNU General Public License as published by the Free
     10  1.1  mrg Software Foundation; either version 3, or (at your option) any later
     11  1.1  mrg version.
     12  1.1  mrg 
     13  1.1  mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     14  1.1  mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
     15  1.1  mrg FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     16  1.1  mrg for more details.
     17  1.1  mrg 
     18  1.1  mrg You should have received a copy of the GNU General Public License
     19  1.1  mrg along with GCC; see the file COPYING3.  If not see
     20  1.1  mrg <http://www.gnu.org/licenses/>.  */
     21  1.1  mrg 
     22  1.1  mrg #include "config.h"
     23  1.1  mrg #include "system.h"
     24  1.1  mrg #include "coretypes.h"
     25  1.1  mrg #include "backend.h"
     26  1.1  mrg #include "rtl.h"
     27  1.1  mrg #include "tree.h"
     28  1.1  mrg #include "gimple.h"
     29  1.1  mrg #include "cgraph.h"
     30  1.1  mrg #include "lto-streamer.h"
     31  1.1  mrg #include "lto-compress.h"
     32  1.1  mrg 
     33  1.1  mrg /* Section names.  These must correspond to the values of
     34  1.1  mrg    enum lto_section_type.  */
     35  1.1  mrg const char *lto_section_name[LTO_N_SECTION_TYPES] =
     36  1.1  mrg {
     37  1.1  mrg   "decls",
     38  1.1  mrg   "function_body",
     39  1.1  mrg   "statics",
     40  1.1  mrg   "symtab",
     41  1.1  mrg   "ext_symtab",
     42  1.1  mrg   "refs",
     43  1.1  mrg   "asm",
     44  1.1  mrg   "jmpfuncs",
     45  1.1  mrg   "pureconst",
     46  1.1  mrg   "reference",
     47  1.1  mrg   "profile",
     48  1.1  mrg   "symbol_nodes",
     49  1.1  mrg   "opts",
     50  1.1  mrg   "cgraphopt",
     51  1.1  mrg   "inline",
     52  1.1  mrg   "ipcp_trans",
     53  1.1  mrg   "icf",
     54  1.1  mrg   "offload_table",
     55  1.1  mrg   "mode_table",
     56  1.1  mrg   "lto",
     57  1.1  mrg   "ipa_sra",
     58  1.1  mrg   "odr_types",
     59  1.1  mrg   "ipa_modref",
     60  1.1  mrg };
     61  1.1  mrg 
     62  1.1  mrg /* Hooks so that the ipa passes can call into the lto front end to get
     63  1.1  mrg    sections.  */
     64  1.1  mrg 
     65  1.1  mrg static struct lto_file_decl_data ** file_decl_data;
     66  1.1  mrg static lto_get_section_data_f* get_section_f;
     67  1.1  mrg static lto_free_section_data_f* free_section_f;
     68  1.1  mrg 
     69  1.1  mrg 
     70  1.1  mrg /* This is called from the lto front end to set up the hooks that are
     71  1.1  mrg    used by the ipa passes to get the data that they will
     72  1.1  mrg    deserialize.  */
     73  1.1  mrg 
     74  1.1  mrg void
     75  1.1  mrg lto_set_in_hooks (struct lto_file_decl_data ** data,
     76  1.1  mrg 		  lto_get_section_data_f* get_f,
     77  1.1  mrg 		  lto_free_section_data_f* free_f)
     78  1.1  mrg {
     79  1.1  mrg   file_decl_data = data;
     80  1.1  mrg   get_section_f = get_f;
     81  1.1  mrg   free_section_f = free_f;
     82  1.1  mrg }
     83  1.1  mrg 
     84  1.1  mrg 
     85  1.1  mrg /* Return an array of file decl datas for all of the files passed to
     86  1.1  mrg    this compilation.  */
     87  1.1  mrg 
     88  1.1  mrg struct lto_file_decl_data **
     89  1.1  mrg lto_get_file_decl_data (void)
     90  1.1  mrg {
     91  1.1  mrg   gcc_assert (file_decl_data);
     92  1.1  mrg   return file_decl_data;
     93  1.1  mrg }
     94  1.1  mrg 
     95  1.1  mrg /* Buffer structure for accumulating data from compression callbacks.  */
     96  1.1  mrg 
     97  1.1  mrg struct lto_buffer
     98  1.1  mrg {
     99  1.1  mrg   char *data;
    100  1.1  mrg   size_t length;
    101  1.1  mrg };
    102  1.1  mrg 
    103  1.1  mrg /* Compression callback, append LENGTH bytes from DATA to the buffer pointed
    104  1.1  mrg    to by OPAQUE.  */
    105  1.1  mrg 
    106  1.1  mrg static void
    107  1.1  mrg lto_append_data (const char *data, unsigned length, void *opaque)
    108  1.1  mrg {
    109  1.1  mrg   struct lto_buffer *buffer = (struct lto_buffer *) opaque;
    110  1.1  mrg 
    111  1.1  mrg   buffer->data = (char *) xrealloc (buffer->data, buffer->length + length);
    112  1.1  mrg   memcpy (buffer->data + buffer->length, data, length);
    113  1.1  mrg   buffer->length += length;
    114  1.1  mrg }
    115  1.1  mrg 
    116  1.1  mrg /* Header placed in returned uncompressed data streams.  Allows the
    117  1.1  mrg    uncompressed allocated data to be mapped back to the underlying
    118  1.1  mrg    compressed data for use with free_section_f.  */
    119  1.1  mrg 
    120  1.1  mrg struct lto_data_header
    121  1.1  mrg {
    122  1.1  mrg   const char *data;
    123  1.1  mrg   size_t len;
    124  1.1  mrg };
    125  1.1  mrg 
    126  1.1  mrg /* Return a char pointer to the start of a data stream for an LTO pass
    127  1.1  mrg    or function.  FILE_DATA indicates where to obtain the data.
    128  1.1  mrg    SECTION_TYPE is the type of information to be obtained.  NAME is
    129  1.1  mrg    the name of the function and is only used when finding a function
    130  1.1  mrg    body; otherwise it is NULL.  LEN is the size of the data
    131  1.1  mrg    returned.  */
    132  1.1  mrg 
    133  1.1  mrg const char *
    134  1.1  mrg lto_get_section_data (struct lto_file_decl_data *file_data,
    135  1.1  mrg 		      enum lto_section_type section_type,
    136  1.1  mrg 		      const char *name, int order,
    137  1.1  mrg 		      size_t *len, bool decompress)
    138  1.1  mrg {
    139  1.1  mrg   const char *data = (get_section_f) (file_data, section_type, name, order,
    140  1.1  mrg 				      len);
    141  1.1  mrg   const size_t header_length = sizeof (struct lto_data_header);
    142  1.1  mrg   struct lto_data_header *header;
    143  1.1  mrg   struct lto_buffer buffer;
    144  1.1  mrg   struct lto_compression_stream *stream;
    145  1.1  mrg   lto_stats.section_size[section_type] += *len;
    146  1.1  mrg 
    147  1.1  mrg   if (data == NULL)
    148  1.1  mrg     return NULL;
    149  1.1  mrg 
    150  1.1  mrg   /* WPA->ltrans streams are not compressed with exception of function bodies
    151  1.1  mrg      and variable initializers that has been verbatim copied from earlier
    152  1.1  mrg      compilations.  */
    153  1.1  mrg   if ((!flag_ltrans || decompress) && section_type != LTO_section_lto)
    154  1.1  mrg     {
    155  1.1  mrg       /* Create a mapping header containing the underlying data and length,
    156  1.1  mrg 	 and prepend this to the uncompression buffer.  The uncompressed data
    157  1.1  mrg 	 then follows, and a pointer to the start of the uncompressed data is
    158  1.1  mrg 	 returned.  */
    159  1.1  mrg       header = (struct lto_data_header *) xmalloc (header_length);
    160  1.1  mrg       header->data = data;
    161  1.1  mrg       header->len = *len;
    162  1.1  mrg 
    163  1.1  mrg       buffer.data = (char *) header;
    164  1.1  mrg       buffer.length = header_length;
    165  1.1  mrg 
    166  1.1  mrg       stream = lto_start_uncompression (lto_append_data, &buffer);
    167  1.1  mrg       lto_uncompress_block (stream, data, *len);
    168  1.1  mrg       lto_end_uncompression (stream,
    169  1.1  mrg 			     file_data->lto_section_header.get_compression ());
    170  1.1  mrg 
    171  1.1  mrg       *len = buffer.length - header_length;
    172  1.1  mrg       data = buffer.data + header_length;
    173  1.1  mrg     }
    174  1.1  mrg 
    175  1.1  mrg   return data;
    176  1.1  mrg }
    177  1.1  mrg 
    178  1.1  mrg /* Return a char pointer to the start of a data stream for an LTO pass.
    179  1.1  mrg    FILE_DATA indicates where to obtain the data.
    180  1.1  mrg    SECTION_TYPE is the type of information to be obtained.
    181  1.1  mrg    LEN is the size of the data returned.  */
    182  1.1  mrg 
    183  1.1  mrg const char *
    184  1.1  mrg lto_get_summary_section_data (struct lto_file_decl_data *file_data,
    185  1.1  mrg 			      enum lto_section_type section_type, size_t *len)
    186  1.1  mrg {
    187  1.1  mrg   return lto_get_section_data (file_data, section_type, NULL, 0, len);
    188  1.1  mrg }
    189  1.1  mrg 
    190  1.1  mrg /* Get the section data without any header parsing or uncompression.  */
    191  1.1  mrg 
    192  1.1  mrg const char *
    193  1.1  mrg lto_get_raw_section_data (struct lto_file_decl_data *file_data,
    194  1.1  mrg 			  enum lto_section_type section_type,
    195  1.1  mrg 			  const char *name, int order,
    196  1.1  mrg 			  size_t *len)
    197  1.1  mrg {
    198  1.1  mrg   return (get_section_f) (file_data, section_type, name, order, len);
    199  1.1  mrg }
    200  1.1  mrg 
    201  1.1  mrg /* Free the data found from the above call.  The first three
    202  1.1  mrg    parameters are the same as above.  DATA is the data to be freed and
    203  1.1  mrg    LEN is the length of that data.  */
    204  1.1  mrg 
    205  1.1  mrg void
    206  1.1  mrg lto_free_section_data (struct lto_file_decl_data *file_data,
    207  1.1  mrg 		       enum lto_section_type section_type,
    208  1.1  mrg 		       const char *name,
    209  1.1  mrg 		       const char *data,
    210  1.1  mrg 		       size_t len, bool decompress)
    211  1.1  mrg {
    212  1.1  mrg   const size_t header_length = sizeof (struct lto_data_header);
    213  1.1  mrg   const char *real_data = data - header_length;
    214  1.1  mrg   const struct lto_data_header *header
    215  1.1  mrg     = (const struct lto_data_header *) real_data;
    216  1.1  mrg 
    217  1.1  mrg   gcc_assert (free_section_f);
    218  1.1  mrg 
    219  1.1  mrg   if (flag_ltrans && !decompress)
    220  1.1  mrg     {
    221  1.1  mrg       (free_section_f) (file_data, section_type, name, data, len);
    222  1.1  mrg       return;
    223  1.1  mrg     }
    224  1.1  mrg 
    225  1.1  mrg   /* The underlying data address has been extracted from the mapping header.
    226  1.1  mrg      Free that, then free the allocated uncompression buffer.  */
    227  1.1  mrg   (free_section_f) (file_data, section_type, name, header->data, header->len);
    228  1.1  mrg   free (CONST_CAST (char *, real_data));
    229  1.1  mrg }
    230  1.1  mrg 
    231  1.1  mrg /* Free data allocated by lto_get_raw_section_data.  */
    232  1.1  mrg 
    233  1.1  mrg void
    234  1.1  mrg lto_free_raw_section_data (struct lto_file_decl_data *file_data,
    235  1.1  mrg 		           enum lto_section_type section_type,
    236  1.1  mrg 		           const char *name,
    237  1.1  mrg 		           const char *data,
    238  1.1  mrg 		           size_t len)
    239  1.1  mrg {
    240  1.1  mrg   (free_section_f) (file_data, section_type, name, data, len);
    241  1.1  mrg }
    242  1.1  mrg 
    243  1.1  mrg /* Load a section of type SECTION_TYPE from FILE_DATA, parse the
    244  1.1  mrg    header and then return an input block pointing to the section.  The
    245  1.1  mrg    raw pointer to the section is returned in DATAR and LEN.  These are
    246  1.1  mrg    used to free the section.  Return NULL if the section is not present.  */
    247  1.1  mrg 
    248  1.1  mrg class lto_input_block *
    249  1.1  mrg lto_create_simple_input_block (struct lto_file_decl_data *file_data,
    250  1.1  mrg 			       enum lto_section_type section_type,
    251  1.1  mrg 			       const char **datar, size_t *len)
    252  1.1  mrg {
    253  1.1  mrg   const char *data = lto_get_section_data (file_data, section_type, NULL, 0,
    254  1.1  mrg 					   len);
    255  1.1  mrg   const struct lto_simple_header * header
    256  1.1  mrg     = (const struct lto_simple_header *) data;
    257  1.1  mrg 
    258  1.1  mrg   int main_offset = sizeof (struct lto_simple_header);
    259  1.1  mrg 
    260  1.1  mrg   if (!data)
    261  1.1  mrg     return NULL;
    262  1.1  mrg 
    263  1.1  mrg   *datar = data;
    264  1.1  mrg   return new lto_input_block (data + main_offset, header->main_size,
    265  1.1  mrg 			      file_data->mode_table);
    266  1.1  mrg }
    267  1.1  mrg 
    268  1.1  mrg 
    269  1.1  mrg /* Close the section returned from a call to
    270  1.1  mrg    LTO_CREATE_SIMPLE_INPUT_BLOCK.  IB is the input block returned from
    271  1.1  mrg    that call.  The FILE_DATA and SECTION_TYPE are the same as what was
    272  1.1  mrg    passed to that call and the DATA and LEN are what was returned from
    273  1.1  mrg    that call.  */
    274  1.1  mrg 
    275  1.1  mrg void
    276  1.1  mrg lto_destroy_simple_input_block (struct lto_file_decl_data *file_data,
    277  1.1  mrg 				enum lto_section_type section_type,
    278  1.1  mrg 				class lto_input_block *ib,
    279  1.1  mrg 				const char *data, size_t len)
    280  1.1  mrg {
    281  1.1  mrg   delete ib;
    282  1.1  mrg   lto_free_section_data (file_data, section_type, NULL, data, len);
    283  1.1  mrg }
    284  1.1  mrg 
    285  1.1  mrg /*****************************************************************************/
    286  1.1  mrg /* Record renamings of static declarations                                   */
    287  1.1  mrg /*****************************************************************************/
    288  1.1  mrg 
    289  1.1  mrg struct lto_renaming_slot
    290  1.1  mrg {
    291  1.1  mrg   const char *old_name;
    292  1.1  mrg   const char *new_name;
    293  1.1  mrg };
    294  1.1  mrg 
    295  1.1  mrg /* Returns a hash code for P.  */
    296  1.1  mrg 
    297  1.1  mrg static hashval_t
    298  1.1  mrg hash_name (const void *p)
    299  1.1  mrg {
    300  1.1  mrg   const struct lto_renaming_slot *ds = (const struct lto_renaming_slot *) p;
    301  1.1  mrg   return (hashval_t) htab_hash_string (ds->new_name);
    302  1.1  mrg }
    303  1.1  mrg 
    304  1.1  mrg /* Returns nonzero if P1 and P2 are equal.  */
    305  1.1  mrg 
    306  1.1  mrg static int
    307  1.1  mrg eq_name (const void *p1, const void *p2)
    308  1.1  mrg {
    309  1.1  mrg   const struct lto_renaming_slot *s1 =
    310  1.1  mrg     (const struct lto_renaming_slot *) p1;
    311  1.1  mrg   const struct lto_renaming_slot *s2 =
    312  1.1  mrg     (const struct lto_renaming_slot *) p2;
    313  1.1  mrg 
    314  1.1  mrg   return strcmp (s1->new_name, s2->new_name) == 0;
    315  1.1  mrg }
    316  1.1  mrg 
    317  1.1  mrg /* Free a renaming table entry.  */
    318  1.1  mrg 
    319  1.1  mrg static void
    320  1.1  mrg renaming_slot_free (void *slot)
    321  1.1  mrg {
    322  1.1  mrg   struct lto_renaming_slot *s = (struct lto_renaming_slot *) slot;
    323  1.1  mrg 
    324  1.1  mrg   free (CONST_CAST (void *, (const void *) s->old_name));
    325  1.1  mrg   free (CONST_CAST (void *, (const void *) s->new_name));
    326  1.1  mrg   free ((void *) s);
    327  1.1  mrg }
    328  1.1  mrg 
    329  1.1  mrg /* Create an empty hash table for recording declaration renamings.  */
    330  1.1  mrg 
    331  1.1  mrg htab_t
    332  1.1  mrg lto_create_renaming_table (void)
    333  1.1  mrg {
    334  1.1  mrg   return htab_create (37, hash_name, eq_name, renaming_slot_free);
    335  1.1  mrg }
    336  1.1  mrg 
    337  1.1  mrg /* Record a declaration name mapping OLD_NAME -> NEW_NAME.  DECL_DATA
    338  1.1  mrg    holds the renaming hash table to use.  */
    339  1.1  mrg 
    340  1.1  mrg void
    341  1.1  mrg lto_record_renamed_decl (struct lto_file_decl_data *decl_data,
    342  1.1  mrg 			 const char *old_name, const char *new_name)
    343  1.1  mrg {
    344  1.1  mrg   void **slot;
    345  1.1  mrg   struct lto_renaming_slot r_slot;
    346  1.1  mrg 
    347  1.1  mrg   r_slot.new_name = new_name;
    348  1.1  mrg   slot = htab_find_slot (decl_data->renaming_hash_table, &r_slot, INSERT);
    349  1.1  mrg   if (*slot == NULL)
    350  1.1  mrg     {
    351  1.1  mrg       struct lto_renaming_slot *new_slot = XNEW (struct lto_renaming_slot);
    352  1.1  mrg       new_slot->old_name = xstrdup (old_name);
    353  1.1  mrg       new_slot->new_name = xstrdup (new_name);
    354  1.1  mrg       *slot = new_slot;
    355  1.1  mrg     }
    356  1.1  mrg   else
    357  1.1  mrg     gcc_unreachable ();
    358  1.1  mrg }
    359  1.1  mrg 
    360  1.1  mrg 
    361  1.1  mrg /* Given a string NAME, return the string that it has been mapped to
    362  1.1  mrg    by lto_record_renamed_decl.  If NAME was not renamed, it is
    363  1.1  mrg    returned unchanged.  DECL_DATA holds the renaming hash table to use.  */
    364  1.1  mrg 
    365  1.1  mrg const char *
    366  1.1  mrg lto_get_decl_name_mapping (struct lto_file_decl_data *decl_data,
    367  1.1  mrg 			   const char *name)
    368  1.1  mrg {
    369  1.1  mrg   htab_t renaming_hash_table = decl_data->renaming_hash_table;
    370  1.1  mrg   struct lto_renaming_slot *slot;
    371  1.1  mrg   struct lto_renaming_slot r_slot;
    372  1.1  mrg 
    373  1.1  mrg   r_slot.new_name = name;
    374  1.1  mrg   slot = (struct lto_renaming_slot *) htab_find (renaming_hash_table, &r_slot);
    375  1.1  mrg   if (slot)
    376  1.1  mrg     return slot->old_name;
    377  1.1  mrg   else
    378  1.1  mrg     return name;
    379  1.1  mrg }
    380  1.1  mrg 
    381  1.1  mrg /*****************************************************************************/
    382  1.1  mrg /* Input decl state object.                                                  */
    383  1.1  mrg /*****************************************************************************/
    384  1.1  mrg 
    385  1.1  mrg /* Return a newly created in-decl state object. */
    386  1.1  mrg 
    387  1.1  mrg struct lto_in_decl_state *
    388  1.1  mrg lto_new_in_decl_state (void)
    389  1.1  mrg {
    390  1.1  mrg   return ggc_cleared_alloc<lto_in_decl_state> ();
    391  1.1  mrg }
    392  1.1  mrg 
    393  1.1  mrg /* Delete STATE and its components. */
    394  1.1  mrg 
    395  1.1  mrg void
    396  1.1  mrg lto_delete_in_decl_state (struct lto_in_decl_state *state)
    397  1.1  mrg {
    398  1.1  mrg   int i;
    399  1.1  mrg 
    400  1.1  mrg   for (i = 0; i < LTO_N_DECL_STREAMS; i++)
    401  1.1  mrg     vec_free (state->streams[i]);
    402  1.1  mrg   ggc_free (state);
    403  1.1  mrg }
    404  1.1  mrg 
    405  1.1  mrg /* Search the in-decl state of a function FUNC contained in the file
    406  1.1  mrg    associated with FILE_DATA.  Return NULL if not found.  */
    407  1.1  mrg 
    408  1.1  mrg struct lto_in_decl_state*
    409  1.1  mrg lto_get_function_in_decl_state (struct lto_file_decl_data *file_data,
    410  1.1  mrg 				tree func)
    411  1.1  mrg {
    412  1.1  mrg   struct lto_in_decl_state temp;
    413  1.1  mrg   lto_in_decl_state **slot;
    414  1.1  mrg 
    415  1.1  mrg   temp.fn_decl = func;
    416  1.1  mrg   slot = file_data->function_decl_states->find_slot (&temp, NO_INSERT);
    417  1.1  mrg   return slot? *slot : NULL;
    418  1.1  mrg }
    419  1.1  mrg 
    420  1.1  mrg /* Free decl_states.  */
    421  1.1  mrg 
    422  1.1  mrg void
    423  1.1  mrg lto_free_function_in_decl_state (struct lto_in_decl_state *state)
    424  1.1  mrg {
    425  1.1  mrg   int i;
    426  1.1  mrg   for (i = 0; i < LTO_N_DECL_STREAMS; i++)
    427  1.1  mrg     vec_free (state->streams[i]);
    428  1.1  mrg   ggc_free (state);
    429  1.1  mrg }
    430  1.1  mrg 
    431  1.1  mrg /* Free decl_states associated with NODE.  This makes it possible to furhter
    432  1.1  mrg    release trees needed by the NODE's body.  */
    433  1.1  mrg 
    434  1.1  mrg void
    435  1.1  mrg lto_free_function_in_decl_state_for_node (symtab_node *node)
    436  1.1  mrg {
    437  1.1  mrg   struct lto_in_decl_state temp;
    438  1.1  mrg   lto_in_decl_state **slot;
    439  1.1  mrg 
    440  1.1  mrg   if (!node->lto_file_data)
    441  1.1  mrg     return;
    442  1.1  mrg 
    443  1.1  mrg   temp.fn_decl = node->decl;
    444  1.1  mrg   slot
    445  1.1  mrg     = node->lto_file_data->function_decl_states->find_slot (&temp, NO_INSERT);
    446  1.1  mrg   if (slot && *slot)
    447  1.1  mrg     {
    448  1.1  mrg       lto_free_function_in_decl_state (*slot);
    449  1.1  mrg       node->lto_file_data->function_decl_states->clear_slot (slot);
    450  1.1  mrg     }
    451  1.1  mrg   node->lto_file_data = NULL;
    452  1.1  mrg }
    453  1.1  mrg 
    454  1.1  mrg 
    455  1.1  mrg /* Report read pass end of the section.  */
    456  1.1  mrg 
    457  1.1  mrg void
    458  1.1  mrg lto_section_overrun (class lto_input_block *ib)
    459  1.1  mrg {
    460  1.1  mrg   fatal_error (input_location, "bytecode stream: trying to read %d bytes "
    461  1.1  mrg 	       "after the end of the input buffer", ib->p - ib->len);
    462  1.1  mrg }
    463  1.1  mrg 
    464  1.1  mrg /* Report out of range value.  */
    465  1.1  mrg 
    466  1.1  mrg void
    467  1.1  mrg lto_value_range_error (const char *purpose, HOST_WIDE_INT val,
    468  1.1  mrg 		       HOST_WIDE_INT min, HOST_WIDE_INT max)
    469  1.1  mrg {
    470  1.1  mrg   fatal_error (input_location,
    471  1.1  mrg 	       "%s out of range: Range is %i to %i, value is %i",
    472  1.1  mrg 	       purpose, (int)min, (int)max, (int)val);
    473  1.1  mrg }
    474