Mercurial > hg > CbC > CbC_gcc
comparison gcc/errors.c @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | 77e2b8dfacca |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* Basic error reporting routines. | |
2 Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008 | |
3 Free Software Foundation, Inc. | |
4 | |
5 This file is part of GCC. | |
6 | |
7 GCC is free software; you can redistribute it and/or modify it under | |
8 the terms of the GNU General Public License as published by the Free | |
9 Software Foundation; either version 3, or (at your option) any later | |
10 version. | |
11 | |
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GCC; see the file COPYING3. If not see | |
19 <http://www.gnu.org/licenses/>. */ | |
20 | |
21 /* warning, error, and fatal. These definitions are suitable for use | |
22 in the generator programs; the compiler has a more elaborate suite | |
23 of diagnostic printers, found in diagnostic.c. */ | |
24 | |
25 #ifdef GENERATOR_FILE | |
26 #include "bconfig.h" | |
27 #else | |
28 #include "config.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 | |
43 bool | |
44 warning (int opt ATTRIBUTE_UNUSED, const char *format, ...) | |
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); | |
52 fputc('\n', stderr); | |
53 return true; | |
54 } | |
55 | |
56 | |
57 /* Print an error message - we keep going but the output is unusable. */ | |
58 | |
59 void | |
60 error (const char *format, ...) | |
61 { | |
62 va_list ap; | |
63 | |
64 va_start (ap, format); | |
65 fprintf (stderr, "%s: ", progname); | |
66 vfprintf (stderr, format, ap); | |
67 va_end (ap); | |
68 fputc('\n', stderr); | |
69 | |
70 have_error = 1; | |
71 } | |
72 | |
73 | |
74 /* Fatal error - terminate execution immediately. Does not return. */ | |
75 | |
76 void | |
77 fatal (const char *format, ...) | |
78 { | |
79 va_list ap; | |
80 | |
81 va_start (ap, format); | |
82 fprintf (stderr, "%s: ", progname); | |
83 vfprintf (stderr, format, ap); | |
84 va_end (ap); | |
85 fputc('\n', stderr); | |
86 exit (FATAL_EXIT_CODE); | |
87 } | |
88 | |
89 /* Similar, but say we got an internal error. */ | |
90 | |
91 void | |
92 internal_error (const char *format, ...) | |
93 { | |
94 va_list ap; | |
95 | |
96 va_start (ap, format); | |
97 fprintf (stderr, "%s: Internal error: ", progname); | |
98 vfprintf (stderr, format, ap); | |
99 va_end (ap); | |
100 fputc ('\n', stderr); | |
101 exit (FATAL_EXIT_CODE); | |
102 } | |
103 | |
104 /* Given a partial pathname as input, return another pathname that | |
105 shares no directory elements with the pathname of __FILE__. This | |
106 is used by fancy_abort() to print `Internal compiler error in expr.c' | |
107 instead of `Internal compiler error in ../../GCC/gcc/expr.c'. This | |
108 version if for the gen* programs and so needn't handle subdirectories. */ | |
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 } |