1*fae548d3Szrj /* messages.c - error reporter -
2*fae548d3Szrj Copyright (C) 1987-2020 Free Software Foundation, Inc.
3*fae548d3Szrj This file is part of GAS, the GNU Assembler.
4*fae548d3Szrj
5*fae548d3Szrj GAS is free software; you can redistribute it and/or modify
6*fae548d3Szrj it under the terms of the GNU General Public License as published by
7*fae548d3Szrj the Free Software Foundation; either version 3, or (at your option)
8*fae548d3Szrj any later version.
9*fae548d3Szrj
10*fae548d3Szrj GAS is distributed in the hope that it will be useful,
11*fae548d3Szrj but WITHOUT ANY WARRANTY; without even the implied warranty of
12*fae548d3Szrj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13*fae548d3Szrj GNU General Public License for more details.
14*fae548d3Szrj
15*fae548d3Szrj You should have received a copy of the GNU General Public License
16*fae548d3Szrj along with GAS; see the file COPYING. If not, write to the Free
17*fae548d3Szrj Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
18*fae548d3Szrj 02110-1301, USA. */
19*fae548d3Szrj
20*fae548d3Szrj #include "as.h"
21*fae548d3Szrj #include <signal.h>
22*fae548d3Szrj
23*fae548d3Szrj /* If the system doesn't provide strsignal, we get it defined in
24*fae548d3Szrj libiberty but no declaration is supplied. Because, reasons. */
25*fae548d3Szrj #if !defined (HAVE_STRSIGNAL) && !defined (strsignal)
26*fae548d3Szrj extern const char *strsignal (int);
27*fae548d3Szrj #endif
28*fae548d3Szrj
29*fae548d3Szrj static void identify (const char *);
30*fae548d3Szrj static void as_show_where (void);
31*fae548d3Szrj static void as_warn_internal (const char *, unsigned int, char *);
32*fae548d3Szrj static void as_bad_internal (const char *, unsigned int, char *);
33*fae548d3Szrj static void signal_crash (int) ATTRIBUTE_NORETURN;
34*fae548d3Szrj
35*fae548d3Szrj /* Despite the rest of the comments in this file, (FIXME-SOON),
36*fae548d3Szrj here is the current scheme for error messages etc:
37*fae548d3Szrj
38*fae548d3Szrj as_fatal() is used when gas is quite confused and
39*fae548d3Szrj continuing the assembly is pointless. In this case we
40*fae548d3Szrj exit immediately with error status.
41*fae548d3Szrj
42*fae548d3Szrj as_bad() is used to mark errors that result in what we
43*fae548d3Szrj presume to be a useless object file. Say, we ignored
44*fae548d3Szrj something that might have been vital. If we see any of
45*fae548d3Szrj these, assembly will continue to the end of the source,
46*fae548d3Szrj no object file will be produced, and we will terminate
47*fae548d3Szrj with error status. The new option, -Z, tells us to
48*fae548d3Szrj produce an object file anyway but we still exit with
49*fae548d3Szrj error status. The assumption here is that you don't want
50*fae548d3Szrj this object file but we could be wrong.
51*fae548d3Szrj
52*fae548d3Szrj as_warn() is used when we have an error from which we
53*fae548d3Szrj have a plausible error recovery. eg, masking the top
54*fae548d3Szrj bits of a constant that is longer than will fit in the
55*fae548d3Szrj destination. In this case we will continue to assemble
56*fae548d3Szrj the source, although we may have made a bad assumption,
57*fae548d3Szrj and we will produce an object file and return normal exit
58*fae548d3Szrj status (ie, no error). The new option -X tells us to
59*fae548d3Szrj treat all as_warn() errors as as_bad() errors. That is,
60*fae548d3Szrj no object file will be produced and we will exit with
61*fae548d3Szrj error status. The idea here is that we don't kill an
62*fae548d3Szrj entire make because of an error that we knew how to
63*fae548d3Szrj correct. On the other hand, sometimes you might want to
64*fae548d3Szrj stop the make at these points.
65*fae548d3Szrj
66*fae548d3Szrj as_tsktsk() is used when we see a minor error for which
67*fae548d3Szrj our error recovery action is almost certainly correct.
68*fae548d3Szrj In this case, we print a message and then assembly
69*fae548d3Szrj continues as though no error occurred.
70*fae548d3Szrj
71*fae548d3Szrj as_abort () is used for logic failure (assert or abort, signal).
72*fae548d3Szrj */
73*fae548d3Szrj
74*fae548d3Szrj static void
identify(const char * file)75*fae548d3Szrj identify (const char *file)
76*fae548d3Szrj {
77*fae548d3Szrj static int identified;
78*fae548d3Szrj
79*fae548d3Szrj if (identified)
80*fae548d3Szrj return;
81*fae548d3Szrj identified++;
82*fae548d3Szrj
83*fae548d3Szrj if (!file)
84*fae548d3Szrj {
85*fae548d3Szrj unsigned int x;
86*fae548d3Szrj file = as_where (&x);
87*fae548d3Szrj }
88*fae548d3Szrj
89*fae548d3Szrj if (file)
90*fae548d3Szrj fprintf (stderr, "%s: ", file);
91*fae548d3Szrj fprintf (stderr, _("Assembler messages:\n"));
92*fae548d3Szrj }
93*fae548d3Szrj
94*fae548d3Szrj /* The number of warnings issued. */
95*fae548d3Szrj static int warning_count;
96*fae548d3Szrj
97*fae548d3Szrj int
had_warnings(void)98*fae548d3Szrj had_warnings (void)
99*fae548d3Szrj {
100*fae548d3Szrj return warning_count;
101*fae548d3Szrj }
102*fae548d3Szrj
103*fae548d3Szrj /* Nonzero if we've hit a 'bad error', and should not write an obj file,
104*fae548d3Szrj and exit with a nonzero error code. */
105*fae548d3Szrj
106*fae548d3Szrj static int error_count;
107*fae548d3Szrj
108*fae548d3Szrj int
had_errors(void)109*fae548d3Szrj had_errors (void)
110*fae548d3Szrj {
111*fae548d3Szrj return error_count;
112*fae548d3Szrj }
113*fae548d3Szrj
114*fae548d3Szrj /* Print the current location to stderr. */
115*fae548d3Szrj
116*fae548d3Szrj static void
as_show_where(void)117*fae548d3Szrj as_show_where (void)
118*fae548d3Szrj {
119*fae548d3Szrj const char *file;
120*fae548d3Szrj unsigned int line;
121*fae548d3Szrj
122*fae548d3Szrj file = as_where (&line);
123*fae548d3Szrj identify (file);
124*fae548d3Szrj if (file)
125*fae548d3Szrj {
126*fae548d3Szrj if (line != 0)
127*fae548d3Szrj fprintf (stderr, "%s:%u: ", file, line);
128*fae548d3Szrj else
129*fae548d3Szrj fprintf (stderr, "%s: ", file);
130*fae548d3Szrj }
131*fae548d3Szrj }
132*fae548d3Szrj
133*fae548d3Szrj /* Send to stderr a string as a warning, and locate warning
134*fae548d3Szrj in input file(s).
135*fae548d3Szrj Please only use this for when we have some recovery action.
136*fae548d3Szrj Please explain in string (which may have '\n's) what recovery was
137*fae548d3Szrj done. */
138*fae548d3Szrj
139*fae548d3Szrj void
as_tsktsk(const char * format,...)140*fae548d3Szrj as_tsktsk (const char *format, ...)
141*fae548d3Szrj {
142*fae548d3Szrj va_list args;
143*fae548d3Szrj
144*fae548d3Szrj as_show_where ();
145*fae548d3Szrj va_start (args, format);
146*fae548d3Szrj vfprintf (stderr, format, args);
147*fae548d3Szrj va_end (args);
148*fae548d3Szrj (void) putc ('\n', stderr);
149*fae548d3Szrj }
150*fae548d3Szrj
151*fae548d3Szrj /* The common portion of as_warn and as_warn_where. */
152*fae548d3Szrj
153*fae548d3Szrj static void
as_warn_internal(const char * file,unsigned int line,char * buffer)154*fae548d3Szrj as_warn_internal (const char *file, unsigned int line, char *buffer)
155*fae548d3Szrj {
156*fae548d3Szrj ++warning_count;
157*fae548d3Szrj
158*fae548d3Szrj if (file == NULL)
159*fae548d3Szrj file = as_where (&line);
160*fae548d3Szrj
161*fae548d3Szrj identify (file);
162*fae548d3Szrj if (file)
163*fae548d3Szrj {
164*fae548d3Szrj if (line != 0)
165*fae548d3Szrj fprintf (stderr, "%s:%u: %s%s\n", file, line, _("Warning: "), buffer);
166*fae548d3Szrj else
167*fae548d3Szrj fprintf (stderr, "%s: %s%s\n", file, _("Warning: "), buffer);
168*fae548d3Szrj }
169*fae548d3Szrj else
170*fae548d3Szrj fprintf (stderr, "%s%s\n", _("Warning: "), buffer);
171*fae548d3Szrj #ifndef NO_LISTING
172*fae548d3Szrj listing_warning (buffer);
173*fae548d3Szrj #endif
174*fae548d3Szrj }
175*fae548d3Szrj
176*fae548d3Szrj /* Send to stderr a string as a warning, and locate warning
177*fae548d3Szrj in input file(s).
178*fae548d3Szrj Please only use this for when we have some recovery action.
179*fae548d3Szrj Please explain in string (which may have '\n's) what recovery was
180*fae548d3Szrj done. */
181*fae548d3Szrj
182*fae548d3Szrj void
as_warn(const char * format,...)183*fae548d3Szrj as_warn (const char *format, ...)
184*fae548d3Szrj {
185*fae548d3Szrj va_list args;
186*fae548d3Szrj char buffer[2000];
187*fae548d3Szrj
188*fae548d3Szrj if (!flag_no_warnings)
189*fae548d3Szrj {
190*fae548d3Szrj va_start (args, format);
191*fae548d3Szrj vsnprintf (buffer, sizeof (buffer), format, args);
192*fae548d3Szrj va_end (args);
193*fae548d3Szrj as_warn_internal ((char *) NULL, 0, buffer);
194*fae548d3Szrj }
195*fae548d3Szrj }
196*fae548d3Szrj
197*fae548d3Szrj /* Like as_bad but the file name and line number are passed in.
198*fae548d3Szrj Unfortunately, we have to repeat the function in order to handle
199*fae548d3Szrj the varargs correctly and portably. */
200*fae548d3Szrj
201*fae548d3Szrj void
as_warn_where(const char * file,unsigned int line,const char * format,...)202*fae548d3Szrj as_warn_where (const char *file, unsigned int line, const char *format, ...)
203*fae548d3Szrj {
204*fae548d3Szrj va_list args;
205*fae548d3Szrj char buffer[2000];
206*fae548d3Szrj
207*fae548d3Szrj if (!flag_no_warnings)
208*fae548d3Szrj {
209*fae548d3Szrj va_start (args, format);
210*fae548d3Szrj vsnprintf (buffer, sizeof (buffer), format, args);
211*fae548d3Szrj va_end (args);
212*fae548d3Szrj as_warn_internal (file, line, buffer);
213*fae548d3Szrj }
214*fae548d3Szrj }
215*fae548d3Szrj
216*fae548d3Szrj /* The common portion of as_bad and as_bad_where. */
217*fae548d3Szrj
218*fae548d3Szrj static void
as_bad_internal(const char * file,unsigned int line,char * buffer)219*fae548d3Szrj as_bad_internal (const char *file, unsigned int line, char *buffer)
220*fae548d3Szrj {
221*fae548d3Szrj ++error_count;
222*fae548d3Szrj
223*fae548d3Szrj if (file == NULL)
224*fae548d3Szrj file = as_where (&line);
225*fae548d3Szrj
226*fae548d3Szrj identify (file);
227*fae548d3Szrj if (file)
228*fae548d3Szrj {
229*fae548d3Szrj if (line != 0)
230*fae548d3Szrj fprintf (stderr, "%s:%u: %s%s\n", file, line, _("Error: "), buffer);
231*fae548d3Szrj else
232*fae548d3Szrj fprintf (stderr, "%s: %s%s\n", file, _("Error: "), buffer);
233*fae548d3Szrj }
234*fae548d3Szrj else
235*fae548d3Szrj fprintf (stderr, "%s%s\n", _("Error: "), buffer);
236*fae548d3Szrj #ifndef NO_LISTING
237*fae548d3Szrj listing_error (buffer);
238*fae548d3Szrj #endif
239*fae548d3Szrj }
240*fae548d3Szrj
241*fae548d3Szrj /* Send to stderr a string as a warning, and locate warning in input
242*fae548d3Szrj file(s). Please use when there is no recovery, but we want to
243*fae548d3Szrj continue processing but not produce an object file.
244*fae548d3Szrj Please explain in string (which may have '\n's) what recovery was
245*fae548d3Szrj done. */
246*fae548d3Szrj
247*fae548d3Szrj void
as_bad(const char * format,...)248*fae548d3Szrj as_bad (const char *format, ...)
249*fae548d3Szrj {
250*fae548d3Szrj va_list args;
251*fae548d3Szrj char buffer[2000];
252*fae548d3Szrj
253*fae548d3Szrj va_start (args, format);
254*fae548d3Szrj vsnprintf (buffer, sizeof (buffer), format, args);
255*fae548d3Szrj va_end (args);
256*fae548d3Szrj
257*fae548d3Szrj as_bad_internal ((char *) NULL, 0, buffer);
258*fae548d3Szrj }
259*fae548d3Szrj
260*fae548d3Szrj /* Like as_bad but the file name and line number are passed in.
261*fae548d3Szrj Unfortunately, we have to repeat the function in order to handle
262*fae548d3Szrj the varargs correctly and portably. */
263*fae548d3Szrj
264*fae548d3Szrj void
as_bad_where(const char * file,unsigned int line,const char * format,...)265*fae548d3Szrj as_bad_where (const char *file, unsigned int line, const char *format, ...)
266*fae548d3Szrj {
267*fae548d3Szrj va_list args;
268*fae548d3Szrj char buffer[2000];
269*fae548d3Szrj
270*fae548d3Szrj va_start (args, format);
271*fae548d3Szrj vsnprintf (buffer, sizeof (buffer), format, args);
272*fae548d3Szrj va_end (args);
273*fae548d3Szrj
274*fae548d3Szrj as_bad_internal (file, line, buffer);
275*fae548d3Szrj }
276*fae548d3Szrj
277*fae548d3Szrj /* Send to stderr a string as a fatal message, and print location of
278*fae548d3Szrj error in input file(s).
279*fae548d3Szrj Please only use this for when we DON'T have some recovery action.
280*fae548d3Szrj It xexit()s with a warning status. */
281*fae548d3Szrj
282*fae548d3Szrj void
as_fatal(const char * format,...)283*fae548d3Szrj as_fatal (const char *format, ...)
284*fae548d3Szrj {
285*fae548d3Szrj va_list args;
286*fae548d3Szrj
287*fae548d3Szrj as_show_where ();
288*fae548d3Szrj va_start (args, format);
289*fae548d3Szrj fprintf (stderr, _("Fatal error: "));
290*fae548d3Szrj vfprintf (stderr, format, args);
291*fae548d3Szrj (void) putc ('\n', stderr);
292*fae548d3Szrj va_end (args);
293*fae548d3Szrj /* Delete the output file, if it exists. This will prevent make from
294*fae548d3Szrj thinking that a file was created and hence does not need rebuilding. */
295*fae548d3Szrj if (out_file_name != NULL)
296*fae548d3Szrj unlink_if_ordinary (out_file_name);
297*fae548d3Szrj xexit (EXIT_FAILURE);
298*fae548d3Szrj }
299*fae548d3Szrj
300*fae548d3Szrj /* Indicate internal constency error.
301*fae548d3Szrj Arguments: Filename, line number, optional function name.
302*fae548d3Szrj FILENAME may be NULL, which we use for crash-via-signal. */
303*fae548d3Szrj
304*fae548d3Szrj void
as_abort(const char * file,int line,const char * fn)305*fae548d3Szrj as_abort (const char *file, int line, const char *fn)
306*fae548d3Szrj {
307*fae548d3Szrj as_show_where ();
308*fae548d3Szrj
309*fae548d3Szrj if (!file)
310*fae548d3Szrj fprintf (stderr, _("Internal error (%s).\n"), fn ? fn : "unknown");
311*fae548d3Szrj else if (fn)
312*fae548d3Szrj fprintf (stderr, _("Internal error in %s at %s:%d.\n"), fn, file, line);
313*fae548d3Szrj else
314*fae548d3Szrj fprintf (stderr, _("Internal error at %s:%d.\n"), file, line);
315*fae548d3Szrj
316*fae548d3Szrj fprintf (stderr, _("Please report this bug.\n"));
317*fae548d3Szrj
318*fae548d3Szrj xexit (EXIT_FAILURE);
319*fae548d3Szrj }
320*fae548d3Szrj
321*fae548d3Szrj /* Handler for fatal signals, such as SIGSEGV. */
322*fae548d3Szrj
323*fae548d3Szrj static void
signal_crash(int signo)324*fae548d3Szrj signal_crash (int signo)
325*fae548d3Szrj {
326*fae548d3Szrj /* Reset, to prevent unbounded recursion. */
327*fae548d3Szrj signal (signo, SIG_DFL);
328*fae548d3Szrj
329*fae548d3Szrj as_abort (NULL, 0, strsignal (signo));
330*fae548d3Szrj }
331*fae548d3Szrj
332*fae548d3Szrj /* Register signal handlers, for less abrubt crashes. */
333*fae548d3Szrj
334*fae548d3Szrj void
signal_init(void)335*fae548d3Szrj signal_init (void)
336*fae548d3Szrj {
337*fae548d3Szrj #ifdef SIGSEGV
338*fae548d3Szrj signal (SIGSEGV, signal_crash);
339*fae548d3Szrj #endif
340*fae548d3Szrj #ifdef SIGILL
341*fae548d3Szrj signal (SIGILL, signal_crash);
342*fae548d3Szrj #endif
343*fae548d3Szrj #ifdef SIGBUS
344*fae548d3Szrj signal (SIGBUS, signal_crash);
345*fae548d3Szrj #endif
346*fae548d3Szrj #ifdef SIGABRT
347*fae548d3Szrj signal (SIGABRT, signal_crash);
348*fae548d3Szrj #endif
349*fae548d3Szrj #if defined SIGIOT && (!defined SIGABRT || SIGABRT != SIGIOT)
350*fae548d3Szrj signal (SIGIOT, signal_crash);
351*fae548d3Szrj #endif
352*fae548d3Szrj #ifdef SIGFPE
353*fae548d3Szrj signal (SIGFPE, signal_crash);
354*fae548d3Szrj #endif
355*fae548d3Szrj }
356*fae548d3Szrj
357*fae548d3Szrj /* Support routines. */
358*fae548d3Szrj
359*fae548d3Szrj void
sprint_value(char * buf,valueT val)360*fae548d3Szrj sprint_value (char *buf, valueT val)
361*fae548d3Szrj {
362*fae548d3Szrj if (sizeof (val) <= sizeof (long))
363*fae548d3Szrj {
364*fae548d3Szrj sprintf (buf, "%ld", (long) val);
365*fae548d3Szrj return;
366*fae548d3Szrj }
367*fae548d3Szrj if (sizeof (val) <= sizeof (bfd_vma))
368*fae548d3Szrj {
369*fae548d3Szrj sprintf_vma (buf, val);
370*fae548d3Szrj return;
371*fae548d3Szrj }
372*fae548d3Szrj abort ();
373*fae548d3Szrj }
374*fae548d3Szrj
375*fae548d3Szrj #define HEX_MAX_THRESHOLD 1024
376*fae548d3Szrj #define HEX_MIN_THRESHOLD -(HEX_MAX_THRESHOLD)
377*fae548d3Szrj
378*fae548d3Szrj static void
as_internal_value_out_of_range(const char * prefix,offsetT val,offsetT min,offsetT max,const char * file,unsigned line,int bad)379*fae548d3Szrj as_internal_value_out_of_range (const char *prefix,
380*fae548d3Szrj offsetT val,
381*fae548d3Szrj offsetT min,
382*fae548d3Szrj offsetT max,
383*fae548d3Szrj const char *file,
384*fae548d3Szrj unsigned line,
385*fae548d3Szrj int bad)
386*fae548d3Szrj {
387*fae548d3Szrj const char * err;
388*fae548d3Szrj
389*fae548d3Szrj if (prefix == NULL)
390*fae548d3Szrj prefix = "";
391*fae548d3Szrj
392*fae548d3Szrj if (val >= min && val <= max)
393*fae548d3Szrj {
394*fae548d3Szrj addressT right = max & -max;
395*fae548d3Szrj
396*fae548d3Szrj if (max <= 1)
397*fae548d3Szrj abort ();
398*fae548d3Szrj
399*fae548d3Szrj /* xgettext:c-format */
400*fae548d3Szrj err = _("%s out of domain (%" BFD_VMA_FMT "d is not a multiple of %" \
401*fae548d3Szrj BFD_VMA_FMT "d)");
402*fae548d3Szrj if (bad)
403*fae548d3Szrj as_bad_where (file, line, err, prefix, val, right);
404*fae548d3Szrj else
405*fae548d3Szrj as_warn_where (file, line, err, prefix, val, right);
406*fae548d3Szrj return;
407*fae548d3Szrj }
408*fae548d3Szrj
409*fae548d3Szrj if ( val < HEX_MAX_THRESHOLD
410*fae548d3Szrj && min < HEX_MAX_THRESHOLD
411*fae548d3Szrj && max < HEX_MAX_THRESHOLD
412*fae548d3Szrj && val > HEX_MIN_THRESHOLD
413*fae548d3Szrj && min > HEX_MIN_THRESHOLD
414*fae548d3Szrj && max > HEX_MIN_THRESHOLD)
415*fae548d3Szrj {
416*fae548d3Szrj /* xgettext:c-format */
417*fae548d3Szrj err = _("%s out of range (%" BFD_VMA_FMT "d is not between %" \
418*fae548d3Szrj BFD_VMA_FMT "d and %" BFD_VMA_FMT "d)");
419*fae548d3Szrj
420*fae548d3Szrj if (bad)
421*fae548d3Szrj as_bad_where (file, line, err, prefix, val, min, max);
422*fae548d3Szrj else
423*fae548d3Szrj as_warn_where (file, line, err, prefix, val, min, max);
424*fae548d3Szrj }
425*fae548d3Szrj else
426*fae548d3Szrj {
427*fae548d3Szrj char val_buf [sizeof (val) * 3 + 2];
428*fae548d3Szrj char min_buf [sizeof (val) * 3 + 2];
429*fae548d3Szrj char max_buf [sizeof (val) * 3 + 2];
430*fae548d3Szrj
431*fae548d3Szrj if (sizeof (val) > sizeof (bfd_vma))
432*fae548d3Szrj abort ();
433*fae548d3Szrj
434*fae548d3Szrj sprintf_vma (val_buf, (bfd_vma) val);
435*fae548d3Szrj sprintf_vma (min_buf, (bfd_vma) min);
436*fae548d3Szrj sprintf_vma (max_buf, (bfd_vma) max);
437*fae548d3Szrj
438*fae548d3Szrj /* xgettext:c-format. */
439*fae548d3Szrj err = _("%s out of range (0x%s is not between 0x%s and 0x%s)");
440*fae548d3Szrj
441*fae548d3Szrj if (bad)
442*fae548d3Szrj as_bad_where (file, line, err, prefix, val_buf, min_buf, max_buf);
443*fae548d3Szrj else
444*fae548d3Szrj as_warn_where (file, line, err, prefix, val_buf, min_buf, max_buf);
445*fae548d3Szrj }
446*fae548d3Szrj }
447*fae548d3Szrj
448*fae548d3Szrj void
as_warn_value_out_of_range(const char * prefix,offsetT value,offsetT min,offsetT max,const char * file,unsigned line)449*fae548d3Szrj as_warn_value_out_of_range (const char *prefix,
450*fae548d3Szrj offsetT value,
451*fae548d3Szrj offsetT min,
452*fae548d3Szrj offsetT max,
453*fae548d3Szrj const char *file,
454*fae548d3Szrj unsigned line)
455*fae548d3Szrj {
456*fae548d3Szrj as_internal_value_out_of_range (prefix, value, min, max, file, line, 0);
457*fae548d3Szrj }
458*fae548d3Szrj
459*fae548d3Szrj void
as_bad_value_out_of_range(const char * prefix,offsetT value,offsetT min,offsetT max,const char * file,unsigned line)460*fae548d3Szrj as_bad_value_out_of_range (const char *prefix,
461*fae548d3Szrj offsetT value,
462*fae548d3Szrj offsetT min,
463*fae548d3Szrj offsetT max,
464*fae548d3Szrj const char *file,
465*fae548d3Szrj unsigned line)
466*fae548d3Szrj {
467*fae548d3Szrj as_internal_value_out_of_range (prefix, value, min, max, file, line, 1);
468*fae548d3Szrj }
469