]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c/c-objc-common.c
genattrtab.c (write_header): Include hash-set.h...
[thirdparty/gcc.git] / gcc / c / c-objc-common.c
CommitLineData
0abc6a6a 1/* Some code common to C and ObjC front ends.
5624e564 2 Copyright (C) 2001-2015 Free Software Foundation, Inc.
0abc6a6a
NB
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
9dcd6f09 8Software Foundation; either version 3, or (at your option) any later
0abc6a6a
NB
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
9dcd6f09
NC
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
0abc6a6a
NB
19
20#include "config.h"
21#include "system.h"
4977bab6 22#include "coretypes.h"
40e23961
MC
23#include "hash-set.h"
24#include "vec.h"
25#include "symtab.h"
26#include "input.h"
27#include "alias.h"
28#include "double-int.h"
29#include "machmode.h"
30#include "flags.h"
31#include "inchash.h"
0abc6a6a 32#include "tree.h"
0abc6a6a 33#include "c-tree.h"
b02cec6e 34#include "intl.h"
39dabefd 35#include "c-family/c-pretty-print.h"
0abc6a6a 36#include "diagnostic.h"
cf835838 37#include "tree-pretty-print.h"
7afff7cf 38#include "langhooks.h"
9a4d6480 39#include "c-objc-common.h"
0abc6a6a 40
da6ca2b5
GDR
41#include <new> // For placement new.
42
39ce81c9
ZW
43static bool c_tree_printer (pretty_printer *, text_info *, const char *,
44 int, bool, bool, bool);
3b27886e 45
6de9cd9a 46bool
2f6e4e97 47c_missing_noreturn_ok_p (tree decl)
0abc6a6a
NB
48{
49 /* A missing noreturn is not ok for freestanding implementations and
50 ok for the `main' function in hosted implementations. */
51 return flag_hosted && MAIN_NAME_P (DECL_ASSEMBLER_NAME (decl));
52}
53
ef4f94ac
RH
54/* Called from check_global_declarations. */
55
56bool
ac7d7749 57c_warn_unused_global_decl (const_tree decl)
ef4f94ac
RH
58{
59 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl))
60 return false;
61 if (DECL_IN_SYSTEM_HEADER (decl))
62 return false;
63
64 return true;
65}
66
0abc6a6a 67/* Initialization common to C and Objective-C front ends. */
4bfec483 68bool
2f6e4e97 69c_objc_common_init (void)
0abc6a6a
NB
70{
71 c_init_decl_processing ();
72
d723bb7c 73 return c_common_init ();
0abc6a6a
NB
74}
75
76/* Called during diagnostic message formatting process to print a
77 source-level entity onto BUFFER. The meaning of the format specifiers
78 is as follows:
79 %D: a general decl,
7848dfca 80 %E: an identifier or expression,
0abc6a6a
NB
81 %F: a function declaration,
82 %T: a type.
49706e39
MLI
83 %V: a list of type qualifiers from a tree.
84 %v: an explicit list of type qualifiers
85 %#v: an explicit list of type qualifiers of a function type.
0abc6a6a 86
0abc6a6a
NB
87 Please notice when called, the `%' part was already skipped by the
88 diagnostic machinery. */
47b69537 89static bool
39ce81c9 90c_tree_printer (pretty_printer *pp, text_info *text, const char *spec,
dee15844 91 int precision, bool wide, bool set_locus, bool hash)
0abc6a6a 92{
5d7eb7e2 93 tree t = NULL_TREE;
ede1a387 94 tree name;
025311c4 95 // FIXME: the next cast should be a dynamic_cast, when it is permitted.
ede1a387
JM
96 c_pretty_printer *cpp = (c_pretty_printer *) pp;
97 pp->padding = pp_none;
0abc6a6a 98
49706e39 99 if (precision != 0 || wide)
39ce81c9
ZW
100 return false;
101
cf835838
JM
102 if (*spec == 'K')
103 {
104 percent_K_format (text);
105 return true;
106 }
107
49706e39
MLI
108 if (*spec != 'v')
109 {
110 t = va_arg (*text->args_ptr, tree);
111 if (set_locus && text->locus)
112 *text->locus = DECL_SOURCE_LOCATION (t);
113 }
dee15844 114
39ce81c9 115 switch (*spec)
0abc6a6a
NB
116 {
117 case 'D':
839b422f 118 if (TREE_CODE (t) == VAR_DECL && DECL_HAS_DEBUG_EXPR_P (t))
dad2a933
RH
119 {
120 t = DECL_DEBUG_EXPR (t);
121 if (!DECL_P (t))
122 {
20059c8b 123 cpp->expression (t);
dad2a933
RH
124 return true;
125 }
126 }
127 /* FALLTHRU */
128
0abc6a6a 129 case 'F':
c157f85c 130 if (DECL_NAME (t))
b02cec6e
JM
131 {
132 pp_identifier (cpp, lang_hooks.decl_printable_name (t, 2));
133 return true;
134 }
c157f85c
RH
135 break;
136
0abc6a6a 137 case 'T':
2d51fcef
MP
138 {
139 gcc_assert (TYPE_P (t));
140 struct obstack *ob = pp_buffer (cpp)->obstack;
141 char *p = (char *) obstack_base (ob);
142 /* Remember the end of the initial dump. */
143 int len = obstack_object_size (ob);
144
145 name = TYPE_NAME (t);
146 if (name && TREE_CODE (name) == TYPE_DECL && DECL_NAME (name))
147 pp_identifier (cpp, lang_hooks.decl_printable_name (name, 2));
148 else
20059c8b 149 cpp->type_id (t);
2d51fcef
MP
150
151 /* If we're printing a type that involves typedefs, also print the
152 stripped version. But sometimes the stripped version looks
153 exactly the same, so we don't want it after all. To avoid
154 printing it in that case, we play ugly obstack games. */
155 if (TYPE_CANONICAL (t) && t != TYPE_CANONICAL (t))
156 {
157 c_pretty_printer cpp2;
158 /* Print the stripped version into a temporary printer. */
159 cpp2.type_id (TYPE_CANONICAL (t));
160 struct obstack *ob2 = cpp2.buffer->obstack;
161 /* Get the stripped version from the temporary printer. */
162 const char *aka = (char *) obstack_base (ob2);
163 int aka_len = obstack_object_size (ob2);
164 int type1_len = obstack_object_size (ob) - len;
165
166 /* If they are identical, bail out. */
167 if (aka_len == type1_len && memcmp (p + len, aka, aka_len) == 0)
168 return true;
169
170 /* They're not, print the stripped version now. */
171 pp_c_whitespace (cpp);
172 pp_left_brace (cpp);
173 pp_c_ws_string (cpp, _("aka"));
174 pp_c_whitespace (cpp);
175 cpp->type_id (TYPE_CANONICAL (t));
176 pp_right_brace (cpp);
177 }
178 return true;
179 }
0abc6a6a 180
eb8221ea 181 case 'E':
c157f85c 182 if (TREE_CODE (t) == IDENTIFIER_NODE)
b02cec6e 183 pp_identifier (cpp, IDENTIFIER_POINTER (t));
c157f85c 184 else
20059c8b 185 cpp->expression (t);
b02cec6e 186 return true;
eb8221ea 187
49706e39
MLI
188 case 'V':
189 pp_c_type_qualifier_list (cpp, t);
190 return true;
191
192 case 'v':
193 pp_c_cv_qualifiers (cpp, va_arg (*text->args_ptr, int), hash);
194 return true;
195
0abc6a6a 196 default:
47b69537 197 return false;
0abc6a6a 198 }
c157f85c 199
b02cec6e 200 pp_string (cpp, _("({anonymous})"));
c157f85c 201 return true;
0abc6a6a 202}
e57e265b 203
84b8b0e0
ZW
204/* In C and ObjC, all decls have "C" linkage. */
205bool
58f9752a 206has_c_linkage (const_tree decl ATTRIBUTE_UNUSED)
84b8b0e0
ZW
207{
208 return true;
209}
ede1a387
JM
210
211void
212c_initialize_diagnostics (diagnostic_context *context)
213{
da6ca2b5
GDR
214 pretty_printer *base = context->printer;
215 c_pretty_printer *pp = XNEW (c_pretty_printer);
216 context->printer = new (pp) c_pretty_printer ();
ede1a387 217
5d038c4c 218 /* It is safe to free this object because it was previously XNEW()'d. */
025311c4 219 base->~pretty_printer ();
5d038c4c 220 XDELETE (base);
d723bb7c
MLI
221
222 c_common_diagnostics_set_defaults (context);
223 diagnostic_format_decoder (context) = &c_tree_printer;
ede1a387 224}
65958285
ZL
225
226int
227c_types_compatible_p (tree x, tree y)
228{
d9ad7862 229 return comptypes (TYPE_MAIN_VARIANT (x), TYPE_MAIN_VARIANT (y));
65958285 230}
52ffd86e
MS
231
232/* Determine if the type is a vla type for the backend. */
233
234bool
235c_vla_unspec_p (tree x, tree fn ATTRIBUTE_UNUSED)
236{
237 return c_vla_type_p (x);
238}