Mercurial > hg > CbC > CbC_gcc
annotate gcc/errors.c @ 124:c3a50d7877e8
fix ipa-inline.c
author | mir3636 |
---|---|
date | Sat, 31 Mar 2018 17:18:55 +0900 |
parents | 04ced10e8804 |
children | 84e7813d76e9 |
rev | line source |
---|---|
0 | 1 /* Basic error reporting routines. |
111 | 2 Copyright (C) 1999-2017 Free Software Foundation, Inc. |
0 | 3 |
4 This file is part of GCC. | |
5 | |
6 GCC is free software; you can redistribute it and/or modify it under | |
7 the terms of the GNU General Public License as published by the Free | |
8 Software Foundation; either version 3, or (at your option) any later | |
9 version. | |
10 | |
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GCC; see the file COPYING3. If not see | |
18 <http://www.gnu.org/licenses/>. */ | |
19 | |
20 /* warning, error, and fatal. These definitions are suitable for use | |
21 in the generator programs; the compiler has a more elaborate suite | |
22 of diagnostic printers, found in diagnostic.c. */ | |
23 | |
111 | 24 #ifdef HOST_GENERATOR_FILE |
25 #include "config.h" | |
26 #define GENERATOR_FILE 1 | |
27 #else | |
0 | 28 #include "bconfig.h" |
29 #endif | |
30 #include "system.h" | |
31 #include "errors.h" | |
32 | |
33 /* Set this to argv[0] at the beginning of main. */ | |
34 | |
35 const char *progname; | |
36 | |
37 /* Starts out 0, set to 1 if error is called. */ | |
38 | |
39 int have_error = 0; | |
40 | |
41 /* Print a warning message - output produced, but there may be problems. */ | |
42 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
43 void |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
44 warning (const char *format, ...) |
0 | 45 { |
46 va_list ap; | |
47 | |
48 va_start (ap, format); | |
49 fprintf (stderr, "%s: warning: ", progname); | |
50 vfprintf (stderr, format, ap); | |
51 va_end (ap); | |
111 | 52 fputc ('\n', stderr); |
0 | 53 } |
54 | |
55 | |
56 /* Print an error message - we keep going but the output is unusable. */ | |
57 | |
58 void | |
59 error (const char *format, ...) | |
60 { | |
61 va_list ap; | |
62 | |
63 va_start (ap, format); | |
64 fprintf (stderr, "%s: ", progname); | |
65 vfprintf (stderr, format, ap); | |
66 va_end (ap); | |
111 | 67 fputc ('\n', stderr); |
0 | 68 |
69 have_error = 1; | |
70 } | |
71 | |
72 | |
73 /* Fatal error - terminate execution immediately. Does not return. */ | |
74 | |
75 void | |
76 fatal (const char *format, ...) | |
77 { | |
78 va_list ap; | |
79 | |
80 va_start (ap, format); | |
81 fprintf (stderr, "%s: ", progname); | |
82 vfprintf (stderr, format, ap); | |
83 va_end (ap); | |
111 | 84 fputc ('\n', stderr); |
0 | 85 exit (FATAL_EXIT_CODE); |
86 } | |
87 | |
88 /* Similar, but say we got an internal error. */ | |
89 | |
90 void | |
91 internal_error (const char *format, ...) | |
92 { | |
93 va_list ap; | |
94 | |
95 va_start (ap, format); | |
96 fprintf (stderr, "%s: Internal error: ", progname); | |
97 vfprintf (stderr, format, ap); | |
98 va_end (ap); | |
99 fputc ('\n', stderr); | |
100 exit (FATAL_EXIT_CODE); | |
101 } | |
102 | |
103 /* Given a partial pathname as input, return another pathname that | |
104 shares no directory elements with the pathname of __FILE__. This | |
105 is used by fancy_abort() to print `Internal compiler error in expr.c' | |
106 instead of `Internal compiler error in ../../GCC/gcc/expr.c'. This | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
107 version is meant to be used for the gen* programs and therefor need not |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
108 handle subdirectories. */ |
0 | 109 |
110 const char * | |
111 trim_filename (const char *name) | |
112 { | |
113 static const char this_file[] = __FILE__; | |
114 const char *p = name, *q = this_file; | |
115 | |
116 /* Skip any parts the two filenames have in common. */ | |
117 while (*p == *q && *p != 0 && *q != 0) | |
118 p++, q++; | |
119 | |
120 /* Now go backwards until the previous directory separator. */ | |
121 while (p > name && !IS_DIR_SEPARATOR (p[-1])) | |
122 p--; | |
123 | |
124 return p; | |
125 } | |
126 | |
127 /* "Fancy" abort. Reports where in the compiler someone gave up. | |
128 This file is used only by build programs, so we're not as polite as | |
129 the version in diagnostic.c. */ | |
130 void | |
131 fancy_abort (const char *file, int line, const char *func) | |
132 { | |
133 internal_error ("abort in %s, at %s:%d", func, trim_filename (file), line); | |
134 } |