Mercurial > hg > CbC > CbC_gcc
annotate gcc/c-objc-common.c @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | b7f97abdc517 |
children |
rev | line source |
---|---|
0 | 1 /* Some code common to C and ObjC front ends. |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
3 2009, 2010 Free Software Foundation, Inc. |
0 | 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 #include "config.h" | |
22 #include "system.h" | |
23 #include "coretypes.h" | |
24 #include "tree.h" | |
25 #include "c-tree.h" | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
26 #include "intl.h" |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
27 #include "c-family/c-pretty-print.h" |
0 | 28 #include "flags.h" |
29 #include "diagnostic.h" | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
30 #include "tree-pretty-print.h" |
0 | 31 #include "langhooks.h" |
32 #include "c-objc-common.h" | |
33 | |
34 static bool c_tree_printer (pretty_printer *, text_info *, const char *, | |
35 int, bool, bool, bool); | |
36 | |
37 bool | |
38 c_missing_noreturn_ok_p (tree decl) | |
39 { | |
40 /* A missing noreturn is not ok for freestanding implementations and | |
41 ok for the `main' function in hosted implementations. */ | |
42 return flag_hosted && MAIN_NAME_P (DECL_ASSEMBLER_NAME (decl)); | |
43 } | |
44 | |
45 /* Called from check_global_declarations. */ | |
46 | |
47 bool | |
48 c_warn_unused_global_decl (const_tree decl) | |
49 { | |
50 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)) | |
51 return false; | |
52 if (DECL_IN_SYSTEM_HEADER (decl)) | |
53 return false; | |
54 | |
55 return true; | |
56 } | |
57 | |
58 /* Initialization common to C and Objective-C front ends. */ | |
59 bool | |
60 c_objc_common_init (void) | |
61 { | |
62 c_init_decl_processing (); | |
63 | |
64 if (c_common_init () == false) | |
65 return false; | |
66 | |
67 /* These were not defined in the Objective-C front end, but I'm | |
68 putting them here anyway. The diagnostic format decoder might | |
69 want an enhanced ObjC implementation. */ | |
70 diagnostic_format_decoder (global_dc) = &c_tree_printer; | |
71 | |
72 return true; | |
73 } | |
74 | |
75 /* Called during diagnostic message formatting process to print a | |
76 source-level entity onto BUFFER. The meaning of the format specifiers | |
77 is as follows: | |
78 %D: a general decl, | |
79 %E: an identifier or expression, | |
80 %F: a function declaration, | |
81 %T: a type. | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
82 %V: a list of type qualifiers from a tree. |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
83 %v: an explicit list of type qualifiers |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
84 %#v: an explicit list of type qualifiers of a function type. |
0 | 85 |
86 Please notice when called, the `%' part was already skipped by the | |
87 diagnostic machinery. */ | |
88 static bool | |
89 c_tree_printer (pretty_printer *pp, text_info *text, const char *spec, | |
90 int precision, bool wide, bool set_locus, bool hash) | |
91 { | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
92 tree t = NULL_TREE; |
0 | 93 tree name; |
94 c_pretty_printer *cpp = (c_pretty_printer *) pp; | |
95 pp->padding = pp_none; | |
96 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
97 if (precision != 0 || wide) |
0 | 98 return false; |
99 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
100 if (*spec == 'K') |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
101 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
102 percent_K_format (text); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
103 return true; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
104 } |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
105 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
106 if (*spec != 'v') |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
107 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
108 t = va_arg (*text->args_ptr, tree); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
109 if (set_locus && text->locus) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
110 *text->locus = DECL_SOURCE_LOCATION (t); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
111 } |
0 | 112 |
113 switch (*spec) | |
114 { | |
115 case 'D': | |
116 if (DECL_DEBUG_EXPR_IS_FROM (t) && DECL_DEBUG_EXPR (t)) | |
117 { | |
118 t = DECL_DEBUG_EXPR (t); | |
119 if (!DECL_P (t)) | |
120 { | |
121 pp_c_expression (cpp, t); | |
122 return true; | |
123 } | |
124 } | |
125 /* FALLTHRU */ | |
126 | |
127 case 'F': | |
128 if (DECL_NAME (t)) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
129 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
130 pp_identifier (cpp, lang_hooks.decl_printable_name (t, 2)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
131 return true; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
132 } |
0 | 133 break; |
134 | |
135 case 'T': | |
136 gcc_assert (TYPE_P (t)); | |
137 name = TYPE_NAME (t); | |
138 | |
139 if (name && TREE_CODE (name) == TYPE_DECL) | |
140 { | |
141 if (DECL_NAME (name)) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
142 pp_identifier (cpp, lang_hooks.decl_printable_name (name, 2)); |
0 | 143 else |
144 pp_type_id (cpp, t); | |
145 return true; | |
146 } | |
147 else | |
148 { | |
149 pp_type_id (cpp, t); | |
150 return true; | |
151 } | |
152 break; | |
153 | |
154 case 'E': | |
155 if (TREE_CODE (t) == IDENTIFIER_NODE) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
156 pp_identifier (cpp, IDENTIFIER_POINTER (t)); |
0 | 157 else |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
158 pp_expression (cpp, t); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
159 return true; |
0 | 160 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
161 case 'V': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
162 pp_c_type_qualifier_list (cpp, t); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
163 return true; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
164 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
165 case 'v': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
166 pp_c_cv_qualifiers (cpp, va_arg (*text->args_ptr, int), hash); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
167 return true; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
168 |
0 | 169 default: |
170 return false; | |
171 } | |
172 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
173 pp_string (cpp, _("({anonymous})")); |
0 | 174 return true; |
175 } | |
176 | |
177 /* In C and ObjC, all decls have "C" linkage. */ | |
178 bool | |
179 has_c_linkage (const_tree decl ATTRIBUTE_UNUSED) | |
180 { | |
181 return true; | |
182 } | |
183 | |
184 void | |
185 c_initialize_diagnostics (diagnostic_context *context) | |
186 { | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
187 pretty_printer *base; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
188 c_pretty_printer *pp; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
189 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
190 c_common_initialize_diagnostics (context); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
191 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
192 base = context->printer; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
193 pp = XNEW (c_pretty_printer); |
0 | 194 memcpy (pp_base (pp), base, sizeof (pretty_printer)); |
195 pp_c_pretty_printer_init (pp); | |
196 context->printer = (pretty_printer *) pp; | |
197 | |
198 /* It is safe to free this object because it was previously XNEW()'d. */ | |
199 XDELETE (base); | |
200 } | |
201 | |
202 int | |
203 c_types_compatible_p (tree x, tree y) | |
204 { | |
205 return comptypes (TYPE_MAIN_VARIANT (x), TYPE_MAIN_VARIANT (y)); | |
206 } | |
207 | |
208 /* Determine if the type is a vla type for the backend. */ | |
209 | |
210 bool | |
211 c_vla_unspec_p (tree x, tree fn ATTRIBUTE_UNUSED) | |
212 { | |
213 return c_vla_type_p (x); | |
214 } |