OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [c-common.c] - Blame information for rev 309

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 280 jeremybenn
/* Subroutines shared by all languages that are variants of C.
2
   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3
   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4
   Free Software Foundation, Inc.
5
 
6
This file is part of GCC.
7
 
8
GCC is free software; you can redistribute it and/or modify it under
9
the terms of the GNU General Public License as published by the Free
10
Software Foundation; either version 3, or (at your option) any later
11
version.
12
 
13
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14
WARRANTY; without even the implied warranty of MERCHANTABILITY or
15
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16
for more details.
17
 
18
You should have received a copy of the GNU General Public License
19
along with GCC; see the file COPYING3.  If not see
20
<http://www.gnu.org/licenses/>.  */
21
 
22
#include "config.h"
23
#include "system.h"
24
#include "coretypes.h"
25
#include "tm.h"
26
#include "intl.h"
27
#include "tree.h"
28
#include "flags.h"
29
#include "output.h"
30
#include "c-pragma.h"
31
#include "rtl.h"
32
#include "ggc.h"
33
#include "varray.h"
34
#include "expr.h"
35
#include "c-common.h"
36
#include "tm_p.h"
37
#include "obstack.h"
38
#include "cpplib.h"
39
#include "target.h"
40
#include "langhooks.h"
41
#include "tree-inline.h"
42
#include "c-tree.h"
43
#include "toplev.h"
44
#include "diagnostic.h"
45
#include "tree-iterator.h"
46
#include "hashtab.h"
47
#include "tree-mudflap.h"
48
#include "opts.h"
49
#include "real.h"
50
#include "cgraph.h"
51
#include "target-def.h"
52
#include "gimple.h"
53
#include "fixed-value.h"
54
#include "libfuncs.h"
55
 
56
cpp_reader *parse_in;           /* Declared in c-pragma.h.  */
57
 
58
/* The following symbols are subsumed in the c_global_trees array, and
59
   listed here individually for documentation purposes.
60
 
61
   INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
62
 
63
        tree short_integer_type_node;
64
        tree long_integer_type_node;
65
        tree long_long_integer_type_node;
66
 
67
        tree short_unsigned_type_node;
68
        tree long_unsigned_type_node;
69
        tree long_long_unsigned_type_node;
70
 
71
        tree truthvalue_type_node;
72
        tree truthvalue_false_node;
73
        tree truthvalue_true_node;
74
 
75
        tree ptrdiff_type_node;
76
 
77
        tree unsigned_char_type_node;
78
        tree signed_char_type_node;
79
        tree wchar_type_node;
80
 
81
        tree char16_type_node;
82
        tree char32_type_node;
83
 
84
        tree float_type_node;
85
        tree double_type_node;
86
        tree long_double_type_node;
87
 
88
        tree complex_integer_type_node;
89
        tree complex_float_type_node;
90
        tree complex_double_type_node;
91
        tree complex_long_double_type_node;
92
 
93
        tree dfloat32_type_node;
94
        tree dfloat64_type_node;
95
        tree_dfloat128_type_node;
96
 
97
        tree intQI_type_node;
98
        tree intHI_type_node;
99
        tree intSI_type_node;
100
        tree intDI_type_node;
101
        tree intTI_type_node;
102
 
103
        tree unsigned_intQI_type_node;
104
        tree unsigned_intHI_type_node;
105
        tree unsigned_intSI_type_node;
106
        tree unsigned_intDI_type_node;
107
        tree unsigned_intTI_type_node;
108
 
109
        tree widest_integer_literal_type_node;
110
        tree widest_unsigned_literal_type_node;
111
 
112
   Nodes for types `void *' and `const void *'.
113
 
114
        tree ptr_type_node, const_ptr_type_node;
115
 
116
   Nodes for types `char *' and `const char *'.
117
 
118
        tree string_type_node, const_string_type_node;
119
 
120
   Type `char[SOMENUMBER]'.
121
   Used when an array of char is needed and the size is irrelevant.
122
 
123
        tree char_array_type_node;
124
 
125
   Type `int[SOMENUMBER]' or something like it.
126
   Used when an array of int needed and the size is irrelevant.
127
 
128
        tree int_array_type_node;
129
 
130
   Type `wchar_t[SOMENUMBER]' or something like it.
131
   Used when a wide string literal is created.
132
 
133
        tree wchar_array_type_node;
134
 
135
   Type `char16_t[SOMENUMBER]' or something like it.
136
   Used when a UTF-16 string literal is created.
137
 
138
        tree char16_array_type_node;
139
 
140
   Type `char32_t[SOMENUMBER]' or something like it.
141
   Used when a UTF-32 string literal is created.
142
 
143
        tree char32_array_type_node;
144
 
145
   Type `int ()' -- used for implicit declaration of functions.
146
 
147
        tree default_function_type;
148
 
149
   A VOID_TYPE node, packaged in a TREE_LIST.
150
 
151
        tree void_list_node;
152
 
153
  The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
154
  and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
155
  VAR_DECLS, but C++ does.)
156
 
157
        tree function_name_decl_node;
158
        tree pretty_function_name_decl_node;
159
        tree c99_function_name_decl_node;
160
 
161
  Stack of nested function name VAR_DECLs.
162
 
163
        tree saved_function_name_decls;
164
 
165
*/
166
 
167
tree c_global_trees[CTI_MAX];
168
 
169
/* Switches common to the C front ends.  */
170
 
171
/* Nonzero if preprocessing only.  */
172
 
173
int flag_preprocess_only;
174
 
175
/* Nonzero means don't output line number information.  */
176
 
177
char flag_no_line_commands;
178
 
179
/* Nonzero causes -E output not to be done, but directives such as
180
   #define that have side effects are still obeyed.  */
181
 
182
char flag_no_output;
183
 
184
/* Nonzero means dump macros in some fashion.  */
185
 
186
char flag_dump_macros;
187
 
188
/* Nonzero means pass #include lines through to the output.  */
189
 
190
char flag_dump_includes;
191
 
192
/* Nonzero means process PCH files while preprocessing.  */
193
 
194
bool flag_pch_preprocess;
195
 
196
/* The file name to which we should write a precompiled header, or
197
   NULL if no header will be written in this compile.  */
198
 
199
const char *pch_file;
200
 
201
/* Nonzero if an ISO standard was selected.  It rejects macros in the
202
   user's namespace.  */
203
int flag_iso;
204
 
205
/* Nonzero if -undef was given.  It suppresses target built-in macros
206
   and assertions.  */
207
int flag_undef;
208
 
209
/* Nonzero means don't recognize the non-ANSI builtin functions.  */
210
 
211
int flag_no_builtin;
212
 
213
/* Nonzero means don't recognize the non-ANSI builtin functions.
214
   -ansi sets this.  */
215
 
216
int flag_no_nonansi_builtin;
217
 
218
/* Nonzero means give `double' the same size as `float'.  */
219
 
220
int flag_short_double;
221
 
222
/* Nonzero means give `wchar_t' the same size as `short'.  */
223
 
224
int flag_short_wchar;
225
 
226
/* Nonzero means allow implicit conversions between vectors with
227
   differing numbers of subparts and/or differing element types.  */
228
int flag_lax_vector_conversions;
229
 
230
/* Nonzero means allow Microsoft extensions without warnings or errors.  */
231
int flag_ms_extensions;
232
 
233
/* Nonzero means don't recognize the keyword `asm'.  */
234
 
235
int flag_no_asm;
236
 
237
/* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
238
 
239
int flag_signed_bitfields = 1;
240
 
241
/* Warn about #pragma directives that are not recognized.  */
242
 
243
int warn_unknown_pragmas; /* Tri state variable.  */
244
 
245
/* Warn about format/argument anomalies in calls to formatted I/O functions
246
   (*printf, *scanf, strftime, strfmon, etc.).  */
247
 
248
int warn_format;
249
 
250
/* Warn about using __null (as NULL in C++) as sentinel.  For code compiled
251
   with GCC this doesn't matter as __null is guaranteed to have the right
252
   size.  */
253
 
254
int warn_strict_null_sentinel;
255
 
256
/* Zero means that faster, ...NonNil variants of objc_msgSend...
257
   calls will be used in ObjC; passing nil receivers to such calls
258
   will most likely result in crashes.  */
259
int flag_nil_receivers = 1;
260
 
261
/* Nonzero means that code generation will be altered to support
262
   "zero-link" execution.  This currently affects ObjC only, but may
263
   affect other languages in the future.  */
264
int flag_zero_link = 0;
265
 
266
/* Nonzero means emit an '__OBJC, __image_info' for the current translation
267
   unit.  It will inform the ObjC runtime that class definition(s) herein
268
   contained are to replace one(s) previously loaded.  */
269
int flag_replace_objc_classes = 0;
270
 
271
/* C/ObjC language option variables.  */
272
 
273
 
274
/* Nonzero means allow type mismatches in conditional expressions;
275
   just make their values `void'.  */
276
 
277
int flag_cond_mismatch;
278
 
279
/* Nonzero means enable C89 Amendment 1 features.  */
280
 
281
int flag_isoc94;
282
 
283
/* Nonzero means use the ISO C99 dialect of C.  */
284
 
285
int flag_isoc99;
286
 
287
/* Nonzero means that we have builtin functions, and main is an int.  */
288
 
289
int flag_hosted = 1;
290
 
291
 
292
/* ObjC language option variables.  */
293
 
294
 
295
/* Open and close the file for outputting class declarations, if
296
   requested (ObjC).  */
297
 
298
int flag_gen_declaration;
299
 
300
/* Tells the compiler that this is a special run.  Do not perform any
301
   compiling, instead we are to test some platform dependent features
302
   and output a C header file with appropriate definitions.  */
303
 
304
int print_struct_values;
305
 
306
/* Tells the compiler what is the constant string class for ObjC.  */
307
 
308
const char *constant_string_class_name;
309
 
310
 
311
/* C++ language option variables.  */
312
 
313
 
314
/* Nonzero means don't recognize any extension keywords.  */
315
 
316
int flag_no_gnu_keywords;
317
 
318
/* Nonzero means do emit exported implementations of functions even if
319
   they can be inlined.  */
320
 
321
int flag_implement_inlines = 1;
322
 
323
/* Nonzero means that implicit instantiations will be emitted if needed.  */
324
 
325
int flag_implicit_templates = 1;
326
 
327
/* Nonzero means that implicit instantiations of inline templates will be
328
   emitted if needed, even if instantiations of non-inline templates
329
   aren't.  */
330
 
331
int flag_implicit_inline_templates = 1;
332
 
333
/* Nonzero means generate separate instantiation control files and
334
   juggle them at link time.  */
335
 
336
int flag_use_repository;
337
 
338
/* Nonzero if we want to issue diagnostics that the standard says are not
339
   required.  */
340
 
341
int flag_optional_diags = 1;
342
 
343
/* Nonzero means we should attempt to elide constructors when possible.  */
344
 
345
int flag_elide_constructors = 1;
346
 
347
/* Nonzero means that member functions defined in class scope are
348
   inline by default.  */
349
 
350
int flag_default_inline = 1;
351
 
352
/* Controls whether compiler generates 'type descriptor' that give
353
   run-time type information.  */
354
 
355
int flag_rtti = 1;
356
 
357
/* Nonzero if we want to conserve space in the .o files.  We do this
358
   by putting uninitialized data and runtime initialized data into
359
   .common instead of .data at the expense of not flagging multiple
360
   definitions.  */
361
 
362
int flag_conserve_space;
363
 
364
/* Nonzero if we want to obey access control semantics.  */
365
 
366
int flag_access_control = 1;
367
 
368
/* Nonzero if we want to check the return value of new and avoid calling
369
   constructors if it is a null pointer.  */
370
 
371
int flag_check_new;
372
 
373
/* The C++ dialect being used. C++98 is the default.  */
374
 
375
enum cxx_dialect cxx_dialect = cxx98;
376
 
377
/* Nonzero if we want the new ISO rules for pushing a new scope for `for'
378
   initialization variables.
379
   0: Old rules, set by -fno-for-scope.
380
   2: New ISO rules, set by -ffor-scope.
381
   1: Try to implement new ISO rules, but with backup compatibility
382
   (and warnings).  This is the default, for now.  */
383
 
384
int flag_new_for_scope = 1;
385
 
386
/* Nonzero if we want to emit defined symbols with common-like linkage as
387
   weak symbols where possible, in order to conform to C++ semantics.
388
   Otherwise, emit them as local symbols.  */
389
 
390
int flag_weak = 1;
391
 
392
/* 0 means we want the preprocessor to not emit line directives for
393
   the current working directory.  1 means we want it to do it.  -1
394
   means we should decide depending on whether debugging information
395
   is being emitted or not.  */
396
 
397
int flag_working_directory = -1;
398
 
399
/* Nonzero to use __cxa_atexit, rather than atexit, to register
400
   destructors for local statics and global objects.  '2' means it has been
401
   set nonzero as a default, not by a command-line flag.  */
402
 
403
int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
404
 
405
/* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
406
   code.  '2' means it has not been set explicitly on the command line.  */
407
 
408
int flag_use_cxa_get_exception_ptr = 2;
409
 
410
/* Nonzero means to implement standard semantics for exception
411
   specifications, calling unexpected if an exception is thrown that
412
   doesn't match the specification.  Zero means to treat them as
413
   assertions and optimize accordingly, but not check them.  */
414
 
415
int flag_enforce_eh_specs = 1;
416
 
417
/* Nonzero means to generate thread-safe code for initializing local
418
   statics.  */
419
 
420
int flag_threadsafe_statics = 1;
421
 
422
/* Nonzero if we want to pretty-print template specializations as the
423
   template signature followed by the arguments.  */
424
 
425
int flag_pretty_templates = 1;
426
 
427
/* Nonzero means warn about implicit declarations.  */
428
 
429
int warn_implicit = 1;
430
 
431
/* Maximum template instantiation depth.  This limit exists to limit the
432
   time it takes to notice infinite template instantiations; the default
433
   value of 1024 is likely to be in the next C++ standard.  */
434
 
435
int max_tinst_depth = 1024;
436
 
437
 
438
 
439
/* The elements of `ridpointers' are identifier nodes for the reserved
440
   type names and storage classes.  It is indexed by a RID_... value.  */
441
tree *ridpointers;
442
 
443
tree (*make_fname_decl) (location_t, tree, int);
444
 
445
/* Nonzero means don't warn about problems that occur when the code is
446
   executed.  */
447
int c_inhibit_evaluation_warnings;
448
 
449
/* Whether lexing has been completed, so subsequent preprocessor
450
   errors should use the compiler's input_location.  */
451
bool done_lexing = false;
452
 
453
/* Information about how a function name is generated.  */
454
struct fname_var_t
455
{
456
  tree *const decl;     /* pointer to the VAR_DECL.  */
457
  const unsigned rid;   /* RID number for the identifier.  */
458
  const int pretty;     /* How pretty is it? */
459
};
460
 
461
/* The three ways of getting then name of the current function.  */
462
 
463
const struct fname_var_t fname_vars[] =
464
{
465
  /* C99 compliant __func__, must be first.  */
466
  {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
467
  /* GCC __FUNCTION__ compliant.  */
468
  {&function_name_decl_node, RID_FUNCTION_NAME, 0},
469
  /* GCC __PRETTY_FUNCTION__ compliant.  */
470
  {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
471
  {NULL, 0, 0},
472
};
473
 
474
static tree c_fully_fold_internal (tree expr, bool, bool *, bool *);
475
static tree check_case_value (tree);
476
static bool check_case_bounds (tree, tree, tree *, tree *);
477
 
478
static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
479
static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
480
static tree handle_common_attribute (tree *, tree, tree, int, bool *);
481
static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
482
static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
483
static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
484
static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
485
static tree handle_noclone_attribute (tree *, tree, tree, int, bool *);
486
static tree handle_always_inline_attribute (tree *, tree, tree, int,
487
                                            bool *);
488
static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
489
static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
490
static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
491
static tree handle_error_attribute (tree *, tree, tree, int, bool *);
492
static tree handle_used_attribute (tree *, tree, tree, int, bool *);
493
static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
494
static tree handle_externally_visible_attribute (tree *, tree, tree, int,
495
                                                 bool *);
496
static tree handle_const_attribute (tree *, tree, tree, int, bool *);
497
static tree handle_transparent_union_attribute (tree *, tree, tree,
498
                                                int, bool *);
499
static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
500
static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
501
static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
502
static tree handle_section_attribute (tree *, tree, tree, int, bool *);
503
static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
504
static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
505
static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
506
static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
507
static tree handle_visibility_attribute (tree *, tree, tree, int,
508
                                         bool *);
509
static tree handle_tls_model_attribute (tree *, tree, tree, int,
510
                                        bool *);
511
static tree handle_no_instrument_function_attribute (tree *, tree,
512
                                                     tree, int, bool *);
513
static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
514
static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
515
static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
516
                                             bool *);
517
static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
518
static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
519
static tree handle_deprecated_attribute (tree *, tree, tree, int,
520
                                         bool *);
521
static tree handle_vector_size_attribute (tree *, tree, tree, int,
522
                                          bool *);
523
static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
524
static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
525
static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
526
static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
527
                                                 bool *);
528
static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
529
static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
530
static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
531
static tree handle_target_attribute (tree *, tree, tree, int, bool *);
532
static tree handle_optimize_attribute (tree *, tree, tree, int, bool *);
533
 
534
static void check_function_nonnull (tree, int, tree *);
535
static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
536
static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
537
static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
538
static int resort_field_decl_cmp (const void *, const void *);
539
 
540
/* Reserved words.  The third field is a mask: keywords are disabled
541
   if they match the mask.
542
 
543
   Masks for languages:
544
   C --std=c89: D_C99 | D_CXXONLY | D_OBJC | D_CXX_OBJC
545
   C --std=c99: D_CXXONLY | D_OBJC
546
   ObjC is like C except that D_OBJC and D_CXX_OBJC are not set
547
   C++ --std=c98: D_CONLY | D_CXXOX | D_OBJC
548
   C++ --std=c0x: D_CONLY | D_OBJC
549
   ObjC++ is like C++ except that D_OBJC is not set
550
 
551
   If -fno-asm is used, D_ASM is added to the mask.  If
552
   -fno-gnu-keywords is used, D_EXT is added.  If -fno-asm and C in
553
   C89 mode, D_EXT89 is added for both -fno-asm and -fno-gnu-keywords.
554
   In C with -Wc++-compat, we warn if D_CXXWARN is set.  */
555
 
556
const struct c_common_resword c_common_reswords[] =
557
{
558
  { "_Bool",            RID_BOOL,      D_CONLY },
559
  { "_Complex",         RID_COMPLEX,    0 },
560
  { "_Imaginary",       RID_IMAGINARY, D_CONLY },
561
  { "_Decimal32",       RID_DFLOAT32,  D_CONLY | D_EXT },
562
  { "_Decimal64",       RID_DFLOAT64,  D_CONLY | D_EXT },
563
  { "_Decimal128",      RID_DFLOAT128, D_CONLY | D_EXT },
564
  { "_Fract",           RID_FRACT,     D_CONLY | D_EXT },
565
  { "_Accum",           RID_ACCUM,     D_CONLY | D_EXT },
566
  { "_Sat",             RID_SAT,       D_CONLY | D_EXT },
567
  { "__FUNCTION__",     RID_FUNCTION_NAME, 0 },
568
  { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
569
  { "__alignof",        RID_ALIGNOF,    0 },
570
  { "__alignof__",      RID_ALIGNOF,    0 },
571
  { "__asm",            RID_ASM,        0 },
572
  { "__asm__",          RID_ASM,        0 },
573
  { "__attribute",      RID_ATTRIBUTE,  0 },
574
  { "__attribute__",    RID_ATTRIBUTE,  0 },
575
  { "__builtin_choose_expr", RID_CHOOSE_EXPR, D_CONLY },
576
  { "__builtin_offsetof", RID_OFFSETOF, 0 },
577
  { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
578
  { "__builtin_va_arg", RID_VA_ARG,     0 },
579
  { "__complex",        RID_COMPLEX,    0 },
580
  { "__complex__",      RID_COMPLEX,    0 },
581
  { "__const",          RID_CONST,      0 },
582
  { "__const__",        RID_CONST,      0 },
583
  { "__decltype",       RID_DECLTYPE,   D_CXXONLY },
584
  { "__extension__",    RID_EXTENSION,  0 },
585
  { "__func__",         RID_C99_FUNCTION_NAME, 0 },
586
  { "__has_nothrow_assign", RID_HAS_NOTHROW_ASSIGN, D_CXXONLY },
587
  { "__has_nothrow_constructor", RID_HAS_NOTHROW_CONSTRUCTOR, D_CXXONLY },
588
  { "__has_nothrow_copy", RID_HAS_NOTHROW_COPY, D_CXXONLY },
589
  { "__has_trivial_assign", RID_HAS_TRIVIAL_ASSIGN, D_CXXONLY },
590
  { "__has_trivial_constructor", RID_HAS_TRIVIAL_CONSTRUCTOR, D_CXXONLY },
591
  { "__has_trivial_copy", RID_HAS_TRIVIAL_COPY, D_CXXONLY },
592
  { "__has_trivial_destructor", RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY },
593
  { "__has_virtual_destructor", RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY },
594
  { "__is_abstract",    RID_IS_ABSTRACT, D_CXXONLY },
595
  { "__is_base_of",     RID_IS_BASE_OF, D_CXXONLY },
596
  { "__is_class",       RID_IS_CLASS,   D_CXXONLY },
597
  { "__is_convertible_to", RID_IS_CONVERTIBLE_TO, D_CXXONLY },
598
  { "__is_empty",       RID_IS_EMPTY,   D_CXXONLY },
599
  { "__is_enum",        RID_IS_ENUM,    D_CXXONLY },
600
  { "__is_pod",         RID_IS_POD,     D_CXXONLY },
601
  { "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY },
602
  { "__is_standard_layout", RID_IS_STD_LAYOUT, D_CXXONLY },
603
  { "__is_trivial",     RID_IS_TRIVIAL, D_CXXONLY },
604
  { "__is_union",       RID_IS_UNION,   D_CXXONLY },
605
  { "__imag",           RID_IMAGPART,   0 },
606
  { "__imag__",         RID_IMAGPART,   0 },
607
  { "__inline",         RID_INLINE,     0 },
608
  { "__inline__",       RID_INLINE,     0 },
609
  { "__label__",        RID_LABEL,      0 },
610
  { "__null",           RID_NULL,       0 },
611
  { "__real",           RID_REALPART,   0 },
612
  { "__real__",         RID_REALPART,   0 },
613
  { "__restrict",       RID_RESTRICT,   0 },
614
  { "__restrict__",     RID_RESTRICT,   0 },
615
  { "__signed",         RID_SIGNED,     0 },
616
  { "__signed__",       RID_SIGNED,     0 },
617
  { "__thread",         RID_THREAD,     0 },
618
  { "__typeof",         RID_TYPEOF,     0 },
619
  { "__typeof__",       RID_TYPEOF,     0 },
620
  { "__volatile",       RID_VOLATILE,   0 },
621
  { "__volatile__",     RID_VOLATILE,   0 },
622
  { "alignof",          RID_ALIGNOF,    D_CXXONLY | D_CXX0X | D_CXXWARN },
623
  { "asm",              RID_ASM,        D_ASM },
624
  { "auto",             RID_AUTO,       0 },
625
  { "bool",             RID_BOOL,       D_CXXONLY | D_CXXWARN },
626
  { "break",            RID_BREAK,      0 },
627
  { "case",             RID_CASE,       0 },
628
  { "catch",            RID_CATCH,      D_CXX_OBJC | D_CXXWARN },
629
  { "char",             RID_CHAR,       0 },
630
  { "char16_t",         RID_CHAR16,     D_CXXONLY | D_CXX0X | D_CXXWARN },
631
  { "char32_t",         RID_CHAR32,     D_CXXONLY | D_CXX0X | D_CXXWARN },
632
  { "class",            RID_CLASS,      D_CXX_OBJC | D_CXXWARN },
633
  { "const",            RID_CONST,      0 },
634
  { "constexpr",        RID_CONSTEXPR,  D_CXXONLY | D_CXX0X | D_CXXWARN },
635
  { "const_cast",       RID_CONSTCAST,  D_CXXONLY | D_CXXWARN },
636
  { "continue",         RID_CONTINUE,   0 },
637
  { "decltype",         RID_DECLTYPE,   D_CXXONLY | D_CXX0X | D_CXXWARN },
638
  { "default",          RID_DEFAULT,    0 },
639
  { "delete",           RID_DELETE,     D_CXXONLY | D_CXXWARN },
640
  { "do",               RID_DO,         0 },
641
  { "double",           RID_DOUBLE,     0 },
642
  { "dynamic_cast",     RID_DYNCAST,    D_CXXONLY | D_CXXWARN },
643
  { "else",             RID_ELSE,       0 },
644
  { "enum",             RID_ENUM,       0 },
645
  { "explicit",         RID_EXPLICIT,   D_CXXONLY | D_CXXWARN },
646
  { "export",           RID_EXPORT,     D_CXXONLY | D_CXXWARN },
647
  { "extern",           RID_EXTERN,     0 },
648
  { "false",            RID_FALSE,      D_CXXONLY | D_CXXWARN },
649
  { "float",            RID_FLOAT,      0 },
650
  { "for",              RID_FOR,        0 },
651
  { "friend",           RID_FRIEND,     D_CXXONLY | D_CXXWARN },
652
  { "goto",             RID_GOTO,       0 },
653
  { "if",               RID_IF,         0 },
654
  { "inline",           RID_INLINE,     D_EXT89 },
655
  { "int",              RID_INT,        0 },
656
  { "long",             RID_LONG,       0 },
657
  { "mutable",          RID_MUTABLE,    D_CXXONLY | D_CXXWARN },
658
  { "namespace",        RID_NAMESPACE,  D_CXXONLY | D_CXXWARN },
659
  { "new",              RID_NEW,        D_CXXONLY | D_CXXWARN },
660
  { "operator",         RID_OPERATOR,   D_CXXONLY | D_CXXWARN },
661
  { "private",          RID_PRIVATE,    D_CXX_OBJC | D_CXXWARN },
662
  { "protected",        RID_PROTECTED,  D_CXX_OBJC | D_CXXWARN },
663
  { "public",           RID_PUBLIC,     D_CXX_OBJC | D_CXXWARN },
664
  { "register",         RID_REGISTER,   0 },
665
  { "reinterpret_cast", RID_REINTCAST,  D_CXXONLY | D_CXXWARN },
666
  { "restrict",         RID_RESTRICT,   D_CONLY | D_C99 },
667
  { "return",           RID_RETURN,     0 },
668
  { "short",            RID_SHORT,      0 },
669
  { "signed",           RID_SIGNED,     0 },
670
  { "sizeof",           RID_SIZEOF,     0 },
671
  { "static",           RID_STATIC,     0 },
672
  { "static_assert",    RID_STATIC_ASSERT, D_CXXONLY | D_CXX0X | D_CXXWARN },
673
  { "static_cast",      RID_STATCAST,   D_CXXONLY | D_CXXWARN },
674
  { "struct",           RID_STRUCT,     0 },
675
  { "switch",           RID_SWITCH,     0 },
676
  { "template",         RID_TEMPLATE,   D_CXXONLY | D_CXXWARN },
677
  { "this",             RID_THIS,       D_CXXONLY | D_CXXWARN },
678
  { "throw",            RID_THROW,      D_CXX_OBJC | D_CXXWARN },
679
  { "true",             RID_TRUE,       D_CXXONLY | D_CXXWARN },
680
  { "try",              RID_TRY,        D_CXX_OBJC | D_CXXWARN },
681
  { "typedef",          RID_TYPEDEF,    0 },
682
  { "typename",         RID_TYPENAME,   D_CXXONLY | D_CXXWARN },
683
  { "typeid",           RID_TYPEID,     D_CXXONLY | D_CXXWARN },
684
  { "typeof",           RID_TYPEOF,     D_ASM | D_EXT },
685
  { "union",            RID_UNION,      0 },
686
  { "unsigned",         RID_UNSIGNED,   0 },
687
  { "using",            RID_USING,      D_CXXONLY | D_CXXWARN },
688
  { "virtual",          RID_VIRTUAL,    D_CXXONLY | D_CXXWARN },
689
  { "void",             RID_VOID,       0 },
690
  { "volatile",         RID_VOLATILE,   0 },
691
  { "wchar_t",          RID_WCHAR,      D_CXXONLY },
692
  { "while",            RID_WHILE,      0 },
693
  /* These Objective-C keywords are recognized only immediately after
694
     an '@'.  */
695
  { "compatibility_alias", RID_AT_ALIAS,        D_OBJC },
696
  { "defs",             RID_AT_DEFS,            D_OBJC },
697
  { "encode",           RID_AT_ENCODE,          D_OBJC },
698
  { "end",              RID_AT_END,             D_OBJC },
699
  { "implementation",   RID_AT_IMPLEMENTATION,  D_OBJC },
700
  { "interface",        RID_AT_INTERFACE,       D_OBJC },
701
  { "protocol",         RID_AT_PROTOCOL,        D_OBJC },
702
  { "selector",         RID_AT_SELECTOR,        D_OBJC },
703
  { "finally",          RID_AT_FINALLY,         D_OBJC },
704
  { "synchronized",     RID_AT_SYNCHRONIZED,    D_OBJC },
705
  /* These are recognized only in protocol-qualifier context
706
     (see above) */
707
  { "bycopy",           RID_BYCOPY,             D_OBJC },
708
  { "byref",            RID_BYREF,              D_OBJC },
709
  { "in",               RID_IN,                 D_OBJC },
710
  { "inout",            RID_INOUT,              D_OBJC },
711
  { "oneway",           RID_ONEWAY,             D_OBJC },
712
  { "out",              RID_OUT,                D_OBJC },
713
 
714
#ifdef TARGET_ADDR_SPACE_KEYWORDS
715
  /* Any address space keywords recognized by the target.  */
716
  TARGET_ADDR_SPACE_KEYWORDS,
717
#endif
718
};
719
 
720
const unsigned int num_c_common_reswords =
721
  sizeof c_common_reswords / sizeof (struct c_common_resword);
722
 
723
/* Table of machine-independent attributes common to all C-like languages.  */
724
const struct attribute_spec c_common_attribute_table[] =
725
{
726
  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
727
  { "packed",                 0, 0, false, false, false,
728
                              handle_packed_attribute },
729
  { "nocommon",               0, 0, true,  false, false,
730
                              handle_nocommon_attribute },
731
  { "common",                 0, 0, true,  false, false,
732
                              handle_common_attribute },
733
  /* FIXME: logically, noreturn attributes should be listed as
734
     "false, true, true" and apply to function types.  But implementing this
735
     would require all the places in the compiler that use TREE_THIS_VOLATILE
736
     on a decl to identify non-returning functions to be located and fixed
737
     to check the function type instead.  */
738
  { "noreturn",               0, 0, true,  false, false,
739
                              handle_noreturn_attribute },
740
  { "volatile",               0, 0, true,  false, false,
741
                              handle_noreturn_attribute },
742
  { "noinline",               0, 0, true,  false, false,
743
                              handle_noinline_attribute },
744
  { "noclone",                0, 0, true,  false, false,
745
                              handle_noclone_attribute },
746
  { "always_inline",          0, 0, true,  false, false,
747
                              handle_always_inline_attribute },
748
  { "gnu_inline",             0, 0, true,  false, false,
749
                              handle_gnu_inline_attribute },
750
  { "artificial",             0, 0, true,  false, false,
751
                              handle_artificial_attribute },
752
  { "flatten",                0, 0, true,  false, false,
753
                              handle_flatten_attribute },
754
  { "used",                   0, 0, true,  false, false,
755
                              handle_used_attribute },
756
  { "unused",                 0, 0, false, false, false,
757
                              handle_unused_attribute },
758
  { "externally_visible",     0, 0, true,  false, false,
759
                              handle_externally_visible_attribute },
760
  /* The same comments as for noreturn attributes apply to const ones.  */
761
  { "const",                  0, 0, true,  false, false,
762
                              handle_const_attribute },
763
  { "transparent_union",      0, 0, false, false, false,
764
                              handle_transparent_union_attribute },
765
  { "constructor",            0, 1, true,  false, false,
766
                              handle_constructor_attribute },
767
  { "destructor",             0, 1, true,  false, false,
768
                              handle_destructor_attribute },
769
  { "mode",                   1, 1, false,  true, false,
770
                              handle_mode_attribute },
771
  { "section",                1, 1, true,  false, false,
772
                              handle_section_attribute },
773
  { "aligned",                0, 1, false, false, false,
774
                              handle_aligned_attribute },
775
  { "weak",                   0, 0, true,  false, false,
776
                              handle_weak_attribute },
777
  { "alias",                  1, 1, true,  false, false,
778
                              handle_alias_attribute },
779
  { "weakref",                0, 1, true,  false, false,
780
                              handle_weakref_attribute },
781
  { "no_instrument_function", 0, 0, true,  false, false,
782
                              handle_no_instrument_function_attribute },
783
  { "malloc",                 0, 0, true,  false, false,
784
                              handle_malloc_attribute },
785
  { "returns_twice",          0, 0, true,  false, false,
786
                              handle_returns_twice_attribute },
787
  { "no_stack_limit",         0, 0, true,  false, false,
788
                              handle_no_limit_stack_attribute },
789
  { "pure",                   0, 0, true,  false, false,
790
                              handle_pure_attribute },
791
  /* For internal use (marking of builtins) only.  The name contains space
792
     to prevent its usage in source code.  */
793
  { "no vops",                0, 0, true,  false, false,
794
                              handle_novops_attribute },
795
  { "deprecated",             0, 1, false, false, false,
796
                              handle_deprecated_attribute },
797
  { "vector_size",            1, 1, false, true, false,
798
                              handle_vector_size_attribute },
799
  { "visibility",             1, 1, false, false, false,
800
                              handle_visibility_attribute },
801
  { "tls_model",              1, 1, true,  false, false,
802
                              handle_tls_model_attribute },
803
  { "nonnull",                0, -1, false, true, true,
804
                              handle_nonnull_attribute },
805
  { "nothrow",                0, 0, true,  false, false,
806
                              handle_nothrow_attribute },
807
  { "may_alias",              0, 0, false, true, false, NULL },
808
  { "cleanup",                1, 1, true, false, false,
809
                              handle_cleanup_attribute },
810
  { "warn_unused_result",     0, 0, false, true, true,
811
                              handle_warn_unused_result_attribute },
812
  { "sentinel",               0, 1, false, true, true,
813
                              handle_sentinel_attribute },
814
  /* For internal use (marking of builtins) only.  The name contains space
815
     to prevent its usage in source code.  */
816
  { "type generic",           0, 0, false, true, true,
817
                              handle_type_generic_attribute },
818
  { "alloc_size",             1, 2, false, true, true,
819
                              handle_alloc_size_attribute },
820
  { "cold",                   0, 0, true,  false, false,
821
                              handle_cold_attribute },
822
  { "hot",                    0, 0, true,  false, false,
823
                              handle_hot_attribute },
824
  { "warning",                1, 1, true,  false, false,
825
                              handle_error_attribute },
826
  { "error",                  1, 1, true,  false, false,
827
                              handle_error_attribute },
828
  { "target",                 1, -1, true, false, false,
829
                              handle_target_attribute },
830
  { "optimize",               1, -1, true, false, false,
831
                              handle_optimize_attribute },
832
  { NULL,                     0, 0, false, false, false, NULL }
833
};
834
 
835
/* Give the specifications for the format attributes, used by C and all
836
   descendants.  */
837
 
838
const struct attribute_spec c_common_format_attribute_table[] =
839
{
840
  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
841
  { "format",                 3, 3, false, true,  true,
842
                              handle_format_attribute },
843
  { "format_arg",             1, 1, false, true,  true,
844
                              handle_format_arg_attribute },
845
  { NULL,                     0, 0, false, false, false, NULL }
846
};
847
 
848
/* Return identifier for address space AS.  */
849
const char *
850
c_addr_space_name (addr_space_t as)
851
{
852
  unsigned int i;
853
 
854
  for (i = 0; i < num_c_common_reswords; i++)
855
    if (c_common_reswords[i].rid == RID_FIRST_ADDR_SPACE + as)
856
      return c_common_reswords[i].word;
857
 
858
  gcc_unreachable ();
859
}
860
 
861
/* Push current bindings for the function name VAR_DECLS.  */
862
 
863
void
864
start_fname_decls (void)
865
{
866
  unsigned ix;
867
  tree saved = NULL_TREE;
868
 
869
  for (ix = 0; fname_vars[ix].decl; ix++)
870
    {
871
      tree decl = *fname_vars[ix].decl;
872
 
873
      if (decl)
874
        {
875
          saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
876
          *fname_vars[ix].decl = NULL_TREE;
877
        }
878
    }
879
  if (saved || saved_function_name_decls)
880
    /* Normally they'll have been NULL, so only push if we've got a
881
       stack, or they are non-NULL.  */
882
    saved_function_name_decls = tree_cons (saved, NULL_TREE,
883
                                           saved_function_name_decls);
884
}
885
 
886
/* Finish up the current bindings, adding them into the current function's
887
   statement tree.  This must be done _before_ finish_stmt_tree is called.
888
   If there is no current function, we must be at file scope and no statements
889
   are involved. Pop the previous bindings.  */
890
 
891
void
892
finish_fname_decls (void)
893
{
894
  unsigned ix;
895
  tree stmts = NULL_TREE;
896
  tree stack = saved_function_name_decls;
897
 
898
  for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
899
    append_to_statement_list (TREE_VALUE (stack), &stmts);
900
 
901
  if (stmts)
902
    {
903
      tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
904
 
905
      if (TREE_CODE (*bodyp) == BIND_EXPR)
906
        bodyp = &BIND_EXPR_BODY (*bodyp);
907
 
908
      append_to_statement_list_force (*bodyp, &stmts);
909
      *bodyp = stmts;
910
    }
911
 
912
  for (ix = 0; fname_vars[ix].decl; ix++)
913
    *fname_vars[ix].decl = NULL_TREE;
914
 
915
  if (stack)
916
    {
917
      /* We had saved values, restore them.  */
918
      tree saved;
919
 
920
      for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
921
        {
922
          tree decl = TREE_PURPOSE (saved);
923
          unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
924
 
925
          *fname_vars[ix].decl = decl;
926
        }
927
      stack = TREE_CHAIN (stack);
928
    }
929
  saved_function_name_decls = stack;
930
}
931
 
932
/* Return the text name of the current function, suitably prettified
933
   by PRETTY_P.  Return string must be freed by caller.  */
934
 
935
const char *
936
fname_as_string (int pretty_p)
937
{
938
  const char *name = "top level";
939
  char *namep;
940
  int vrb = 2, len;
941
  cpp_string cstr = { 0, 0 }, strname;
942
 
943
  if (!pretty_p)
944
    {
945
      name = "";
946
      vrb = 0;
947
    }
948
 
949
  if (current_function_decl)
950
    name = lang_hooks.decl_printable_name (current_function_decl, vrb);
951
 
952
  len = strlen (name) + 3; /* Two for '"'s.  One for NULL.  */
953
 
954
  namep = XNEWVEC (char, len);
955
  snprintf (namep, len, "\"%s\"", name);
956
  strname.text = (unsigned char *) namep;
957
  strname.len = len - 1;
958
 
959
  if (cpp_interpret_string (parse_in, &strname, 1, &cstr, CPP_STRING))
960
    {
961
      XDELETEVEC (namep);
962
      return (const char *) cstr.text;
963
    }
964
 
965
  return namep;
966
}
967
 
968
/* Return the VAR_DECL for a const char array naming the current
969
   function. If the VAR_DECL has not yet been created, create it
970
   now. RID indicates how it should be formatted and IDENTIFIER_NODE
971
   ID is its name (unfortunately C and C++ hold the RID values of
972
   keywords in different places, so we can't derive RID from ID in
973
   this language independent code. LOC is the location of the
974
   function.  */
975
 
976
tree
977
fname_decl (location_t loc, unsigned int rid, tree id)
978
{
979
  unsigned ix;
980
  tree decl = NULL_TREE;
981
 
982
  for (ix = 0; fname_vars[ix].decl; ix++)
983
    if (fname_vars[ix].rid == rid)
984
      break;
985
 
986
  decl = *fname_vars[ix].decl;
987
  if (!decl)
988
    {
989
      /* If a tree is built here, it would normally have the lineno of
990
         the current statement.  Later this tree will be moved to the
991
         beginning of the function and this line number will be wrong.
992
         To avoid this problem set the lineno to 0 here; that prevents
993
         it from appearing in the RTL.  */
994
      tree stmts;
995
      location_t saved_location = input_location;
996
      input_location = UNKNOWN_LOCATION;
997
 
998
      stmts = push_stmt_list ();
999
      decl = (*make_fname_decl) (loc, id, fname_vars[ix].pretty);
1000
      stmts = pop_stmt_list (stmts);
1001
      if (!IS_EMPTY_STMT (stmts))
1002
        saved_function_name_decls
1003
          = tree_cons (decl, stmts, saved_function_name_decls);
1004
      *fname_vars[ix].decl = decl;
1005
      input_location = saved_location;
1006
    }
1007
  if (!ix && !current_function_decl)
1008
    pedwarn (loc, 0, "%qD is not defined outside of function scope", decl);
1009
 
1010
  return decl;
1011
}
1012
 
1013
/* Given a STRING_CST, give it a suitable array-of-chars data type.  */
1014
 
1015
tree
1016
fix_string_type (tree value)
1017
{
1018
  int length = TREE_STRING_LENGTH (value);
1019
  int nchars;
1020
  tree e_type, i_type, a_type;
1021
 
1022
  /* Compute the number of elements, for the array type.  */
1023
  if (TREE_TYPE (value) == char_array_type_node || !TREE_TYPE (value))
1024
    {
1025
      nchars = length;
1026
      e_type = char_type_node;
1027
    }
1028
  else if (TREE_TYPE (value) == char16_array_type_node)
1029
    {
1030
      nchars = length / (TYPE_PRECISION (char16_type_node) / BITS_PER_UNIT);
1031
      e_type = char16_type_node;
1032
    }
1033
  else if (TREE_TYPE (value) == char32_array_type_node)
1034
    {
1035
      nchars = length / (TYPE_PRECISION (char32_type_node) / BITS_PER_UNIT);
1036
      e_type = char32_type_node;
1037
    }
1038
  else
1039
    {
1040
      nchars = length / (TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT);
1041
      e_type = wchar_type_node;
1042
    }
1043
 
1044
  /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits).  The analogous
1045
     limit in C++98 Annex B is very large (65536) and is not normative,
1046
     so we do not diagnose it (warn_overlength_strings is forced off
1047
     in c_common_post_options).  */
1048
  if (warn_overlength_strings)
1049
    {
1050
      const int nchars_max = flag_isoc99 ? 4095 : 509;
1051
      const int relevant_std = flag_isoc99 ? 99 : 90;
1052
      if (nchars - 1 > nchars_max)
1053
        /* Translators: The %d after 'ISO C' will be 90 or 99.  Do not
1054
           separate the %d from the 'C'.  'ISO' should not be
1055
           translated, but it may be moved after 'C%d' in languages
1056
           where modifiers follow nouns.  */
1057
        pedwarn (input_location, OPT_Woverlength_strings,
1058
                 "string length %qd is greater than the length %qd "
1059
                 "ISO C%d compilers are required to support",
1060
                 nchars - 1, nchars_max, relevant_std);
1061
    }
1062
 
1063
  /* Create the array type for the string constant.  The ISO C++
1064
     standard says that a string literal has type `const char[N]' or
1065
     `const wchar_t[N]'.  We use the same logic when invoked as a C
1066
     front-end with -Wwrite-strings.
1067
     ??? We should change the type of an expression depending on the
1068
     state of a warning flag.  We should just be warning -- see how
1069
     this is handled in the C++ front-end for the deprecated implicit
1070
     conversion from string literals to `char*' or `wchar_t*'.
1071
 
1072
     The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
1073
     array type being the unqualified version of that type.
1074
     Therefore, if we are constructing an array of const char, we must
1075
     construct the matching unqualified array type first.  The C front
1076
     end does not require this, but it does no harm, so we do it
1077
     unconditionally.  */
1078
  i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
1079
  a_type = build_array_type (e_type, i_type);
1080
  if (c_dialect_cxx() || warn_write_strings)
1081
    a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
1082
 
1083
  TREE_TYPE (value) = a_type;
1084
  TREE_CONSTANT (value) = 1;
1085
  TREE_READONLY (value) = 1;
1086
  TREE_STATIC (value) = 1;
1087
  return value;
1088
}
1089
 
1090
/* Fully fold EXPR, an expression that was not folded (beyond integer
1091
   constant expressions and null pointer constants) when being built
1092
   up.  If IN_INIT, this is in a static initializer and certain
1093
   changes are made to the folding done.  Clear *MAYBE_CONST if
1094
   MAYBE_CONST is not NULL and EXPR is definitely not a constant
1095
   expression because it contains an evaluated operator (in C99) or an
1096
   operator outside of sizeof returning an integer constant (in C90)
1097
   not permitted in constant expressions, or because it contains an
1098
   evaluated arithmetic overflow.  (*MAYBE_CONST should typically be
1099
   set to true by callers before calling this function.)  Return the
1100
   folded expression.  Function arguments have already been folded
1101
   before calling this function, as have the contents of SAVE_EXPR,
1102
   TARGET_EXPR, BIND_EXPR, VA_ARG_EXPR, OBJ_TYPE_REF and
1103
   C_MAYBE_CONST_EXPR.  */
1104
 
1105
tree
1106
c_fully_fold (tree expr, bool in_init, bool *maybe_const)
1107
{
1108
  tree ret;
1109
  tree eptype = NULL_TREE;
1110
  bool dummy = true;
1111
  bool maybe_const_itself = true;
1112
  location_t loc = EXPR_LOCATION (expr);
1113
 
1114
  /* This function is not relevant to C++ because C++ folds while
1115
     parsing, and may need changes to be correct for C++ when C++
1116
     stops folding while parsing.  */
1117
  if (c_dialect_cxx ())
1118
    gcc_unreachable ();
1119
 
1120
  if (!maybe_const)
1121
    maybe_const = &dummy;
1122
  if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
1123
    {
1124
      eptype = TREE_TYPE (expr);
1125
      expr = TREE_OPERAND (expr, 0);
1126
    }
1127
  ret = c_fully_fold_internal (expr, in_init, maybe_const,
1128
                               &maybe_const_itself);
1129
  if (eptype)
1130
    ret = fold_convert_loc (loc, eptype, ret);
1131
  *maybe_const &= maybe_const_itself;
1132
  return ret;
1133
}
1134
 
1135
/* Internal helper for c_fully_fold.  EXPR and IN_INIT are as for
1136
   c_fully_fold.  *MAYBE_CONST_OPERANDS is cleared because of operands
1137
   not permitted, while *MAYBE_CONST_ITSELF is cleared because of
1138
   arithmetic overflow (for C90, *MAYBE_CONST_OPERANDS is carried from
1139
   both evaluated and unevaluated subexpressions while
1140
   *MAYBE_CONST_ITSELF is carried from only evaluated
1141
   subexpressions).  */
1142
 
1143
static tree
1144
c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
1145
                       bool *maybe_const_itself)
1146
{
1147
  tree ret = expr;
1148
  enum tree_code code = TREE_CODE (expr);
1149
  enum tree_code_class kind = TREE_CODE_CLASS (code);
1150
  location_t loc = EXPR_LOCATION (expr);
1151
  tree op0, op1, op2, op3;
1152
  tree orig_op0, orig_op1, orig_op2;
1153
  bool op0_const = true, op1_const = true, op2_const = true;
1154
  bool op0_const_self = true, op1_const_self = true, op2_const_self = true;
1155
  bool nowarning = TREE_NO_WARNING (expr);
1156
  int unused_p;
1157
 
1158
  /* This function is not relevant to C++ because C++ folds while
1159
     parsing, and may need changes to be correct for C++ when C++
1160
     stops folding while parsing.  */
1161
  if (c_dialect_cxx ())
1162
    gcc_unreachable ();
1163
 
1164
  /* Constants, declarations, statements, errors, SAVE_EXPRs and
1165
     anything else not counted as an expression cannot usefully be
1166
     folded further at this point.  */
1167
  if (!IS_EXPR_CODE_CLASS (kind)
1168
      || kind == tcc_statement
1169
      || code == SAVE_EXPR)
1170
    return expr;
1171
 
1172
  /* Operands of variable-length expressions (function calls) have
1173
     already been folded, as have __builtin_* function calls, and such
1174
     expressions cannot occur in constant expressions.  */
1175
  if (kind == tcc_vl_exp)
1176
    {
1177
      *maybe_const_operands = false;
1178
      ret = fold (expr);
1179
      goto out;
1180
    }
1181
 
1182
  if (code == C_MAYBE_CONST_EXPR)
1183
    {
1184
      tree pre = C_MAYBE_CONST_EXPR_PRE (expr);
1185
      tree inner = C_MAYBE_CONST_EXPR_EXPR (expr);
1186
      if (C_MAYBE_CONST_EXPR_NON_CONST (expr))
1187
        *maybe_const_operands = false;
1188
      if (C_MAYBE_CONST_EXPR_INT_OPERANDS (expr))
1189
        *maybe_const_itself = false;
1190
      if (pre && !in_init)
1191
        ret = build2 (COMPOUND_EXPR, TREE_TYPE (expr), pre, inner);
1192
      else
1193
        ret = inner;
1194
      goto out;
1195
    }
1196
 
1197
  /* Assignment, increment, decrement, function call and comma
1198
     operators, and statement expressions, cannot occur in constant
1199
     expressions if evaluated / outside of sizeof.  (Function calls
1200
     were handled above, though VA_ARG_EXPR is treated like a function
1201
     call here, and statement expressions are handled through
1202
     C_MAYBE_CONST_EXPR to avoid folding inside them.)  */
1203
  switch (code)
1204
    {
1205
    case MODIFY_EXPR:
1206
    case PREDECREMENT_EXPR:
1207
    case PREINCREMENT_EXPR:
1208
    case POSTDECREMENT_EXPR:
1209
    case POSTINCREMENT_EXPR:
1210
    case COMPOUND_EXPR:
1211
      *maybe_const_operands = false;
1212
      break;
1213
 
1214
    case VA_ARG_EXPR:
1215
    case TARGET_EXPR:
1216
    case BIND_EXPR:
1217
    case OBJ_TYPE_REF:
1218
      *maybe_const_operands = false;
1219
      ret = fold (expr);
1220
      goto out;
1221
 
1222
    default:
1223
      break;
1224
    }
1225
 
1226
  /* Fold individual tree codes as appropriate.  */
1227
  switch (code)
1228
    {
1229
    case COMPOUND_LITERAL_EXPR:
1230
      /* Any non-constancy will have been marked in a containing
1231
         C_MAYBE_CONST_EXPR; there is no more folding to do here.  */
1232
      goto out;
1233
 
1234
    case COMPONENT_REF:
1235
      orig_op0 = op0 = TREE_OPERAND (expr, 0);
1236
      op1 = TREE_OPERAND (expr, 1);
1237
      op2 = TREE_OPERAND (expr, 2);
1238
      op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1239
                                   maybe_const_itself);
1240
      STRIP_TYPE_NOPS (op0);
1241
      if (op0 != orig_op0)
1242
        ret = build3 (COMPONENT_REF, TREE_TYPE (expr), op0, op1, op2);
1243
      if (ret != expr)
1244
        {
1245
          TREE_READONLY (ret) = TREE_READONLY (expr);
1246
          TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1247
        }
1248
      goto out;
1249
 
1250
    case ARRAY_REF:
1251
      orig_op0 = op0 = TREE_OPERAND (expr, 0);
1252
      orig_op1 = op1 = TREE_OPERAND (expr, 1);
1253
      op2 = TREE_OPERAND (expr, 2);
1254
      op3 = TREE_OPERAND (expr, 3);
1255
      op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1256
                                   maybe_const_itself);
1257
      STRIP_TYPE_NOPS (op0);
1258
      op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1259
                                   maybe_const_itself);
1260
      STRIP_TYPE_NOPS (op1);
1261
      op1 = decl_constant_value_for_optimization (op1);
1262
      if (op0 != orig_op0 || op1 != orig_op1)
1263
        ret = build4 (ARRAY_REF, TREE_TYPE (expr), op0, op1, op2, op3);
1264
      if (ret != expr)
1265
        {
1266
          TREE_READONLY (ret) = TREE_READONLY (expr);
1267
          TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1268
          TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1269
        }
1270
      ret = fold (ret);
1271
      goto out;
1272
 
1273
    case COMPOUND_EXPR:
1274
    case MODIFY_EXPR:
1275
    case PREDECREMENT_EXPR:
1276
    case PREINCREMENT_EXPR:
1277
    case POSTDECREMENT_EXPR:
1278
    case POSTINCREMENT_EXPR:
1279
    case PLUS_EXPR:
1280
    case MINUS_EXPR:
1281
    case MULT_EXPR:
1282
    case POINTER_PLUS_EXPR:
1283
    case TRUNC_DIV_EXPR:
1284
    case CEIL_DIV_EXPR:
1285
    case FLOOR_DIV_EXPR:
1286
    case TRUNC_MOD_EXPR:
1287
    case RDIV_EXPR:
1288
    case EXACT_DIV_EXPR:
1289
    case LSHIFT_EXPR:
1290
    case RSHIFT_EXPR:
1291
    case BIT_IOR_EXPR:
1292
    case BIT_XOR_EXPR:
1293
    case BIT_AND_EXPR:
1294
    case LT_EXPR:
1295
    case LE_EXPR:
1296
    case GT_EXPR:
1297
    case GE_EXPR:
1298
    case EQ_EXPR:
1299
    case NE_EXPR:
1300
    case COMPLEX_EXPR:
1301
    case TRUTH_AND_EXPR:
1302
    case TRUTH_OR_EXPR:
1303
    case TRUTH_XOR_EXPR:
1304
    case UNORDERED_EXPR:
1305
    case ORDERED_EXPR:
1306
    case UNLT_EXPR:
1307
    case UNLE_EXPR:
1308
    case UNGT_EXPR:
1309
    case UNGE_EXPR:
1310
    case UNEQ_EXPR:
1311
      /* Binary operations evaluating both arguments (increment and
1312
         decrement are binary internally in GCC).  */
1313
      orig_op0 = op0 = TREE_OPERAND (expr, 0);
1314
      orig_op1 = op1 = TREE_OPERAND (expr, 1);
1315
      op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1316
                                   maybe_const_itself);
1317
      STRIP_TYPE_NOPS (op0);
1318
      if (code != MODIFY_EXPR
1319
          && code != PREDECREMENT_EXPR
1320
          && code != PREINCREMENT_EXPR
1321
          && code != POSTDECREMENT_EXPR
1322
          && code != POSTINCREMENT_EXPR)
1323
        op0 = decl_constant_value_for_optimization (op0);
1324
      /* The RHS of a MODIFY_EXPR was fully folded when building that
1325
         expression for the sake of conversion warnings.  */
1326
      if (code != MODIFY_EXPR)
1327
        op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1328
                                     maybe_const_itself);
1329
      STRIP_TYPE_NOPS (op1);
1330
      op1 = decl_constant_value_for_optimization (op1);
1331
      if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1332
        ret = in_init
1333
          ? fold_build2_initializer_loc (loc, code, TREE_TYPE (expr), op0, op1)
1334
          : fold_build2_loc (loc, code, TREE_TYPE (expr), op0, op1);
1335
      else
1336
        ret = fold (expr);
1337
      if (TREE_OVERFLOW_P (ret)
1338
          && !TREE_OVERFLOW_P (op0)
1339
          && !TREE_OVERFLOW_P (op1))
1340
        overflow_warning (EXPR_LOCATION (expr), ret);
1341
      goto out;
1342
 
1343
    case INDIRECT_REF:
1344
    case FIX_TRUNC_EXPR:
1345
    case FLOAT_EXPR:
1346
    CASE_CONVERT:
1347
    case NON_LVALUE_EXPR:
1348
    case NEGATE_EXPR:
1349
    case BIT_NOT_EXPR:
1350
    case TRUTH_NOT_EXPR:
1351
    case ADDR_EXPR:
1352
    case CONJ_EXPR:
1353
    case REALPART_EXPR:
1354
    case IMAGPART_EXPR:
1355
      /* Unary operations.  */
1356
      orig_op0 = op0 = TREE_OPERAND (expr, 0);
1357
      op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1358
                                   maybe_const_itself);
1359
      STRIP_TYPE_NOPS (op0);
1360
      if (code != ADDR_EXPR && code != REALPART_EXPR && code != IMAGPART_EXPR)
1361
        op0 = decl_constant_value_for_optimization (op0);
1362
      if (op0 != orig_op0 || in_init)
1363
        ret = in_init
1364
          ? fold_build1_initializer_loc (loc, code, TREE_TYPE (expr), op0)
1365
          : fold_build1_loc (loc, code, TREE_TYPE (expr), op0);
1366
      else
1367
        ret = fold (expr);
1368
      if (code == INDIRECT_REF
1369
          && ret != expr
1370
          && TREE_CODE (ret) == INDIRECT_REF)
1371
        {
1372
          TREE_READONLY (ret) = TREE_READONLY (expr);
1373
          TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1374
          TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1375
        }
1376
      switch (code)
1377
        {
1378
        case FIX_TRUNC_EXPR:
1379
        case FLOAT_EXPR:
1380
        CASE_CONVERT:
1381
          /* Don't warn about explicit conversions.  We will already
1382
             have warned about suspect implicit conversions.  */
1383
          break;
1384
 
1385
        default:
1386
          if (TREE_OVERFLOW_P (ret) && !TREE_OVERFLOW_P (op0))
1387
            overflow_warning (EXPR_LOCATION (expr), ret);
1388
          break;
1389
        }
1390
      goto out;
1391
 
1392
    case TRUTH_ANDIF_EXPR:
1393
    case TRUTH_ORIF_EXPR:
1394
      /* Binary operations not necessarily evaluating both
1395
         arguments.  */
1396
      orig_op0 = op0 = TREE_OPERAND (expr, 0);
1397
      orig_op1 = op1 = TREE_OPERAND (expr, 1);
1398
      op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1399
      STRIP_TYPE_NOPS (op0);
1400
 
1401
      unused_p = (op0 == (code == TRUTH_ANDIF_EXPR
1402
                          ? truthvalue_false_node
1403
                          : truthvalue_true_node));
1404
      c_inhibit_evaluation_warnings += unused_p;
1405
      op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1406
      STRIP_TYPE_NOPS (op1);
1407
      c_inhibit_evaluation_warnings -= unused_p;
1408
 
1409
      if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1410
        ret = in_init
1411
          ? fold_build2_initializer_loc (loc, code, TREE_TYPE (expr), op0, op1)
1412
          : fold_build2_loc (loc, code, TREE_TYPE (expr), op0, op1);
1413
      else
1414
        ret = fold (expr);
1415
      *maybe_const_operands &= op0_const;
1416
      *maybe_const_itself &= op0_const_self;
1417
      if (!(flag_isoc99
1418
            && op0_const
1419
            && op0_const_self
1420
            && (code == TRUTH_ANDIF_EXPR
1421
                ? op0 == truthvalue_false_node
1422
                : op0 == truthvalue_true_node)))
1423
        *maybe_const_operands &= op1_const;
1424
      if (!(op0_const
1425
            && op0_const_self
1426
            && (code == TRUTH_ANDIF_EXPR
1427
                ? op0 == truthvalue_false_node
1428
                : op0 == truthvalue_true_node)))
1429
        *maybe_const_itself &= op1_const_self;
1430
      goto out;
1431
 
1432
    case COND_EXPR:
1433
      orig_op0 = op0 = TREE_OPERAND (expr, 0);
1434
      orig_op1 = op1 = TREE_OPERAND (expr, 1);
1435
      orig_op2 = op2 = TREE_OPERAND (expr, 2);
1436
      op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1437
 
1438
      STRIP_TYPE_NOPS (op0);
1439
      c_inhibit_evaluation_warnings += (op0 == truthvalue_false_node);
1440
      op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1441
      STRIP_TYPE_NOPS (op1);
1442
      c_inhibit_evaluation_warnings -= (op0 == truthvalue_false_node);
1443
 
1444
      c_inhibit_evaluation_warnings += (op0 == truthvalue_true_node);
1445
      op2 = c_fully_fold_internal (op2, in_init, &op2_const, &op2_const_self);
1446
      STRIP_TYPE_NOPS (op2);
1447
      c_inhibit_evaluation_warnings -= (op0 == truthvalue_true_node);
1448
 
1449
      if (op0 != orig_op0 || op1 != orig_op1 || op2 != orig_op2)
1450
        ret = fold_build3_loc (loc, code, TREE_TYPE (expr), op0, op1, op2);
1451
      else
1452
        ret = fold (expr);
1453
      *maybe_const_operands &= op0_const;
1454
      *maybe_const_itself &= op0_const_self;
1455
      if (!(flag_isoc99
1456
            && op0_const
1457
            && op0_const_self
1458
            && op0 == truthvalue_false_node))
1459
        *maybe_const_operands &= op1_const;
1460
      if (!(op0_const
1461
            && op0_const_self
1462
            && op0 == truthvalue_false_node))
1463
        *maybe_const_itself &= op1_const_self;
1464
      if (!(flag_isoc99
1465
            && op0_const
1466
            && op0_const_self
1467
            && op0 == truthvalue_true_node))
1468
        *maybe_const_operands &= op2_const;
1469
      if (!(op0_const
1470
            && op0_const_self
1471
            && op0 == truthvalue_true_node))
1472
        *maybe_const_itself &= op2_const_self;
1473
      goto out;
1474
 
1475
    case EXCESS_PRECISION_EXPR:
1476
      /* Each case where an operand with excess precision may be
1477
         encountered must remove the EXCESS_PRECISION_EXPR around
1478
         inner operands and possibly put one around the whole
1479
         expression or possibly convert to the semantic type (which
1480
         c_fully_fold does); we cannot tell at this stage which is
1481
         appropriate in any particular case.  */
1482
      gcc_unreachable ();
1483
 
1484
    default:
1485
      /* Various codes may appear through folding built-in functions
1486
         and their arguments.  */
1487
      goto out;
1488
    }
1489
 
1490
 out:
1491
  /* Some folding may introduce NON_LVALUE_EXPRs; all lvalue checks
1492
     have been done by this point, so remove them again.  */
1493
  nowarning |= TREE_NO_WARNING (ret);
1494
  STRIP_TYPE_NOPS (ret);
1495
  if (nowarning && !TREE_NO_WARNING (ret))
1496
    {
1497
      if (!CAN_HAVE_LOCATION_P (ret))
1498
        ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
1499
      TREE_NO_WARNING (ret) = 1;
1500
    }
1501
  if (ret != expr)
1502
    protected_set_expr_location (ret, loc);
1503
  return ret;
1504
}
1505
 
1506
/* If not optimizing, EXP is not a VAR_DECL, or EXP has array type,
1507
   return EXP.  Otherwise, return either EXP or its known constant
1508
   value (if it has one), but return EXP if EXP has mode BLKmode.  ???
1509
   Is the BLKmode test appropriate?  */
1510
 
1511
tree
1512
decl_constant_value_for_optimization (tree exp)
1513
{
1514
  tree ret;
1515
 
1516
  /* This function is only used by C, for c_fully_fold and other
1517
     optimization, and may not be correct for C++.  */
1518
  if (c_dialect_cxx ())
1519
    gcc_unreachable ();
1520
 
1521
  if (!optimize
1522
      || TREE_CODE (exp) != VAR_DECL
1523
      || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1524
      || DECL_MODE (exp) == BLKmode)
1525
    return exp;
1526
 
1527
  ret = decl_constant_value (exp);
1528
  /* Avoid unwanted tree sharing between the initializer and current
1529
     function's body where the tree can be modified e.g. by the
1530
     gimplifier.  */
1531
  if (ret != exp && TREE_STATIC (exp))
1532
    ret = unshare_expr (ret);
1533
  return ret;
1534
}
1535
 
1536
/* Print a warning if a constant expression had overflow in folding.
1537
   Invoke this function on every expression that the language
1538
   requires to be a constant expression.
1539
   Note the ANSI C standard says it is erroneous for a
1540
   constant expression to overflow.  */
1541
 
1542
void
1543
constant_expression_warning (tree value)
1544
{
1545
  if (warn_overflow && pedantic
1546
      && (TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1547
          || TREE_CODE (value) == FIXED_CST
1548
          || TREE_CODE (value) == VECTOR_CST
1549
          || TREE_CODE (value) == COMPLEX_CST)
1550
      && TREE_OVERFLOW (value))
1551
    pedwarn (input_location, OPT_Woverflow, "overflow in constant expression");
1552
}
1553
 
1554
/* The same as above but print an unconditional error.  */
1555
void
1556
constant_expression_error (tree value)
1557
{
1558
  if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1559
       || TREE_CODE (value) == FIXED_CST
1560
       || TREE_CODE (value) == VECTOR_CST
1561
       || TREE_CODE (value) == COMPLEX_CST)
1562
      && TREE_OVERFLOW (value))
1563
    error ("overflow in constant expression");
1564
}
1565
 
1566
/* Print a warning if an expression had overflow in folding and its
1567
   operands hadn't.
1568
 
1569
   Invoke this function on every expression that
1570
   (1) appears in the source code, and
1571
   (2) is a constant expression that overflowed, and
1572
   (3) is not already checked by convert_and_check;
1573
   however, do not invoke this function on operands of explicit casts
1574
   or when the expression is the result of an operator and any operand
1575
   already overflowed.  */
1576
 
1577
void
1578
overflow_warning (location_t loc, tree value)
1579
{
1580
  if (c_inhibit_evaluation_warnings != 0)
1581
    return;
1582
 
1583
  switch (TREE_CODE (value))
1584
    {
1585
    case INTEGER_CST:
1586
      warning_at (loc, OPT_Woverflow, "integer overflow in expression");
1587
      break;
1588
 
1589
    case REAL_CST:
1590
      warning_at (loc, OPT_Woverflow,
1591
                  "floating point overflow in expression");
1592
      break;
1593
 
1594
    case FIXED_CST:
1595
      warning_at (loc, OPT_Woverflow, "fixed-point overflow in expression");
1596
      break;
1597
 
1598
    case VECTOR_CST:
1599
      warning_at (loc, OPT_Woverflow, "vector overflow in expression");
1600
      break;
1601
 
1602
    case COMPLEX_CST:
1603
      if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
1604
        warning_at (loc, OPT_Woverflow,
1605
                    "complex integer overflow in expression");
1606
      else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
1607
        warning_at (loc, OPT_Woverflow,
1608
                    "complex floating point overflow in expression");
1609
      break;
1610
 
1611
    default:
1612
      break;
1613
    }
1614
}
1615
 
1616
/* Warn about uses of logical || / && operator in a context where it
1617
   is likely that the bitwise equivalent was intended by the
1618
   programmer.  We have seen an expression in which CODE is a binary
1619
   operator used to combine expressions OP_LEFT and OP_RIGHT, which before folding
1620
   had CODE_LEFT and CODE_RIGHT, into an expression of type TYPE.  */
1621
void
1622
warn_logical_operator (location_t location, enum tree_code code, tree type,
1623
                       enum tree_code code_left, tree op_left,
1624
                       enum tree_code ARG_UNUSED (code_right), tree op_right)
1625
{
1626
  int or_op = (code == TRUTH_ORIF_EXPR || code == TRUTH_OR_EXPR);
1627
  int in0_p, in1_p, in_p;
1628
  tree low0, low1, low, high0, high1, high, lhs, rhs, tem;
1629
  bool strict_overflow_p = false;
1630
 
1631
  if (code != TRUTH_ANDIF_EXPR
1632
      && code != TRUTH_AND_EXPR
1633
      && code != TRUTH_ORIF_EXPR
1634
      && code != TRUTH_OR_EXPR)
1635
    return;
1636
 
1637
  /* Warn if &&/|| are being used in a context where it is
1638
     likely that the bitwise equivalent was intended by the
1639
     programmer. That is, an expression such as op && MASK
1640
     where op should not be any boolean expression, nor a
1641
     constant, and mask seems to be a non-boolean integer constant.  */
1642
  if (!truth_value_p (code_left)
1643
      && INTEGRAL_TYPE_P (TREE_TYPE (op_left))
1644
      && !CONSTANT_CLASS_P (op_left)
1645
      && !TREE_NO_WARNING (op_left)
1646
      && TREE_CODE (op_right) == INTEGER_CST
1647
      && !integer_zerop (op_right)
1648
      && !integer_onep (op_right))
1649
    {
1650
      if (or_op)
1651
        warning_at (location, OPT_Wlogical_op, "logical %<or%>"
1652
                    " applied to non-boolean constant");
1653
      else
1654
        warning_at (location, OPT_Wlogical_op, "logical %<and%>"
1655
                    " applied to non-boolean constant");
1656
      TREE_NO_WARNING (op_left) = true;
1657
      return;
1658
    }
1659
 
1660
  /* We do not warn for constants because they are typical of macro
1661
     expansions that test for features.  */
1662
  if (CONSTANT_CLASS_P (op_left) || CONSTANT_CLASS_P (op_right))
1663
    return;
1664
 
1665
  /* This warning only makes sense with logical operands.  */
1666
  if (!(truth_value_p (TREE_CODE (op_left))
1667
        || INTEGRAL_TYPE_P (TREE_TYPE (op_left)))
1668
      || !(truth_value_p (TREE_CODE (op_right))
1669
           || INTEGRAL_TYPE_P (TREE_TYPE (op_right))))
1670
    return;
1671
 
1672
  lhs = make_range (op_left, &in0_p, &low0, &high0, &strict_overflow_p);
1673
  rhs = make_range (op_right, &in1_p, &low1, &high1, &strict_overflow_p);
1674
 
1675
  if (lhs && TREE_CODE (lhs) == C_MAYBE_CONST_EXPR)
1676
    lhs = C_MAYBE_CONST_EXPR_EXPR (lhs);
1677
 
1678
  if (rhs && TREE_CODE (rhs) == C_MAYBE_CONST_EXPR)
1679
    rhs = C_MAYBE_CONST_EXPR_EXPR (rhs);
1680
 
1681
  /* If this is an OR operation, invert both sides; we will invert
1682
     again at the end.  */
1683
  if (or_op)
1684
    in0_p = !in0_p, in1_p = !in1_p;
1685
 
1686
  /* If both expressions are the same, if we can merge the ranges, and we
1687
     can build the range test, return it or it inverted.  */
1688
  if (lhs && rhs && operand_equal_p (lhs, rhs, 0)
1689
      && merge_ranges (&in_p, &low, &high, in0_p, low0, high0,
1690
                       in1_p, low1, high1)
1691
      && 0 != (tem = build_range_check (UNKNOWN_LOCATION,
1692
                                        type, lhs, in_p, low, high)))
1693
    {
1694
      if (TREE_CODE (tem) != INTEGER_CST)
1695
        return;
1696
 
1697
      if (or_op)
1698
        warning_at (location, OPT_Wlogical_op,
1699
                    "logical %<or%> "
1700
                    "of collectively exhaustive tests is always true");
1701
      else
1702
        warning_at (location, OPT_Wlogical_op,
1703
                    "logical %<and%> "
1704
                    "of mutually exclusive tests is always false");
1705
    }
1706
}
1707
 
1708
 
1709
/* Print a warning about casts that might indicate violation
1710
   of strict aliasing rules if -Wstrict-aliasing is used and
1711
   strict aliasing mode is in effect. OTYPE is the original
1712
   TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1713
 
1714
bool
1715
strict_aliasing_warning (tree otype, tree type, tree expr)
1716
{
1717
  /* Strip pointer conversion chains and get to the correct original type.  */
1718
  STRIP_NOPS (expr);
1719
  otype = TREE_TYPE (expr);
1720
 
1721
  if (!(flag_strict_aliasing
1722
        && POINTER_TYPE_P (type)
1723
        && POINTER_TYPE_P (otype)
1724
        && !VOID_TYPE_P (TREE_TYPE (type)))
1725
      /* If the type we are casting to is a ref-all pointer
1726
         dereferencing it is always valid.  */
1727
      || TYPE_REF_CAN_ALIAS_ALL (type))
1728
    return false;
1729
 
1730
  if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1731
      && (DECL_P (TREE_OPERAND (expr, 0))
1732
          || handled_component_p (TREE_OPERAND (expr, 0))))
1733
    {
1734
      /* Casting the address of an object to non void pointer. Warn
1735
         if the cast breaks type based aliasing.  */
1736
      if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1737
        {
1738
          warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1739
                   "might break strict-aliasing rules");
1740
          return true;
1741
        }
1742
      else
1743
        {
1744
          /* warn_strict_aliasing >= 3.   This includes the default (3).
1745
             Only warn if the cast is dereferenced immediately.  */
1746
          alias_set_type set1 =
1747
            get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1748
          alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1749
 
1750
          if (set1 != set2 && set2 != 0
1751
              && (set1 == 0 || !alias_sets_conflict_p (set1, set2)))
1752
            {
1753
              warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1754
                       "pointer will break strict-aliasing rules");
1755
              return true;
1756
            }
1757
          else if (warn_strict_aliasing == 2
1758
                   && !alias_sets_must_conflict_p (set1, set2))
1759
            {
1760
              warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1761
                       "pointer might break strict-aliasing rules");
1762
              return true;
1763
            }
1764
        }
1765
    }
1766
  else
1767
    if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1768
      {
1769
        /* At this level, warn for any conversions, even if an address is
1770
           not taken in the same statement.  This will likely produce many
1771
           false positives, but could be useful to pinpoint problems that
1772
           are not revealed at higher levels.  */
1773
        alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1774
        alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1775
        if (!COMPLETE_TYPE_P (type)
1776
            || !alias_sets_must_conflict_p (set1, set2))
1777
          {
1778
            warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1779
                     "pointer might break strict-aliasing rules");
1780
            return true;
1781
          }
1782
      }
1783
 
1784
  return false;
1785
}
1786
 
1787
/* Warn for unlikely, improbable, or stupid DECL declarations
1788
   of `main'.  */
1789
 
1790
void
1791
check_main_parameter_types (tree decl)
1792
{
1793
  tree args;
1794
  int argct = 0;
1795
 
1796
  for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1797
      args = TREE_CHAIN (args))
1798
   {
1799
     tree type = args ? TREE_VALUE (args) : 0;
1800
 
1801
     if (type == void_type_node || type == error_mark_node )
1802
       break;
1803
 
1804
     ++argct;
1805
     switch (argct)
1806
       {
1807
       case 1:
1808
         if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1809
           pedwarn (input_location, OPT_Wmain, "first argument of %q+D should be %<int%>",
1810
                    decl);
1811
         break;
1812
 
1813
       case 2:
1814
         if (TREE_CODE (type) != POINTER_TYPE
1815
             || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1816
             || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1817
                 != char_type_node))
1818
           pedwarn (input_location, OPT_Wmain, "second argument of %q+D should be %<char **%>",
1819
                    decl);
1820
         break;
1821
 
1822
       case 3:
1823
         if (TREE_CODE (type) != POINTER_TYPE
1824
             || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1825
             || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1826
                 != char_type_node))
1827
           pedwarn (input_location, OPT_Wmain, "third argument of %q+D should probably be "
1828
                    "%<char **%>", decl);
1829
         break;
1830
       }
1831
   }
1832
 
1833
  /* It is intentional that this message does not mention the third
1834
    argument because it's only mentioned in an appendix of the
1835
    standard.  */
1836
  if (argct > 0 && (argct < 2 || argct > 3))
1837
    pedwarn (input_location, OPT_Wmain, "%q+D takes only zero or two arguments", decl);
1838
}
1839
 
1840
/* True if pointers to distinct types T1 and T2 can be converted to
1841
   each other without an explicit cast.  Only returns true for opaque
1842
   vector types.  */
1843
bool
1844
vector_targets_convertible_p (const_tree t1, const_tree t2)
1845
{
1846
  if (TREE_CODE (t1) == VECTOR_TYPE && TREE_CODE (t2) == VECTOR_TYPE
1847
      && (TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1848
      && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1849
    return true;
1850
 
1851
  return false;
1852
}
1853
 
1854
/* True if vector types T1 and T2 can be converted to each other
1855
   without an explicit cast.  If EMIT_LAX_NOTE is true, and T1 and T2
1856
   can only be converted with -flax-vector-conversions yet that is not
1857
   in effect, emit a note telling the user about that option if such
1858
   a note has not previously been emitted.  */
1859
bool
1860
vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1861
{
1862
  static bool emitted_lax_note = false;
1863
  bool convertible_lax;
1864
 
1865
  if ((TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1866
      && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1867
    return true;
1868
 
1869
  convertible_lax =
1870
    (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1871
     && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1872
         TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1873
     && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1874
         == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1875
 
1876
  if (!convertible_lax || flag_lax_vector_conversions)
1877
    return convertible_lax;
1878
 
1879
  if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1880
      && lang_hooks.types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1881
    return true;
1882
 
1883
  if (emit_lax_note && !emitted_lax_note)
1884
    {
1885
      emitted_lax_note = true;
1886
      inform (input_location, "use -flax-vector-conversions to permit "
1887
              "conversions between vectors with differing "
1888
              "element types or numbers of subparts");
1889
    }
1890
 
1891
  return false;
1892
}
1893
 
1894
/* This is a helper function of build_binary_op.
1895
 
1896
   For certain operations if both args were extended from the same
1897
   smaller type, do the arithmetic in that type and then extend.
1898
 
1899
   BITWISE indicates a bitwise operation.
1900
   For them, this optimization is safe only if
1901
   both args are zero-extended or both are sign-extended.
1902
   Otherwise, we might change the result.
1903
   Eg, (short)-1 | (unsigned short)-1 is (int)-1
1904
   but calculated in (unsigned short) it would be (unsigned short)-1.
1905
*/
1906
tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise)
1907
{
1908
  int unsigned0, unsigned1;
1909
  tree arg0, arg1;
1910
  int uns;
1911
  tree type;
1912
 
1913
  /* Cast OP0 and OP1 to RESULT_TYPE.  Doing so prevents
1914
     excessive narrowing when we call get_narrower below.  For
1915
     example, suppose that OP0 is of unsigned int extended
1916
     from signed char and that RESULT_TYPE is long long int.
1917
     If we explicitly cast OP0 to RESULT_TYPE, OP0 would look
1918
     like
1919
 
1920
     (long long int) (unsigned int) signed_char
1921
 
1922
     which get_narrower would narrow down to
1923
 
1924
     (unsigned int) signed char
1925
 
1926
     If we do not cast OP0 first, get_narrower would return
1927
     signed_char, which is inconsistent with the case of the
1928
     explicit cast.  */
1929
  op0 = convert (result_type, op0);
1930
  op1 = convert (result_type, op1);
1931
 
1932
  arg0 = get_narrower (op0, &unsigned0);
1933
  arg1 = get_narrower (op1, &unsigned1);
1934
 
1935
  /* UNS is 1 if the operation to be done is an unsigned one.  */
1936
  uns = TYPE_UNSIGNED (result_type);
1937
 
1938
  /* Handle the case that OP0 (or OP1) does not *contain* a conversion
1939
     but it *requires* conversion to FINAL_TYPE.  */
1940
 
1941
  if ((TYPE_PRECISION (TREE_TYPE (op0))
1942
       == TYPE_PRECISION (TREE_TYPE (arg0)))
1943
      && TREE_TYPE (op0) != result_type)
1944
    unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
1945
  if ((TYPE_PRECISION (TREE_TYPE (op1))
1946
       == TYPE_PRECISION (TREE_TYPE (arg1)))
1947
      && TREE_TYPE (op1) != result_type)
1948
    unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
1949
 
1950
  /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
1951
 
1952
  /* For bitwise operations, signedness of nominal type
1953
     does not matter.  Consider only how operands were extended.  */
1954
  if (bitwise)
1955
    uns = unsigned0;
1956
 
1957
  /* Note that in all three cases below we refrain from optimizing
1958
     an unsigned operation on sign-extended args.
1959
     That would not be valid.  */
1960
 
1961
  /* Both args variable: if both extended in same way
1962
     from same width, do it in that width.
1963
     Do it unsigned if args were zero-extended.  */
1964
  if ((TYPE_PRECISION (TREE_TYPE (arg0))
1965
       < TYPE_PRECISION (result_type))
1966
      && (TYPE_PRECISION (TREE_TYPE (arg1))
1967
          == TYPE_PRECISION (TREE_TYPE (arg0)))
1968
      && unsigned0 == unsigned1
1969
      && (unsigned0 || !uns))
1970
    return c_common_signed_or_unsigned_type
1971
      (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
1972
 
1973
  else if (TREE_CODE (arg0) == INTEGER_CST
1974
           && (unsigned1 || !uns)
1975
           && (TYPE_PRECISION (TREE_TYPE (arg1))
1976
               < TYPE_PRECISION (result_type))
1977
           && (type
1978
               = c_common_signed_or_unsigned_type (unsigned1,
1979
                                                   TREE_TYPE (arg1)))
1980
           && !POINTER_TYPE_P (type)
1981
           && int_fits_type_p (arg0, type))
1982
    return type;
1983
 
1984
  else if (TREE_CODE (arg1) == INTEGER_CST
1985
           && (unsigned0 || !uns)
1986
           && (TYPE_PRECISION (TREE_TYPE (arg0))
1987
               < TYPE_PRECISION (result_type))
1988
           && (type
1989
               = c_common_signed_or_unsigned_type (unsigned0,
1990
                                                   TREE_TYPE (arg0)))
1991
           && !POINTER_TYPE_P (type)
1992
           && int_fits_type_p (arg1, type))
1993
    return type;
1994
 
1995
  return result_type;
1996
}
1997
 
1998
/* Warns if the conversion of EXPR to TYPE may alter a value.
1999
   This is a helper function for warnings_for_convert_and_check.  */
2000
 
2001
static void
2002
conversion_warning (tree type, tree expr)
2003
{
2004
  bool give_warning = false;
2005
 
2006
  int i;
2007
  const int expr_num_operands = TREE_OPERAND_LENGTH (expr);
2008
  tree expr_type = TREE_TYPE (expr);
2009
 
2010
  if (!warn_conversion && !warn_sign_conversion)
2011
    return;
2012
 
2013
  /* If any operand is artificial, then this expression was generated
2014
     by the compiler and we do not warn.  */
2015
  for (i = 0; i < expr_num_operands; i++)
2016
    {
2017
      tree op = TREE_OPERAND (expr, i);
2018
      if (op && DECL_P (op) && DECL_ARTIFICIAL (op))
2019
        return;
2020
    }
2021
 
2022
  switch (TREE_CODE (expr))
2023
    {
2024
    case EQ_EXPR:
2025
    case NE_EXPR:
2026
    case LE_EXPR:
2027
    case GE_EXPR:
2028
    case LT_EXPR:
2029
    case GT_EXPR:
2030
    case TRUTH_ANDIF_EXPR:
2031
    case TRUTH_ORIF_EXPR:
2032
    case TRUTH_AND_EXPR:
2033
    case TRUTH_OR_EXPR:
2034
    case TRUTH_XOR_EXPR:
2035
    case TRUTH_NOT_EXPR:
2036
      /* Conversion from boolean to a signed:1 bit-field (which only
2037
         can hold the values 0 and -1) doesn't lose information - but
2038
         it does change the value.  */
2039
      if (TYPE_PRECISION (type) == 1 && !TYPE_UNSIGNED (type))
2040
        warning (OPT_Wconversion,
2041
                 "conversion to %qT from boolean expression", type);
2042
      return;
2043
 
2044
    case REAL_CST:
2045
    case INTEGER_CST:
2046
 
2047
      /* Warn for real constant that is not an exact integer converted
2048
         to integer type.  */
2049
      if (TREE_CODE (expr_type) == REAL_TYPE
2050
          && TREE_CODE (type) == INTEGER_TYPE)
2051
        {
2052
          if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (expr_type)))
2053
            give_warning = true;
2054
        }
2055
      /* Warn for an integer constant that does not fit into integer type.  */
2056
      else if (TREE_CODE (expr_type) == INTEGER_TYPE
2057
               && TREE_CODE (type) == INTEGER_TYPE
2058
               && !int_fits_type_p (expr, type))
2059
        {
2060
          if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)
2061
              && tree_int_cst_sgn (expr) < 0)
2062
            warning (OPT_Wsign_conversion,
2063
                     "negative integer implicitly converted to unsigned type");
2064
          else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (expr_type))
2065
            warning (OPT_Wsign_conversion,  "conversion of unsigned constant "
2066
                     "value to negative integer");
2067
          else
2068
            give_warning = true;
2069
        }
2070
      else if (TREE_CODE (type) == REAL_TYPE)
2071
        {
2072
          /* Warn for an integer constant that does not fit into real type.  */
2073
          if (TREE_CODE (expr_type) == INTEGER_TYPE)
2074
            {
2075
              REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
2076
              if (!exact_real_truncate (TYPE_MODE (type), &a))
2077
                give_warning = true;
2078
            }
2079
          /* Warn for a real constant that does not fit into a smaller
2080
             real type.  */
2081
          else if (TREE_CODE (expr_type) == REAL_TYPE
2082
                   && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2083
            {
2084
              REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
2085
              if (!exact_real_truncate (TYPE_MODE (type), &a))
2086
                give_warning = true;
2087
            }
2088
        }
2089
 
2090
      if (give_warning)
2091
        warning (OPT_Wconversion,
2092
                 "conversion to %qT alters %qT constant value",
2093
                 type, expr_type);
2094
 
2095
      return;
2096
 
2097
    case COND_EXPR:
2098
      {
2099
        /* In case of COND_EXPR, if both operands are constants or
2100
           COND_EXPR, then we do not care about the type of COND_EXPR,
2101
           only about the conversion of each operand.  */
2102
        tree op1 = TREE_OPERAND (expr, 1);
2103
        tree op2 = TREE_OPERAND (expr, 2);
2104
 
2105
        if ((TREE_CODE (op1) == REAL_CST || TREE_CODE (op1) == INTEGER_CST
2106
             || TREE_CODE (op1) == COND_EXPR)
2107
            && (TREE_CODE (op2) == REAL_CST || TREE_CODE (op2) == INTEGER_CST
2108
                || TREE_CODE (op2) == COND_EXPR))
2109
          {
2110
            conversion_warning (type, op1);
2111
            conversion_warning (type, op2);
2112
            return;
2113
          }
2114
        /* Fall through.  */
2115
      }
2116
 
2117
    default: /* 'expr' is not a constant.  */
2118
 
2119
      /* Warn for real types converted to integer types.  */
2120
      if (TREE_CODE (expr_type) == REAL_TYPE
2121
          && TREE_CODE (type) == INTEGER_TYPE)
2122
        give_warning = true;
2123
 
2124
      else if (TREE_CODE (expr_type) == INTEGER_TYPE
2125
               && TREE_CODE (type) == INTEGER_TYPE)
2126
        {
2127
          /* Don't warn about unsigned char y = 0xff, x = (int) y;  */
2128
          expr = get_unwidened (expr, 0);
2129
          expr_type = TREE_TYPE (expr);
2130
 
2131
          /* Don't warn for short y; short x = ((int)y & 0xff);  */
2132
          if (TREE_CODE (expr) == BIT_AND_EXPR
2133
                || TREE_CODE (expr) == BIT_IOR_EXPR
2134
              || TREE_CODE (expr) == BIT_XOR_EXPR)
2135
            {
2136
              /* If both args were extended from a shortest type,
2137
                 use that type if that is safe.  */
2138
              expr_type = shorten_binary_op (expr_type,
2139
                                             TREE_OPERAND (expr, 0),
2140
                                             TREE_OPERAND (expr, 1),
2141
                                             /* bitwise */1);
2142
 
2143
              if (TREE_CODE (expr) == BIT_AND_EXPR)
2144
                {
2145
                  tree op0 = TREE_OPERAND (expr, 0);
2146
                  tree op1 = TREE_OPERAND (expr, 1);
2147
                  bool unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2148
                  bool unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2149
 
2150
                  /* If one of the operands is a non-negative constant
2151
                     that fits in the target type, then the type of the
2152
                     other operand does not matter. */
2153
                  if ((TREE_CODE (op0) == INTEGER_CST
2154
                       && int_fits_type_p (op0, c_common_signed_type (type))
2155
                       && int_fits_type_p (op0, c_common_unsigned_type (type)))
2156
                      || (TREE_CODE (op1) == INTEGER_CST
2157
                          && int_fits_type_p (op1, c_common_signed_type (type))
2158
                          && int_fits_type_p (op1,
2159
                                              c_common_unsigned_type (type))))
2160
                    return;
2161
                  /* If constant is unsigned and fits in the target
2162
                     type, then the result will also fit.  */
2163
                  else if ((TREE_CODE (op0) == INTEGER_CST
2164
                            && unsigned0
2165
                            && int_fits_type_p (op0, type))
2166
                           || (TREE_CODE (op1) == INTEGER_CST
2167
                               && unsigned1
2168
                               && int_fits_type_p (op1, type)))
2169
                    return;
2170
                }
2171
            }
2172
          /* Warn for integer types converted to smaller integer types.  */
2173
          if (TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2174
            give_warning = true;
2175
 
2176
          /* When they are the same width but different signedness,
2177
             then the value may change.  */
2178
          else if ((TYPE_PRECISION (type) == TYPE_PRECISION (expr_type)
2179
                    && TYPE_UNSIGNED (expr_type) != TYPE_UNSIGNED (type))
2180
                   /* Even when converted to a bigger type, if the type is
2181
                      unsigned but expr is signed, then negative values
2182
                      will be changed.  */
2183
                   || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)))
2184
            warning (OPT_Wsign_conversion, "conversion to %qT from %qT "
2185
                     "may change the sign of the result",
2186
                     type, expr_type);
2187
        }
2188
 
2189
      /* Warn for integer types converted to real types if and only if
2190
         all the range of values of the integer type cannot be
2191
         represented by the real type.  */
2192
      else if (TREE_CODE (expr_type) == INTEGER_TYPE
2193
               && TREE_CODE (type) == REAL_TYPE)
2194
        {
2195
          tree type_low_bound, type_high_bound;
2196
          REAL_VALUE_TYPE real_low_bound, real_high_bound;
2197
 
2198
          /* Don't warn about char y = 0xff; float x = (int) y;  */
2199
          expr = get_unwidened (expr, 0);
2200
          expr_type = TREE_TYPE (expr);
2201
 
2202
          type_low_bound = TYPE_MIN_VALUE (expr_type);
2203
          type_high_bound = TYPE_MAX_VALUE (expr_type);
2204
          real_low_bound = real_value_from_int_cst (0, type_low_bound);
2205
          real_high_bound = real_value_from_int_cst (0, type_high_bound);
2206
 
2207
          if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
2208
              || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
2209
            give_warning = true;
2210
        }
2211
 
2212
      /* Warn for real types converted to smaller real types.  */
2213
      else if (TREE_CODE (expr_type) == REAL_TYPE
2214
               && TREE_CODE (type) == REAL_TYPE
2215
               && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2216
        give_warning = true;
2217
 
2218
 
2219
      if (give_warning)
2220
        warning (OPT_Wconversion,
2221
                 "conversion to %qT from %qT may alter its value",
2222
                 type, expr_type);
2223
    }
2224
}
2225
 
2226
/* Produce warnings after a conversion. RESULT is the result of
2227
   converting EXPR to TYPE.  This is a helper function for
2228
   convert_and_check and cp_convert_and_check.  */
2229
 
2230
void
2231
warnings_for_convert_and_check (tree type, tree expr, tree result)
2232
{
2233
  if (TREE_CODE (expr) == INTEGER_CST
2234
      && (TREE_CODE (type) == INTEGER_TYPE
2235
          || TREE_CODE (type) == ENUMERAL_TYPE)
2236
      && !int_fits_type_p (expr, type))
2237
    {
2238
      /* Do not diagnose overflow in a constant expression merely
2239
         because a conversion overflowed.  */
2240
      if (TREE_OVERFLOW (result))
2241
        TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
2242
 
2243
      if (TYPE_UNSIGNED (type))
2244
        {
2245
          /* This detects cases like converting -129 or 256 to
2246
             unsigned char.  */
2247
          if (!int_fits_type_p (expr, c_common_signed_type (type)))
2248
            warning (OPT_Woverflow,
2249
                     "large integer implicitly truncated to unsigned type");
2250
          else
2251
            conversion_warning (type, expr);
2252
        }
2253
      else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
2254
        warning (OPT_Woverflow,
2255
                 "overflow in implicit constant conversion");
2256
      /* No warning for converting 0x80000000 to int.  */
2257
      else if (pedantic
2258
               && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
2259
                   || TYPE_PRECISION (TREE_TYPE (expr))
2260
                   != TYPE_PRECISION (type)))
2261
        warning (OPT_Woverflow,
2262
                 "overflow in implicit constant conversion");
2263
 
2264
      else
2265
        conversion_warning (type, expr);
2266
    }
2267
  else if ((TREE_CODE (result) == INTEGER_CST
2268
            || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
2269
    warning (OPT_Woverflow,
2270
             "overflow in implicit constant conversion");
2271
  else
2272
    conversion_warning (type, expr);
2273
}
2274
 
2275
 
2276
/* Convert EXPR to TYPE, warning about conversion problems with constants.
2277
   Invoke this function on every expression that is converted implicitly,
2278
   i.e. because of language rules and not because of an explicit cast.  */
2279
 
2280
tree
2281
convert_and_check (tree type, tree expr)
2282
{
2283
  tree result;
2284
  tree expr_for_warning;
2285
 
2286
  /* Convert from a value with possible excess precision rather than
2287
     via the semantic type, but do not warn about values not fitting
2288
     exactly in the semantic type.  */
2289
  if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
2290
    {
2291
      tree orig_type = TREE_TYPE (expr);
2292
      expr = TREE_OPERAND (expr, 0);
2293
      expr_for_warning = convert (orig_type, expr);
2294
      if (orig_type == type)
2295
        return expr_for_warning;
2296
    }
2297
  else
2298
    expr_for_warning = expr;
2299
 
2300
  if (TREE_TYPE (expr) == type)
2301
    return expr;
2302
 
2303
  result = convert (type, expr);
2304
 
2305
  if (c_inhibit_evaluation_warnings == 0
2306
      && !TREE_OVERFLOW_P (expr)
2307
      && result != error_mark_node)
2308
    warnings_for_convert_and_check (type, expr_for_warning, result);
2309
 
2310
  return result;
2311
}
2312
 
2313
/* A node in a list that describes references to variables (EXPR), which are
2314
   either read accesses if WRITER is zero, or write accesses, in which case
2315
   WRITER is the parent of EXPR.  */
2316
struct tlist
2317
{
2318
  struct tlist *next;
2319
  tree expr, writer;
2320
};
2321
 
2322
/* Used to implement a cache the results of a call to verify_tree.  We only
2323
   use this for SAVE_EXPRs.  */
2324
struct tlist_cache
2325
{
2326
  struct tlist_cache *next;
2327
  struct tlist *cache_before_sp;
2328
  struct tlist *cache_after_sp;
2329
  tree expr;
2330
};
2331
 
2332
/* Obstack to use when allocating tlist structures, and corresponding
2333
   firstobj.  */
2334
static struct obstack tlist_obstack;
2335
static char *tlist_firstobj = 0;
2336
 
2337
/* Keep track of the identifiers we've warned about, so we can avoid duplicate
2338
   warnings.  */
2339
static struct tlist *warned_ids;
2340
/* SAVE_EXPRs need special treatment.  We process them only once and then
2341
   cache the results.  */
2342
static struct tlist_cache *save_expr_cache;
2343
 
2344
static void add_tlist (struct tlist **, struct tlist *, tree, int);
2345
static void merge_tlist (struct tlist **, struct tlist *, int);
2346
static void verify_tree (tree, struct tlist **, struct tlist **, tree);
2347
static int warning_candidate_p (tree);
2348
static bool candidate_equal_p (const_tree, const_tree);
2349
static void warn_for_collisions (struct tlist *);
2350
static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
2351
static struct tlist *new_tlist (struct tlist *, tree, tree);
2352
 
2353
/* Create a new struct tlist and fill in its fields.  */
2354
static struct tlist *
2355
new_tlist (struct tlist *next, tree t, tree writer)
2356
{
2357
  struct tlist *l;
2358
  l = XOBNEW (&tlist_obstack, struct tlist);
2359
  l->next = next;
2360
  l->expr = t;
2361
  l->writer = writer;
2362
  return l;
2363
}
2364
 
2365
/* Add duplicates of the nodes found in ADD to the list *TO.  If EXCLUDE_WRITER
2366
   is nonnull, we ignore any node we find which has a writer equal to it.  */
2367
 
2368
static void
2369
add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
2370
{
2371
  while (add)
2372
    {
2373
      struct tlist *next = add->next;
2374
      if (!copy)
2375
        add->next = *to;
2376
      if (!exclude_writer || !candidate_equal_p (add->writer, exclude_writer))
2377
        *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
2378
      add = next;
2379
    }
2380
}
2381
 
2382
/* Merge the nodes of ADD into TO.  This merging process is done so that for
2383
   each variable that already exists in TO, no new node is added; however if
2384
   there is a write access recorded in ADD, and an occurrence on TO is only
2385
   a read access, then the occurrence in TO will be modified to record the
2386
   write.  */
2387
 
2388
static void
2389
merge_tlist (struct tlist **to, struct tlist *add, int copy)
2390
{
2391
  struct tlist **end = to;
2392
 
2393
  while (*end)
2394
    end = &(*end)->next;
2395
 
2396
  while (add)
2397
    {
2398
      int found = 0;
2399
      struct tlist *tmp2;
2400
      struct tlist *next = add->next;
2401
 
2402
      for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
2403
        if (candidate_equal_p (tmp2->expr, add->expr))
2404
          {
2405
            found = 1;
2406
            if (!tmp2->writer)
2407
              tmp2->writer = add->writer;
2408
          }
2409
      if (!found)
2410
        {
2411
          *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
2412
          end = &(*end)->next;
2413
          *end = 0;
2414
        }
2415
      add = next;
2416
    }
2417
}
2418
 
2419
/* WRITTEN is a variable, WRITER is its parent.  Warn if any of the variable
2420
   references in list LIST conflict with it, excluding reads if ONLY writers
2421
   is nonzero.  */
2422
 
2423
static void
2424
warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
2425
                       int only_writes)
2426
{
2427
  struct tlist *tmp;
2428
 
2429
  /* Avoid duplicate warnings.  */
2430
  for (tmp = warned_ids; tmp; tmp = tmp->next)
2431
    if (candidate_equal_p (tmp->expr, written))
2432
      return;
2433
 
2434
  while (list)
2435
    {
2436
      if (candidate_equal_p (list->expr, written)
2437
          && !candidate_equal_p (list->writer, writer)
2438
          && (!only_writes || list->writer))
2439
        {
2440
          warned_ids = new_tlist (warned_ids, written, NULL_TREE);
2441
          warning_at (EXPR_HAS_LOCATION (writer)
2442
                      ? EXPR_LOCATION (writer) : input_location,
2443
                      OPT_Wsequence_point, "operation on %qE may be undefined",
2444
                      list->expr);
2445
        }
2446
      list = list->next;
2447
    }
2448
}
2449
 
2450
/* Given a list LIST of references to variables, find whether any of these
2451
   can cause conflicts due to missing sequence points.  */
2452
 
2453
static void
2454
warn_for_collisions (struct tlist *list)
2455
{
2456
  struct tlist *tmp;
2457
 
2458
  for (tmp = list; tmp; tmp = tmp->next)
2459
    {
2460
      if (tmp->writer)
2461
        warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
2462
    }
2463
}
2464
 
2465
/* Return nonzero if X is a tree that can be verified by the sequence point
2466
   warnings.  */
2467
static int
2468
warning_candidate_p (tree x)
2469
{
2470
  /* !VOID_TYPE_P (TREE_TYPE (x)) is workaround for cp/tree.c
2471
     (lvalue_p) crash on TRY/CATCH. */
2472
  return !(DECL_P (x) && DECL_ARTIFICIAL (x))
2473
    && TREE_TYPE (x) && !VOID_TYPE_P (TREE_TYPE (x)) && lvalue_p (x);
2474
}
2475
 
2476
/* Return nonzero if X and Y appear to be the same candidate (or NULL) */
2477
static bool
2478
candidate_equal_p (const_tree x, const_tree y)
2479
{
2480
  return (x == y) || (x && y && operand_equal_p (x, y, 0));
2481
}
2482
 
2483
/* Walk the tree X, and record accesses to variables.  If X is written by the
2484
   parent tree, WRITER is the parent.
2485
   We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP.  If this
2486
   expression or its only operand forces a sequence point, then everything up
2487
   to the sequence point is stored in PBEFORE_SP.  Everything else gets stored
2488
   in PNO_SP.
2489
   Once we return, we will have emitted warnings if any subexpression before
2490
   such a sequence point could be undefined.  On a higher level, however, the
2491
   sequence point may not be relevant, and we'll merge the two lists.
2492
 
2493
   Example: (b++, a) + b;
2494
   The call that processes the COMPOUND_EXPR will store the increment of B
2495
   in PBEFORE_SP, and the use of A in PNO_SP.  The higher-level call that
2496
   processes the PLUS_EXPR will need to merge the two lists so that
2497
   eventually, all accesses end up on the same list (and we'll warn about the
2498
   unordered subexpressions b++ and b.
2499
 
2500
   A note on merging.  If we modify the former example so that our expression
2501
   becomes
2502
     (b++, b) + a
2503
   care must be taken not simply to add all three expressions into the final
2504
   PNO_SP list.  The function merge_tlist takes care of that by merging the
2505
   before-SP list of the COMPOUND_EXPR into its after-SP list in a special
2506
   way, so that no more than one access to B is recorded.  */
2507
 
2508
static void
2509
verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
2510
             tree writer)
2511
{
2512
  struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
2513
  enum tree_code code;
2514
  enum tree_code_class cl;
2515
 
2516
  /* X may be NULL if it is the operand of an empty statement expression
2517
     ({ }).  */
2518
  if (x == NULL)
2519
    return;
2520
 
2521
 restart:
2522
  code = TREE_CODE (x);
2523
  cl = TREE_CODE_CLASS (code);
2524
 
2525
  if (warning_candidate_p (x))
2526
    *pno_sp = new_tlist (*pno_sp, x, writer);
2527
 
2528
  switch (code)
2529
    {
2530
    case CONSTRUCTOR:
2531
      return;
2532
 
2533
    case COMPOUND_EXPR:
2534
    case TRUTH_ANDIF_EXPR:
2535
    case TRUTH_ORIF_EXPR:
2536
      tmp_before = tmp_nosp = tmp_list3 = 0;
2537
      verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2538
      warn_for_collisions (tmp_nosp);
2539
      merge_tlist (pbefore_sp, tmp_before, 0);
2540
      merge_tlist (pbefore_sp, tmp_nosp, 0);
2541
      verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
2542
      merge_tlist (pbefore_sp, tmp_list3, 0);
2543
      return;
2544
 
2545
    case COND_EXPR:
2546
      tmp_before = tmp_list2 = 0;
2547
      verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
2548
      warn_for_collisions (tmp_list2);
2549
      merge_tlist (pbefore_sp, tmp_before, 0);
2550
      merge_tlist (pbefore_sp, tmp_list2, 1);
2551
 
2552
      tmp_list3 = tmp_nosp = 0;
2553
      verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
2554
      warn_for_collisions (tmp_nosp);
2555
      merge_tlist (pbefore_sp, tmp_list3, 0);
2556
 
2557
      tmp_list3 = tmp_list2 = 0;
2558
      verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
2559
      warn_for_collisions (tmp_list2);
2560
      merge_tlist (pbefore_sp, tmp_list3, 0);
2561
      /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
2562
         two first, to avoid warning for (a ? b++ : b++).  */
2563
      merge_tlist (&tmp_nosp, tmp_list2, 0);
2564
      add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2565
      return;
2566
 
2567
    case PREDECREMENT_EXPR:
2568
    case PREINCREMENT_EXPR:
2569
    case POSTDECREMENT_EXPR:
2570
    case POSTINCREMENT_EXPR:
2571
      verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
2572
      return;
2573
 
2574
    case MODIFY_EXPR:
2575
      tmp_before = tmp_nosp = tmp_list3 = 0;
2576
      verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
2577
      verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
2578
      /* Expressions inside the LHS are not ordered wrt. the sequence points
2579
         in the RHS.  Example:
2580
           *a = (a++, 2)
2581
         Despite the fact that the modification of "a" is in the before_sp
2582
         list (tmp_before), it conflicts with the use of "a" in the LHS.
2583
         We can handle this by adding the contents of tmp_list3
2584
         to those of tmp_before, and redoing the collision warnings for that
2585
         list.  */
2586
      add_tlist (&tmp_before, tmp_list3, x, 1);
2587
      warn_for_collisions (tmp_before);
2588
      /* Exclude the LHS itself here; we first have to merge it into the
2589
         tmp_nosp list.  This is done to avoid warning for "a = a"; if we
2590
         didn't exclude the LHS, we'd get it twice, once as a read and once
2591
         as a write.  */
2592
      add_tlist (pno_sp, tmp_list3, x, 0);
2593
      warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
2594
 
2595
      merge_tlist (pbefore_sp, tmp_before, 0);
2596
      if (warning_candidate_p (TREE_OPERAND (x, 0)))
2597
        merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
2598
      add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
2599
      return;
2600
 
2601
    case CALL_EXPR:
2602
      /* We need to warn about conflicts among arguments and conflicts between
2603
         args and the function address.  Side effects of the function address,
2604
         however, are not ordered by the sequence point of the call.  */
2605
      {
2606
        call_expr_arg_iterator iter;
2607
        tree arg;
2608
        tmp_before = tmp_nosp = 0;
2609
        verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
2610
        FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
2611
          {
2612
            tmp_list2 = tmp_list3 = 0;
2613
            verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
2614
            merge_tlist (&tmp_list3, tmp_list2, 0);
2615
            add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
2616
          }
2617
        add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
2618
        warn_for_collisions (tmp_before);
2619
        add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
2620
        return;
2621
      }
2622
 
2623
    case TREE_LIST:
2624
      /* Scan all the list, e.g. indices of multi dimensional array.  */
2625
      while (x)
2626
        {
2627
          tmp_before = tmp_nosp = 0;
2628
          verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
2629
          merge_tlist (&tmp_nosp, tmp_before, 0);
2630
          add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2631
          x = TREE_CHAIN (x);
2632
        }
2633
      return;
2634
 
2635
    case SAVE_EXPR:
2636
      {
2637
        struct tlist_cache *t;
2638
        for (t = save_expr_cache; t; t = t->next)
2639
          if (candidate_equal_p (t->expr, x))
2640
            break;
2641
 
2642
        if (!t)
2643
          {
2644
            t = XOBNEW (&tlist_obstack, struct tlist_cache);
2645
            t->next = save_expr_cache;
2646
            t->expr = x;
2647
            save_expr_cache = t;
2648
 
2649
            tmp_before = tmp_nosp = 0;
2650
            verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2651
            warn_for_collisions (tmp_nosp);
2652
 
2653
            tmp_list3 = 0;
2654
            while (tmp_nosp)
2655
              {
2656
                struct tlist *t = tmp_nosp;
2657
                tmp_nosp = t->next;
2658
                merge_tlist (&tmp_list3, t, 0);
2659
              }
2660
            t->cache_before_sp = tmp_before;
2661
            t->cache_after_sp = tmp_list3;
2662
          }
2663
        merge_tlist (pbefore_sp, t->cache_before_sp, 1);
2664
        add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
2665
        return;
2666
      }
2667
 
2668
    case ADDR_EXPR:
2669
      x = TREE_OPERAND (x, 0);
2670
      if (DECL_P (x))
2671
        return;
2672
      writer = 0;
2673
      goto restart;
2674
 
2675
    default:
2676
      /* For other expressions, simply recurse on their operands.
2677
         Manual tail recursion for unary expressions.
2678
         Other non-expressions need not be processed.  */
2679
      if (cl == tcc_unary)
2680
        {
2681
          x = TREE_OPERAND (x, 0);
2682
          writer = 0;
2683
          goto restart;
2684
        }
2685
      else if (IS_EXPR_CODE_CLASS (cl))
2686
        {
2687
          int lp;
2688
          int max = TREE_OPERAND_LENGTH (x);
2689
          for (lp = 0; lp < max; lp++)
2690
            {
2691
              tmp_before = tmp_nosp = 0;
2692
              verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
2693
              merge_tlist (&tmp_nosp, tmp_before, 0);
2694
              add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2695
            }
2696
        }
2697
      return;
2698
    }
2699
}
2700
 
2701
/* Try to warn for undefined behavior in EXPR due to missing sequence
2702
   points.  */
2703
 
2704
void
2705
verify_sequence_points (tree expr)
2706
{
2707
  struct tlist *before_sp = 0, *after_sp = 0;
2708
 
2709
  warned_ids = 0;
2710
  save_expr_cache = 0;
2711
  if (tlist_firstobj == 0)
2712
    {
2713
      gcc_obstack_init (&tlist_obstack);
2714
      tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
2715
    }
2716
 
2717
  verify_tree (expr, &before_sp, &after_sp, 0);
2718
  warn_for_collisions (after_sp);
2719
  obstack_free (&tlist_obstack, tlist_firstobj);
2720
}
2721
 
2722
/* Validate the expression after `case' and apply default promotions.  */
2723
 
2724
static tree
2725
check_case_value (tree value)
2726
{
2727
  if (value == NULL_TREE)
2728
    return value;
2729
 
2730
  /* ??? Can we ever get nops here for a valid case value?  We
2731
     shouldn't for C.  */
2732
  STRIP_TYPE_NOPS (value);
2733
  /* In C++, the following is allowed:
2734
 
2735
       const int i = 3;
2736
       switch (...) { case i: ... }
2737
 
2738
     So, we try to reduce the VALUE to a constant that way.  */
2739
  if (c_dialect_cxx ())
2740
    {
2741
      value = decl_constant_value (value);
2742
      STRIP_TYPE_NOPS (value);
2743
      value = fold (value);
2744
    }
2745
 
2746
  if (TREE_CODE (value) == INTEGER_CST)
2747
    /* Promote char or short to int.  */
2748
    value = perform_integral_promotions (value);
2749
  else if (value != error_mark_node)
2750
    {
2751
      error ("case label does not reduce to an integer constant");
2752
      value = error_mark_node;
2753
    }
2754
 
2755
  constant_expression_warning (value);
2756
 
2757
  return value;
2758
}
2759
 
2760
/* See if the case values LOW and HIGH are in the range of the original
2761
   type (i.e. before the default conversion to int) of the switch testing
2762
   expression.
2763
   TYPE is the promoted type of the testing expression, and ORIG_TYPE is
2764
   the type before promoting it.  CASE_LOW_P is a pointer to the lower
2765
   bound of the case label, and CASE_HIGH_P is the upper bound or NULL
2766
   if the case is not a case range.
2767
   The caller has to make sure that we are not called with NULL for
2768
   CASE_LOW_P (i.e. the default case).
2769
   Returns true if the case label is in range of ORIG_TYPE (saturated or
2770
   untouched) or false if the label is out of range.  */
2771
 
2772
static bool
2773
check_case_bounds (tree type, tree orig_type,
2774
                   tree *case_low_p, tree *case_high_p)
2775
{
2776
  tree min_value, max_value;
2777
  tree case_low = *case_low_p;
2778
  tree case_high = case_high_p ? *case_high_p : case_low;
2779
 
2780
  /* If there was a problem with the original type, do nothing.  */
2781
  if (orig_type == error_mark_node)
2782
    return true;
2783
 
2784
  min_value = TYPE_MIN_VALUE (orig_type);
2785
  max_value = TYPE_MAX_VALUE (orig_type);
2786
 
2787
  /* Case label is less than minimum for type.  */
2788
  if (tree_int_cst_compare (case_low, min_value) < 0
2789
      && tree_int_cst_compare (case_high, min_value) < 0)
2790
    {
2791
      warning (0, "case label value is less than minimum value for type");
2792
      return false;
2793
    }
2794
 
2795
  /* Case value is greater than maximum for type.  */
2796
  if (tree_int_cst_compare (case_low, max_value) > 0
2797
      && tree_int_cst_compare (case_high, max_value) > 0)
2798
    {
2799
      warning (0, "case label value exceeds maximum value for type");
2800
      return false;
2801
    }
2802
 
2803
  /* Saturate lower case label value to minimum.  */
2804
  if (tree_int_cst_compare (case_high, min_value) >= 0
2805
      && tree_int_cst_compare (case_low, min_value) < 0)
2806
    {
2807
      warning (0, "lower value in case label range"
2808
               " less than minimum value for type");
2809
      case_low = min_value;
2810
    }
2811
 
2812
  /* Saturate upper case label value to maximum.  */
2813
  if (tree_int_cst_compare (case_low, max_value) <= 0
2814
      && tree_int_cst_compare (case_high, max_value) > 0)
2815
    {
2816
      warning (0, "upper value in case label range"
2817
               " exceeds maximum value for type");
2818
      case_high = max_value;
2819
    }
2820
 
2821
  if (*case_low_p != case_low)
2822
    *case_low_p = convert (type, case_low);
2823
  if (case_high_p && *case_high_p != case_high)
2824
    *case_high_p = convert (type, case_high);
2825
 
2826
  return true;
2827
}
2828
 
2829
/* Return an integer type with BITS bits of precision,
2830
   that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
2831
 
2832
tree
2833
c_common_type_for_size (unsigned int bits, int unsignedp)
2834
{
2835
  if (bits == TYPE_PRECISION (integer_type_node))
2836
    return unsignedp ? unsigned_type_node : integer_type_node;
2837
 
2838
  if (bits == TYPE_PRECISION (signed_char_type_node))
2839
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2840
 
2841
  if (bits == TYPE_PRECISION (short_integer_type_node))
2842
    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2843
 
2844
  if (bits == TYPE_PRECISION (long_integer_type_node))
2845
    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2846
 
2847
  if (bits == TYPE_PRECISION (long_long_integer_type_node))
2848
    return (unsignedp ? long_long_unsigned_type_node
2849
            : long_long_integer_type_node);
2850
 
2851
  if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
2852
    return (unsignedp ? widest_unsigned_literal_type_node
2853
            : widest_integer_literal_type_node);
2854
 
2855
  if (bits <= TYPE_PRECISION (intQI_type_node))
2856
    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2857
 
2858
  if (bits <= TYPE_PRECISION (intHI_type_node))
2859
    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2860
 
2861
  if (bits <= TYPE_PRECISION (intSI_type_node))
2862
    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2863
 
2864
  if (bits <= TYPE_PRECISION (intDI_type_node))
2865
    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2866
 
2867
  return 0;
2868
}
2869
 
2870
/* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
2871
   that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
2872
   and saturating if SATP is nonzero, otherwise not saturating.  */
2873
 
2874
tree
2875
c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
2876
                                    int unsignedp, int satp)
2877
{
2878
  enum machine_mode mode;
2879
  if (ibit == 0)
2880
    mode = unsignedp ? UQQmode : QQmode;
2881
  else
2882
    mode = unsignedp ? UHAmode : HAmode;
2883
 
2884
  for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
2885
    if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
2886
      break;
2887
 
2888
  if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
2889
    {
2890
      sorry ("GCC cannot support operators with integer types and "
2891
             "fixed-point types that have too many integral and "
2892
             "fractional bits together");
2893
      return 0;
2894
    }
2895
 
2896
  return c_common_type_for_mode (mode, satp);
2897
}
2898
 
2899
/* Used for communication between c_common_type_for_mode and
2900
   c_register_builtin_type.  */
2901
static GTY(()) tree registered_builtin_types;
2902
 
2903
/* Return a data type that has machine mode MODE.
2904
   If the mode is an integer,
2905
   then UNSIGNEDP selects between signed and unsigned types.
2906
   If the mode is a fixed-point mode,
2907
   then UNSIGNEDP selects between saturating and nonsaturating types.  */
2908
 
2909
tree
2910
c_common_type_for_mode (enum machine_mode mode, int unsignedp)
2911
{
2912
  tree t;
2913
 
2914
  if (mode == TYPE_MODE (integer_type_node))
2915
    return unsignedp ? unsigned_type_node : integer_type_node;
2916
 
2917
  if (mode == TYPE_MODE (signed_char_type_node))
2918
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2919
 
2920
  if (mode == TYPE_MODE (short_integer_type_node))
2921
    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2922
 
2923
  if (mode == TYPE_MODE (long_integer_type_node))
2924
    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2925
 
2926
  if (mode == TYPE_MODE (long_long_integer_type_node))
2927
    return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2928
 
2929
  if (mode == TYPE_MODE (widest_integer_literal_type_node))
2930
    return unsignedp ? widest_unsigned_literal_type_node
2931
                     : widest_integer_literal_type_node;
2932
 
2933
  if (mode == QImode)
2934
    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2935
 
2936
  if (mode == HImode)
2937
    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2938
 
2939
  if (mode == SImode)
2940
    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2941
 
2942
  if (mode == DImode)
2943
    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2944
 
2945
#if HOST_BITS_PER_WIDE_INT >= 64
2946
  if (mode == TYPE_MODE (intTI_type_node))
2947
    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2948
#endif
2949
 
2950
  if (mode == TYPE_MODE (float_type_node))
2951
    return float_type_node;
2952
 
2953
  if (mode == TYPE_MODE (double_type_node))
2954
    return double_type_node;
2955
 
2956
  if (mode == TYPE_MODE (long_double_type_node))
2957
    return long_double_type_node;
2958
 
2959
  if (mode == TYPE_MODE (void_type_node))
2960
    return void_type_node;
2961
 
2962
  if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2963
    return (unsignedp
2964
            ? make_unsigned_type (GET_MODE_PRECISION (mode))
2965
            : make_signed_type (GET_MODE_PRECISION (mode)));
2966
 
2967
  if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2968
    return (unsignedp
2969
            ? make_unsigned_type (GET_MODE_PRECISION (mode))
2970
            : make_signed_type (GET_MODE_PRECISION (mode)));
2971
 
2972
  if (COMPLEX_MODE_P (mode))
2973
    {
2974
      enum machine_mode inner_mode;
2975
      tree inner_type;
2976
 
2977
      if (mode == TYPE_MODE (complex_float_type_node))
2978
        return complex_float_type_node;
2979
      if (mode == TYPE_MODE (complex_double_type_node))
2980
        return complex_double_type_node;
2981
      if (mode == TYPE_MODE (complex_long_double_type_node))
2982
        return complex_long_double_type_node;
2983
 
2984
      if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2985
        return complex_integer_type_node;
2986
 
2987
      inner_mode = GET_MODE_INNER (mode);
2988
      inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2989
      if (inner_type != NULL_TREE)
2990
        return build_complex_type (inner_type);
2991
    }
2992
  else if (VECTOR_MODE_P (mode))
2993
    {
2994
      enum machine_mode inner_mode = GET_MODE_INNER (mode);
2995
      tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2996
      if (inner_type != NULL_TREE)
2997
        return build_vector_type_for_mode (inner_type, mode);
2998
    }
2999
 
3000
  if (mode == TYPE_MODE (dfloat32_type_node))
3001
    return dfloat32_type_node;
3002
  if (mode == TYPE_MODE (dfloat64_type_node))
3003
    return dfloat64_type_node;
3004
  if (mode == TYPE_MODE (dfloat128_type_node))
3005
    return dfloat128_type_node;
3006
 
3007
  if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
3008
    {
3009
      if (mode == TYPE_MODE (short_fract_type_node))
3010
        return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
3011
      if (mode == TYPE_MODE (fract_type_node))
3012
        return unsignedp ? sat_fract_type_node : fract_type_node;
3013
      if (mode == TYPE_MODE (long_fract_type_node))
3014
        return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
3015
      if (mode == TYPE_MODE (long_long_fract_type_node))
3016
        return unsignedp ? sat_long_long_fract_type_node
3017
                         : long_long_fract_type_node;
3018
 
3019
      if (mode == TYPE_MODE (unsigned_short_fract_type_node))
3020
        return unsignedp ? sat_unsigned_short_fract_type_node
3021
                         : unsigned_short_fract_type_node;
3022
      if (mode == TYPE_MODE (unsigned_fract_type_node))
3023
        return unsignedp ? sat_unsigned_fract_type_node
3024
                         : unsigned_fract_type_node;
3025
      if (mode == TYPE_MODE (unsigned_long_fract_type_node))
3026
        return unsignedp ? sat_unsigned_long_fract_type_node
3027
                         : unsigned_long_fract_type_node;
3028
      if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
3029
        return unsignedp ? sat_unsigned_long_long_fract_type_node
3030
                         : unsigned_long_long_fract_type_node;
3031
 
3032
      if (mode == TYPE_MODE (short_accum_type_node))
3033
        return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
3034
      if (mode == TYPE_MODE (accum_type_node))
3035
        return unsignedp ? sat_accum_type_node : accum_type_node;
3036
      if (mode == TYPE_MODE (long_accum_type_node))
3037
        return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
3038
      if (mode == TYPE_MODE (long_long_accum_type_node))
3039
        return unsignedp ? sat_long_long_accum_type_node
3040
                         : long_long_accum_type_node;
3041
 
3042
      if (mode == TYPE_MODE (unsigned_short_accum_type_node))
3043
        return unsignedp ? sat_unsigned_short_accum_type_node
3044
                         : unsigned_short_accum_type_node;
3045
      if (mode == TYPE_MODE (unsigned_accum_type_node))
3046
        return unsignedp ? sat_unsigned_accum_type_node
3047
                         : unsigned_accum_type_node;
3048
      if (mode == TYPE_MODE (unsigned_long_accum_type_node))
3049
        return unsignedp ? sat_unsigned_long_accum_type_node
3050
                         : unsigned_long_accum_type_node;
3051
      if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
3052
        return unsignedp ? sat_unsigned_long_long_accum_type_node
3053
                         : unsigned_long_long_accum_type_node;
3054
 
3055
      if (mode == QQmode)
3056
        return unsignedp ? sat_qq_type_node : qq_type_node;
3057
      if (mode == HQmode)
3058
        return unsignedp ? sat_hq_type_node : hq_type_node;
3059
      if (mode == SQmode)
3060
        return unsignedp ? sat_sq_type_node : sq_type_node;
3061
      if (mode == DQmode)
3062
        return unsignedp ? sat_dq_type_node : dq_type_node;
3063
      if (mode == TQmode)
3064
        return unsignedp ? sat_tq_type_node : tq_type_node;
3065
 
3066
      if (mode == UQQmode)
3067
        return unsignedp ? sat_uqq_type_node : uqq_type_node;
3068
      if (mode == UHQmode)
3069
        return unsignedp ? sat_uhq_type_node : uhq_type_node;
3070
      if (mode == USQmode)
3071
        return unsignedp ? sat_usq_type_node : usq_type_node;
3072
      if (mode == UDQmode)
3073
        return unsignedp ? sat_udq_type_node : udq_type_node;
3074
      if (mode == UTQmode)
3075
        return unsignedp ? sat_utq_type_node : utq_type_node;
3076
 
3077
      if (mode == HAmode)
3078
        return unsignedp ? sat_ha_type_node : ha_type_node;
3079
      if (mode == SAmode)
3080
        return unsignedp ? sat_sa_type_node : sa_type_node;
3081
      if (mode == DAmode)
3082
        return unsignedp ? sat_da_type_node : da_type_node;
3083
      if (mode == TAmode)
3084
        return unsignedp ? sat_ta_type_node : ta_type_node;
3085
 
3086
      if (mode == UHAmode)
3087
        return unsignedp ? sat_uha_type_node : uha_type_node;
3088
      if (mode == USAmode)
3089
        return unsignedp ? sat_usa_type_node : usa_type_node;
3090
      if (mode == UDAmode)
3091
        return unsignedp ? sat_uda_type_node : uda_type_node;
3092
      if (mode == UTAmode)
3093
        return unsignedp ? sat_uta_type_node : uta_type_node;
3094
    }
3095
 
3096
  for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
3097
    if (TYPE_MODE (TREE_VALUE (t)) == mode)
3098
      return TREE_VALUE (t);
3099
 
3100
  return 0;
3101
}
3102
 
3103
tree
3104
c_common_unsigned_type (tree type)
3105
{
3106
  return c_common_signed_or_unsigned_type (1, type);
3107
}
3108
 
3109
/* Return a signed type the same as TYPE in other respects.  */
3110
 
3111
tree
3112
c_common_signed_type (tree type)
3113
{
3114
  return c_common_signed_or_unsigned_type (0, type);
3115
}
3116
 
3117
/* Return a type the same as TYPE except unsigned or
3118
   signed according to UNSIGNEDP.  */
3119
 
3120
tree
3121
c_common_signed_or_unsigned_type (int unsignedp, tree type)
3122
{
3123
  tree type1;
3124
 
3125
  /* This block of code emulates the behavior of the old
3126
     c_common_unsigned_type. In particular, it returns
3127
     long_unsigned_type_node if passed a long, even when a int would
3128
     have the same size. This is necessary for warnings to work
3129
     correctly in archs where sizeof(int) == sizeof(long) */
3130
 
3131
  type1 = TYPE_MAIN_VARIANT (type);
3132
  if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
3133
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3134
  if (type1 == integer_type_node || type1 == unsigned_type_node)
3135
    return unsignedp ? unsigned_type_node : integer_type_node;
3136
  if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
3137
    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3138
  if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
3139
    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3140
  if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
3141
    return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
3142
  if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
3143
    return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
3144
#if HOST_BITS_PER_WIDE_INT >= 64
3145
  if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
3146
    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3147
#endif
3148
  if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
3149
    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3150
  if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
3151
    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3152
  if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
3153
    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3154
  if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
3155
    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3156
 
3157
#define C_COMMON_FIXED_TYPES(NAME)          \
3158
  if (type1 == short_ ## NAME ## _type_node \
3159
      || type1 == unsigned_short_ ## NAME ## _type_node) \
3160
    return unsignedp ? unsigned_short_ ## NAME ## _type_node \
3161
                     : short_ ## NAME ## _type_node; \
3162
  if (type1 == NAME ## _type_node \
3163
      || type1 == unsigned_ ## NAME ## _type_node) \
3164
    return unsignedp ? unsigned_ ## NAME ## _type_node \
3165
                     : NAME ## _type_node; \
3166
  if (type1 == long_ ## NAME ## _type_node \
3167
      || type1 == unsigned_long_ ## NAME ## _type_node) \
3168
    return unsignedp ? unsigned_long_ ## NAME ## _type_node \
3169
                     : long_ ## NAME ## _type_node; \
3170
  if (type1 == long_long_ ## NAME ## _type_node \
3171
      || type1 == unsigned_long_long_ ## NAME ## _type_node) \
3172
    return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
3173
                     : long_long_ ## NAME ## _type_node;
3174
 
3175
#define C_COMMON_FIXED_MODE_TYPES(NAME) \
3176
  if (type1 == NAME ## _type_node \
3177
      || type1 == u ## NAME ## _type_node) \
3178
    return unsignedp ? u ## NAME ## _type_node \
3179
                     : NAME ## _type_node;
3180
 
3181
#define C_COMMON_FIXED_TYPES_SAT(NAME) \
3182
  if (type1 == sat_ ## short_ ## NAME ## _type_node \
3183
      || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
3184
    return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
3185
                     : sat_ ## short_ ## NAME ## _type_node; \
3186
  if (type1 == sat_ ## NAME ## _type_node \
3187
      || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
3188
    return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
3189
                     : sat_ ## NAME ## _type_node; \
3190
  if (type1 == sat_ ## long_ ## NAME ## _type_node \
3191
      || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
3192
    return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
3193
                     : sat_ ## long_ ## NAME ## _type_node; \
3194
  if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
3195
      || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
3196
    return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
3197
                     : sat_ ## long_long_ ## NAME ## _type_node;
3198
 
3199
#define C_COMMON_FIXED_MODE_TYPES_SAT(NAME)     \
3200
  if (type1 == sat_ ## NAME ## _type_node \
3201
      || type1 == sat_ ## u ## NAME ## _type_node) \
3202
    return unsignedp ? sat_ ## u ## NAME ## _type_node \
3203
                     : sat_ ## NAME ## _type_node;
3204
 
3205
  C_COMMON_FIXED_TYPES (fract);
3206
  C_COMMON_FIXED_TYPES_SAT (fract);
3207
  C_COMMON_FIXED_TYPES (accum);
3208
  C_COMMON_FIXED_TYPES_SAT (accum);
3209
 
3210
  C_COMMON_FIXED_MODE_TYPES (qq);
3211
  C_COMMON_FIXED_MODE_TYPES (hq);
3212
  C_COMMON_FIXED_MODE_TYPES (sq);
3213
  C_COMMON_FIXED_MODE_TYPES (dq);
3214
  C_COMMON_FIXED_MODE_TYPES (tq);
3215
  C_COMMON_FIXED_MODE_TYPES_SAT (qq);
3216
  C_COMMON_FIXED_MODE_TYPES_SAT (hq);
3217
  C_COMMON_FIXED_MODE_TYPES_SAT (sq);
3218
  C_COMMON_FIXED_MODE_TYPES_SAT (dq);
3219
  C_COMMON_FIXED_MODE_TYPES_SAT (tq);
3220
  C_COMMON_FIXED_MODE_TYPES (ha);
3221
  C_COMMON_FIXED_MODE_TYPES (sa);
3222
  C_COMMON_FIXED_MODE_TYPES (da);
3223
  C_COMMON_FIXED_MODE_TYPES (ta);
3224
  C_COMMON_FIXED_MODE_TYPES_SAT (ha);
3225
  C_COMMON_FIXED_MODE_TYPES_SAT (sa);
3226
  C_COMMON_FIXED_MODE_TYPES_SAT (da);
3227
  C_COMMON_FIXED_MODE_TYPES_SAT (ta);
3228
 
3229
  /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
3230
     the precision; they have precision set to match their range, but
3231
     may use a wider mode to match an ABI.  If we change modes, we may
3232
     wind up with bad conversions.  For INTEGER_TYPEs in C, must check
3233
     the precision as well, so as to yield correct results for
3234
     bit-field types.  C++ does not have these separate bit-field
3235
     types, and producing a signed or unsigned variant of an
3236
     ENUMERAL_TYPE may cause other problems as well.  */
3237
 
3238
  if (!INTEGRAL_TYPE_P (type)
3239
      || TYPE_UNSIGNED (type) == unsignedp)
3240
    return type;
3241
 
3242
#define TYPE_OK(node)                                                       \
3243
  (TYPE_MODE (type) == TYPE_MODE (node)                                     \
3244
   && TYPE_PRECISION (type) == TYPE_PRECISION (node))
3245
  if (TYPE_OK (signed_char_type_node))
3246
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3247
  if (TYPE_OK (integer_type_node))
3248
    return unsignedp ? unsigned_type_node : integer_type_node;
3249
  if (TYPE_OK (short_integer_type_node))
3250
    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3251
  if (TYPE_OK (long_integer_type_node))
3252
    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3253
  if (TYPE_OK (long_long_integer_type_node))
3254
    return (unsignedp ? long_long_unsigned_type_node
3255
            : long_long_integer_type_node);
3256
  if (TYPE_OK (widest_integer_literal_type_node))
3257
    return (unsignedp ? widest_unsigned_literal_type_node
3258
            : widest_integer_literal_type_node);
3259
 
3260
#if HOST_BITS_PER_WIDE_INT >= 64
3261
  if (TYPE_OK (intTI_type_node))
3262
    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3263
#endif
3264
  if (TYPE_OK (intDI_type_node))
3265
    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3266
  if (TYPE_OK (intSI_type_node))
3267
    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3268
  if (TYPE_OK (intHI_type_node))
3269
    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3270
  if (TYPE_OK (intQI_type_node))
3271
    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3272
#undef TYPE_OK
3273
 
3274
  return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
3275
}
3276
 
3277
/* Build a bit-field integer type for the given WIDTH and UNSIGNEDP.  */
3278
 
3279
tree
3280
c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
3281
{
3282
  /* Extended integer types of the same width as a standard type have
3283
     lesser rank, so those of the same width as int promote to int or
3284
     unsigned int and are valid for printf formats expecting int or
3285
     unsigned int.  To avoid such special cases, avoid creating
3286
     extended integer types for bit-fields if a standard integer type
3287
     is available.  */
3288
  if (width == TYPE_PRECISION (integer_type_node))
3289
    return unsignedp ? unsigned_type_node : integer_type_node;
3290
  if (width == TYPE_PRECISION (signed_char_type_node))
3291
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3292
  if (width == TYPE_PRECISION (short_integer_type_node))
3293
    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3294
  if (width == TYPE_PRECISION (long_integer_type_node))
3295
    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3296
  if (width == TYPE_PRECISION (long_long_integer_type_node))
3297
    return (unsignedp ? long_long_unsigned_type_node
3298
            : long_long_integer_type_node);
3299
  return build_nonstandard_integer_type (width, unsignedp);
3300
}
3301
 
3302
/* The C version of the register_builtin_type langhook.  */
3303
 
3304
void
3305
c_register_builtin_type (tree type, const char* name)
3306
{
3307
  tree decl;
3308
 
3309
  decl = build_decl (UNKNOWN_LOCATION,
3310
                     TYPE_DECL, get_identifier (name), type);
3311
  DECL_ARTIFICIAL (decl) = 1;
3312
  if (!TYPE_NAME (type))
3313
    TYPE_NAME (type) = decl;
3314
  pushdecl (decl);
3315
 
3316
  registered_builtin_types = tree_cons (0, type, registered_builtin_types);
3317
}
3318
 
3319
/* Print an error message for invalid operands to arith operation
3320
   CODE with TYPE0 for operand 0, and TYPE1 for operand 1.
3321
   LOCATION is the location of the message.  */
3322
 
3323
void
3324
binary_op_error (location_t location, enum tree_code code,
3325
                 tree type0, tree type1)
3326
{
3327
  const char *opname;
3328
 
3329
  switch (code)
3330
    {
3331
    case PLUS_EXPR:
3332
      opname = "+"; break;
3333
    case MINUS_EXPR:
3334
      opname = "-"; break;
3335
    case MULT_EXPR:
3336
      opname = "*"; break;
3337
    case MAX_EXPR:
3338
      opname = "max"; break;
3339
    case MIN_EXPR:
3340
      opname = "min"; break;
3341
    case EQ_EXPR:
3342
      opname = "=="; break;
3343
    case NE_EXPR:
3344
      opname = "!="; break;
3345
    case LE_EXPR:
3346
      opname = "<="; break;
3347
    case GE_EXPR:
3348
      opname = ">="; break;
3349
    case LT_EXPR:
3350
      opname = "<"; break;
3351
    case GT_EXPR:
3352
      opname = ">"; break;
3353
    case LSHIFT_EXPR:
3354
      opname = "<<"; break;
3355
    case RSHIFT_EXPR:
3356
      opname = ">>"; break;
3357
    case TRUNC_MOD_EXPR:
3358
    case FLOOR_MOD_EXPR:
3359
      opname = "%"; break;
3360
    case TRUNC_DIV_EXPR:
3361
    case FLOOR_DIV_EXPR:
3362
      opname = "/"; break;
3363
    case BIT_AND_EXPR:
3364
      opname = "&"; break;
3365
    case BIT_IOR_EXPR:
3366
      opname = "|"; break;
3367
    case TRUTH_ANDIF_EXPR:
3368
      opname = "&&"; break;
3369
    case TRUTH_ORIF_EXPR:
3370
      opname = "||"; break;
3371
    case BIT_XOR_EXPR:
3372
      opname = "^"; break;
3373
    default:
3374
      gcc_unreachable ();
3375
    }
3376
  error_at (location,
3377
            "invalid operands to binary %s (have %qT and %qT)", opname,
3378
            type0, type1);
3379
}
3380
 
3381
/* Subroutine of build_binary_op, used for comparison operations.
3382
   See if the operands have both been converted from subword integer types
3383
   and, if so, perhaps change them both back to their original type.
3384
   This function is also responsible for converting the two operands
3385
   to the proper common type for comparison.
3386
 
3387
   The arguments of this function are all pointers to local variables
3388
   of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
3389
   RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
3390
 
3391
   If this function returns nonzero, it means that the comparison has
3392
   a constant value.  What this function returns is an expression for
3393
   that value.  */
3394
 
3395
tree
3396
shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
3397
                 enum tree_code *rescode_ptr)
3398
{
3399
  tree type;
3400
  tree op0 = *op0_ptr;
3401
  tree op1 = *op1_ptr;
3402
  int unsignedp0, unsignedp1;
3403
  int real1, real2;
3404
  tree primop0, primop1;
3405
  enum tree_code code = *rescode_ptr;
3406
 
3407
  /* Throw away any conversions to wider types
3408
     already present in the operands.  */
3409
 
3410
  primop0 = get_narrower (op0, &unsignedp0);
3411
  primop1 = get_narrower (op1, &unsignedp1);
3412
 
3413
  /* Handle the case that OP0 does not *contain* a conversion
3414
     but it *requires* conversion to FINAL_TYPE.  */
3415
 
3416
  if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
3417
    unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3418
  if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
3419
    unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3420
 
3421
  /* If one of the operands must be floated, we cannot optimize.  */
3422
  real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
3423
  real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
3424
 
3425
  /* If first arg is constant, swap the args (changing operation
3426
     so value is preserved), for canonicalization.  Don't do this if
3427
     the second arg is 0.  */
3428
 
3429
  if (TREE_CONSTANT (primop0)
3430
      && !integer_zerop (primop1) && !real_zerop (primop1)
3431
      && !fixed_zerop (primop1))
3432
    {
3433
      tree tem = primop0;
3434
      int temi = unsignedp0;
3435
      primop0 = primop1;
3436
      primop1 = tem;
3437
      tem = op0;
3438
      op0 = op1;
3439
      op1 = tem;
3440
      *op0_ptr = op0;
3441
      *op1_ptr = op1;
3442
      unsignedp0 = unsignedp1;
3443
      unsignedp1 = temi;
3444
      temi = real1;
3445
      real1 = real2;
3446
      real2 = temi;
3447
 
3448
      switch (code)
3449
        {
3450
        case LT_EXPR:
3451
          code = GT_EXPR;
3452
          break;
3453
        case GT_EXPR:
3454
          code = LT_EXPR;
3455
          break;
3456
        case LE_EXPR:
3457
          code = GE_EXPR;
3458
          break;
3459
        case GE_EXPR:
3460
          code = LE_EXPR;
3461
          break;
3462
        default:
3463
          break;
3464
        }
3465
      *rescode_ptr = code;
3466
    }
3467
 
3468
  /* If comparing an integer against a constant more bits wide,
3469
     maybe we can deduce a value of 1 or 0 independent of the data.
3470
     Or else truncate the constant now
3471
     rather than extend the variable at run time.
3472
 
3473
     This is only interesting if the constant is the wider arg.
3474
     Also, it is not safe if the constant is unsigned and the
3475
     variable arg is signed, since in this case the variable
3476
     would be sign-extended and then regarded as unsigned.
3477
     Our technique fails in this case because the lowest/highest
3478
     possible unsigned results don't follow naturally from the
3479
     lowest/highest possible values of the variable operand.
3480
     For just EQ_EXPR and NE_EXPR there is another technique that
3481
     could be used: see if the constant can be faithfully represented
3482
     in the other operand's type, by truncating it and reextending it
3483
     and see if that preserves the constant's value.  */
3484
 
3485
  if (!real1 && !real2
3486
      && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
3487
      && TREE_CODE (primop1) == INTEGER_CST
3488
      && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
3489
    {
3490
      int min_gt, max_gt, min_lt, max_lt;
3491
      tree maxval, minval;
3492
      /* 1 if comparison is nominally unsigned.  */
3493
      int unsignedp = TYPE_UNSIGNED (*restype_ptr);
3494
      tree val;
3495
 
3496
      type = c_common_signed_or_unsigned_type (unsignedp0,
3497
                                               TREE_TYPE (primop0));
3498
 
3499
      maxval = TYPE_MAX_VALUE (type);
3500
      minval = TYPE_MIN_VALUE (type);
3501
 
3502
      if (unsignedp && !unsignedp0)
3503
        *restype_ptr = c_common_signed_type (*restype_ptr);
3504
 
3505
      if (TREE_TYPE (primop1) != *restype_ptr)
3506
        {
3507
          /* Convert primop1 to target type, but do not introduce
3508
             additional overflow.  We know primop1 is an int_cst.  */
3509
          primop1 = force_fit_type_double (*restype_ptr,
3510
                                           TREE_INT_CST_LOW (primop1),
3511
                                           TREE_INT_CST_HIGH (primop1), 0,
3512
                                           TREE_OVERFLOW (primop1));
3513
        }
3514
      if (type != *restype_ptr)
3515
        {
3516
          minval = convert (*restype_ptr, minval);
3517
          maxval = convert (*restype_ptr, maxval);
3518
        }
3519
 
3520
      if (unsignedp && unsignedp0)
3521
        {
3522
          min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
3523
          max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
3524
          min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
3525
          max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
3526
        }
3527
      else
3528
        {
3529
          min_gt = INT_CST_LT (primop1, minval);
3530
          max_gt = INT_CST_LT (primop1, maxval);
3531
          min_lt = INT_CST_LT (minval, primop1);
3532
          max_lt = INT_CST_LT (maxval, primop1);
3533
        }
3534
 
3535
      val = 0;
3536
      /* This used to be a switch, but Genix compiler can't handle that.  */
3537
      if (code == NE_EXPR)
3538
        {
3539
          if (max_lt || min_gt)
3540
            val = truthvalue_true_node;
3541
        }
3542
      else if (code == EQ_EXPR)
3543
        {
3544
          if (max_lt || min_gt)
3545
            val = truthvalue_false_node;
3546
        }
3547
      else if (code == LT_EXPR)
3548
        {
3549
          if (max_lt)
3550
            val = truthvalue_true_node;
3551
          if (!min_lt)
3552
            val = truthvalue_false_node;
3553
        }
3554
      else if (code == GT_EXPR)
3555
        {
3556
          if (min_gt)
3557
            val = truthvalue_true_node;
3558
          if (!max_gt)
3559
            val = truthvalue_false_node;
3560
        }
3561
      else if (code == LE_EXPR)
3562
        {
3563
          if (!max_gt)
3564
            val = truthvalue_true_node;
3565
          if (min_gt)
3566
            val = truthvalue_false_node;
3567
        }
3568
      else if (code == GE_EXPR)
3569
        {
3570
          if (!min_lt)
3571
            val = truthvalue_true_node;
3572
          if (max_lt)
3573
            val = truthvalue_false_node;
3574
        }
3575
 
3576
      /* If primop0 was sign-extended and unsigned comparison specd,
3577
         we did a signed comparison above using the signed type bounds.
3578
         But the comparison we output must be unsigned.
3579
 
3580
         Also, for inequalities, VAL is no good; but if the signed
3581
         comparison had *any* fixed result, it follows that the
3582
         unsigned comparison just tests the sign in reverse
3583
         (positive values are LE, negative ones GE).
3584
         So we can generate an unsigned comparison
3585
         against an extreme value of the signed type.  */
3586
 
3587
      if (unsignedp && !unsignedp0)
3588
        {
3589
          if (val != 0)
3590
            switch (code)
3591
              {
3592
              case LT_EXPR:
3593
              case GE_EXPR:
3594
                primop1 = TYPE_MIN_VALUE (type);
3595
                val = 0;
3596
                break;
3597
 
3598
              case LE_EXPR:
3599
              case GT_EXPR:
3600
                primop1 = TYPE_MAX_VALUE (type);
3601
                val = 0;
3602
                break;
3603
 
3604
              default:
3605
                break;
3606
              }
3607
          type = c_common_unsigned_type (type);
3608
        }
3609
 
3610
      if (TREE_CODE (primop0) != INTEGER_CST)
3611
        {
3612
          if (val == truthvalue_false_node)
3613
            warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
3614
          if (val == truthvalue_true_node)
3615
            warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
3616
        }
3617
 
3618
      if (val != 0)
3619
        {
3620
          /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
3621
          if (TREE_SIDE_EFFECTS (primop0))
3622
            return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
3623
          return val;
3624
        }
3625
 
3626
      /* Value is not predetermined, but do the comparison
3627
         in the type of the operand that is not constant.
3628
         TYPE is already properly set.  */
3629
    }
3630
 
3631
  /* If either arg is decimal float and the other is float, find the
3632
     proper common type to use for comparison.  */
3633
  else if (real1 && real2
3634
           && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
3635
               || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
3636
    type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3637
 
3638
  else if (real1 && real2
3639
           && (TYPE_PRECISION (TREE_TYPE (primop0))
3640
               == TYPE_PRECISION (TREE_TYPE (primop1))))
3641
    type = TREE_TYPE (primop0);
3642
 
3643
  /* If args' natural types are both narrower than nominal type
3644
     and both extend in the same manner, compare them
3645
     in the type of the wider arg.
3646
     Otherwise must actually extend both to the nominal
3647
     common type lest different ways of extending
3648
     alter the result.
3649
     (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
3650
 
3651
  else if (unsignedp0 == unsignedp1 && real1 == real2
3652
           && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
3653
           && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
3654
    {
3655
      type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3656
      type = c_common_signed_or_unsigned_type (unsignedp0
3657
                                               || TYPE_UNSIGNED (*restype_ptr),
3658
                                               type);
3659
      /* Make sure shorter operand is extended the right way
3660
         to match the longer operand.  */
3661
      primop0
3662
        = convert (c_common_signed_or_unsigned_type (unsignedp0,
3663
                                                     TREE_TYPE (primop0)),
3664
                   primop0);
3665
      primop1
3666
        = convert (c_common_signed_or_unsigned_type (unsignedp1,
3667
                                                     TREE_TYPE (primop1)),
3668
                   primop1);
3669
    }
3670
  else
3671
    {
3672
      /* Here we must do the comparison on the nominal type
3673
         using the args exactly as we received them.  */
3674
      type = *restype_ptr;
3675
      primop0 = op0;
3676
      primop1 = op1;
3677
 
3678
      if (!real1 && !real2 && integer_zerop (primop1)
3679
          && TYPE_UNSIGNED (*restype_ptr))
3680
        {
3681
          tree value = 0;
3682
          switch (code)
3683
            {
3684
            case GE_EXPR:
3685
              /* All unsigned values are >= 0, so we warn.  However,
3686
                 if OP0 is a constant that is >= 0, the signedness of
3687
                 the comparison isn't an issue, so suppress the
3688
                 warning.  */
3689
              if (warn_type_limits && !in_system_header
3690
                  && !(TREE_CODE (primop0) == INTEGER_CST
3691
                       && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3692
                                                   primop0))))
3693
                warning (OPT_Wtype_limits,
3694
                         "comparison of unsigned expression >= 0 is always true");
3695
              value = truthvalue_true_node;
3696
              break;
3697
 
3698
            case LT_EXPR:
3699
              if (warn_type_limits && !in_system_header
3700
                  && !(TREE_CODE (primop0) == INTEGER_CST
3701
                       && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3702
                                                   primop0))))
3703
                warning (OPT_Wtype_limits,
3704
                         "comparison of unsigned expression < 0 is always false");
3705
              value = truthvalue_false_node;
3706
              break;
3707
 
3708
            default:
3709
              break;
3710
            }
3711
 
3712
          if (value != 0)
3713
            {
3714
              /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
3715
              if (TREE_SIDE_EFFECTS (primop0))
3716
                return build2 (COMPOUND_EXPR, TREE_TYPE (value),
3717
                               primop0, value);
3718
              return value;
3719
            }
3720
        }
3721
    }
3722
 
3723
  *op0_ptr = convert (type, primop0);
3724
  *op1_ptr = convert (type, primop1);
3725
 
3726
  *restype_ptr = truthvalue_type_node;
3727
 
3728
  return 0;
3729
}
3730
 
3731
/* Return a tree for the sum or difference (RESULTCODE says which)
3732
   of pointer PTROP and integer INTOP.  */
3733
 
3734
tree
3735
pointer_int_sum (location_t loc, enum tree_code resultcode,
3736
                 tree ptrop, tree intop)
3737
{
3738
  tree size_exp, ret;
3739
 
3740
  /* The result is a pointer of the same type that is being added.  */
3741
  tree result_type = TREE_TYPE (ptrop);
3742
 
3743
  if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
3744
    {
3745
      pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3746
               "pointer of type %<void *%> used in arithmetic");
3747
      size_exp = integer_one_node;
3748
    }
3749
  else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
3750
    {
3751
      pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3752
               "pointer to a function used in arithmetic");
3753
      size_exp = integer_one_node;
3754
    }
3755
  else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
3756
    {
3757
      pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3758
               "pointer to member function used in arithmetic");
3759
      size_exp = integer_one_node;
3760
    }
3761
  else
3762
    size_exp = size_in_bytes (TREE_TYPE (result_type));
3763
 
3764
  /* We are manipulating pointer values, so we don't need to warn
3765
     about relying on undefined signed overflow.  We disable the
3766
     warning here because we use integer types so fold won't know that
3767
     they are really pointers.  */
3768
  fold_defer_overflow_warnings ();
3769
 
3770
  /* If what we are about to multiply by the size of the elements
3771
     contains a constant term, apply distributive law
3772
     and multiply that constant term separately.
3773
     This helps produce common subexpressions.  */
3774
  if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
3775
      && !TREE_CONSTANT (intop)
3776
      && TREE_CONSTANT (TREE_OPERAND (intop, 1))
3777
      && TREE_CONSTANT (size_exp)
3778
      /* If the constant comes from pointer subtraction,
3779
         skip this optimization--it would cause an error.  */
3780
      && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
3781
      /* If the constant is unsigned, and smaller than the pointer size,
3782
         then we must skip this optimization.  This is because it could cause
3783
         an overflow error if the constant is negative but INTOP is not.  */
3784
      && (!TYPE_UNSIGNED (TREE_TYPE (intop))
3785
          || (TYPE_PRECISION (TREE_TYPE (intop))
3786
              == TYPE_PRECISION (TREE_TYPE (ptrop)))))
3787
    {
3788
      enum tree_code subcode = resultcode;
3789
      tree int_type = TREE_TYPE (intop);
3790
      if (TREE_CODE (intop) == MINUS_EXPR)
3791
        subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
3792
      /* Convert both subexpression types to the type of intop,
3793
         because weird cases involving pointer arithmetic
3794
         can result in a sum or difference with different type args.  */
3795
      ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
3796
                               subcode, ptrop,
3797
                               convert (int_type, TREE_OPERAND (intop, 1)), 1);
3798
      intop = convert (int_type, TREE_OPERAND (intop, 0));
3799
    }
3800
 
3801
  /* Convert the integer argument to a type the same size as sizetype
3802
     so the multiply won't overflow spuriously.  */
3803
  if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
3804
      || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
3805
    intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
3806
                                             TYPE_UNSIGNED (sizetype)), intop);
3807
 
3808
  /* Replace the integer argument with a suitable product by the object size.
3809
     Do this multiplication as signed, then convert to the appropriate
3810
     type for the pointer operation.  */
3811
  intop = convert (sizetype,
3812
                   build_binary_op (loc,
3813
                                    MULT_EXPR, intop,
3814
                                    convert (TREE_TYPE (intop), size_exp), 1));
3815
 
3816
  /* Create the sum or difference.  */
3817
  if (resultcode == MINUS_EXPR)
3818
    intop = fold_build1_loc (loc, NEGATE_EXPR, sizetype, intop);
3819
 
3820
  ret = fold_build2_loc (loc, POINTER_PLUS_EXPR, result_type, ptrop, intop);
3821
 
3822
  fold_undefer_and_ignore_overflow_warnings ();
3823
 
3824
  return ret;
3825
}
3826
 
3827
/* Wrap a C_MAYBE_CONST_EXPR around an expression that is fully folded
3828
   and if NON_CONST is known not to be permitted in an evaluated part
3829
   of a constant expression.  */
3830
 
3831
tree
3832
c_wrap_maybe_const (tree expr, bool non_const)
3833
{
3834
  bool nowarning = TREE_NO_WARNING (expr);
3835
  location_t loc = EXPR_LOCATION (expr);
3836
 
3837
  /* This should never be called for C++.  */
3838
  if (c_dialect_cxx ())
3839
    gcc_unreachable ();
3840
 
3841
  /* The result of folding may have a NOP_EXPR to set TREE_NO_WARNING.  */
3842
  STRIP_TYPE_NOPS (expr);
3843
  expr = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr), NULL, expr);
3844
  C_MAYBE_CONST_EXPR_NON_CONST (expr) = non_const;
3845
  if (nowarning)
3846
    TREE_NO_WARNING (expr) = 1;
3847
  protected_set_expr_location (expr, loc);
3848
 
3849
  return expr;
3850
}
3851
 
3852
/* Wrap a SAVE_EXPR around EXPR, if appropriate.  Like save_expr, but
3853
   for C folds the inside expression and wraps a C_MAYBE_CONST_EXPR
3854
   around the SAVE_EXPR if needed so that c_fully_fold does not need
3855
   to look inside SAVE_EXPRs.  */
3856
 
3857
tree
3858
c_save_expr (tree expr)
3859
{
3860
  bool maybe_const = true;
3861
  if (c_dialect_cxx ())
3862
    return save_expr (expr);
3863
  expr = c_fully_fold (expr, false, &maybe_const);
3864
  expr = save_expr (expr);
3865
  if (!maybe_const)
3866
    expr = c_wrap_maybe_const (expr, true);
3867
  return expr;
3868
}
3869
 
3870
/* Return whether EXPR is a declaration whose address can never be
3871
   NULL.  */
3872
 
3873
bool
3874
decl_with_nonnull_addr_p (const_tree expr)
3875
{
3876
  return (DECL_P (expr)
3877
          && (TREE_CODE (expr) == PARM_DECL
3878
              || TREE_CODE (expr) == LABEL_DECL
3879
              || !DECL_WEAK (expr)));
3880
}
3881
 
3882
/* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
3883
   or for an `if' or `while' statement or ?..: exp.  It should already
3884
   have been validated to be of suitable type; otherwise, a bad
3885
   diagnostic may result.
3886
 
3887
   The EXPR is located at LOCATION.
3888
 
3889
   This preparation consists of taking the ordinary
3890
   representation of an expression expr and producing a valid tree
3891
   boolean expression describing whether expr is nonzero.  We could
3892
   simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
3893
   but we optimize comparisons, &&, ||, and !.
3894
 
3895
   The resulting type should always be `truthvalue_type_node'.  */
3896
 
3897
tree
3898
c_common_truthvalue_conversion (location_t location, tree expr)
3899
{
3900
  switch (TREE_CODE (expr))
3901
    {
3902
    case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
3903
    case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
3904
    case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
3905
    case ORDERED_EXPR: case UNORDERED_EXPR:
3906
      if (TREE_TYPE (expr) == truthvalue_type_node)
3907
        return expr;
3908
      expr = build2 (TREE_CODE (expr), truthvalue_type_node,
3909
                     TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
3910
      goto ret;
3911
 
3912
    case TRUTH_ANDIF_EXPR:
3913
    case TRUTH_ORIF_EXPR:
3914
    case TRUTH_AND_EXPR:
3915
    case TRUTH_OR_EXPR:
3916
    case TRUTH_XOR_EXPR:
3917
      if (TREE_TYPE (expr) == truthvalue_type_node)
3918
        return expr;
3919
      expr = build2 (TREE_CODE (expr), truthvalue_type_node,
3920
                     c_common_truthvalue_conversion (location,
3921
                                                     TREE_OPERAND (expr, 0)),
3922
                     c_common_truthvalue_conversion (location,
3923
                                                     TREE_OPERAND (expr, 1)));
3924
      goto ret;
3925
 
3926
    case TRUTH_NOT_EXPR:
3927
      if (TREE_TYPE (expr) == truthvalue_type_node)
3928
        return expr;
3929
      expr = build1 (TREE_CODE (expr), truthvalue_type_node,
3930
                     c_common_truthvalue_conversion (location,
3931
                                                     TREE_OPERAND (expr, 0)));
3932
      goto ret;
3933
 
3934
    case ERROR_MARK:
3935
      return expr;
3936
 
3937
    case INTEGER_CST:
3938
      return integer_zerop (expr) ? truthvalue_false_node
3939
                                  : truthvalue_true_node;
3940
 
3941
    case REAL_CST:
3942
      return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
3943
             ? truthvalue_true_node
3944
             : truthvalue_false_node;
3945
 
3946
    case FIXED_CST:
3947
      return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
3948
                            &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
3949
             ? truthvalue_true_node
3950
             : truthvalue_false_node;
3951
 
3952
    case FUNCTION_DECL:
3953
      expr = build_unary_op (location, ADDR_EXPR, expr, 0);
3954
      /* Fall through.  */
3955
 
3956
    case ADDR_EXPR:
3957
      {
3958
        tree inner = TREE_OPERAND (expr, 0);
3959
        if (decl_with_nonnull_addr_p (inner))
3960
          {
3961
            /* Common Ada/Pascal programmer's mistake.  */
3962
            warning_at (location,
3963
                        OPT_Waddress,
3964
                        "the address of %qD will always evaluate as %<true%>",
3965
                        inner);
3966
            return truthvalue_true_node;
3967
          }
3968
        break;
3969
      }
3970
 
3971
    case COMPLEX_EXPR:
3972
      expr = build_binary_op (EXPR_LOCATION (expr),
3973
                              (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3974
                               ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3975
                c_common_truthvalue_conversion (location,
3976
                                                TREE_OPERAND (expr, 0)),
3977
                c_common_truthvalue_conversion (location,
3978
                                                TREE_OPERAND (expr, 1)),
3979
                              0);
3980
      goto ret;
3981
 
3982
    case NEGATE_EXPR:
3983
    case ABS_EXPR:
3984
    case FLOAT_EXPR:
3985
    case EXCESS_PRECISION_EXPR:
3986
      /* These don't change whether an object is nonzero or zero.  */
3987
      return c_common_truthvalue_conversion (location, TREE_OPERAND (expr, 0));
3988
 
3989
    case LROTATE_EXPR:
3990
    case RROTATE_EXPR:
3991
      /* These don't change whether an object is zero or nonzero, but
3992
         we can't ignore them if their second arg has side-effects.  */
3993
      if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3994
        {
3995
          expr = build2 (COMPOUND_EXPR, truthvalue_type_node,
3996
                         TREE_OPERAND (expr, 1),
3997
                         c_common_truthvalue_conversion
3998
                         (location, TREE_OPERAND (expr, 0)));
3999
          goto ret;
4000
        }
4001
      else
4002
        return c_common_truthvalue_conversion (location,
4003
                                               TREE_OPERAND (expr, 0));
4004
 
4005
    case COND_EXPR:
4006
      /* Distribute the conversion into the arms of a COND_EXPR.  */
4007
      if (c_dialect_cxx ())
4008
        {
4009
          expr = fold_build3_loc (location, COND_EXPR, truthvalue_type_node,
4010
                              TREE_OPERAND (expr, 0),
4011
                              c_common_truthvalue_conversion (location,
4012
                                                              TREE_OPERAND (expr,
4013
                                                                            1)),
4014
                              c_common_truthvalue_conversion (location,
4015
                                                              TREE_OPERAND (expr,
4016
                                                                            2)));
4017
          goto ret;
4018
        }
4019
      else
4020
        {
4021
          /* Folding will happen later for C.  */
4022
          expr = build3 (COND_EXPR, truthvalue_type_node,
4023
                         TREE_OPERAND (expr, 0),
4024
                         c_common_truthvalue_conversion (location,
4025
                                                         TREE_OPERAND (expr, 1)),
4026
                         c_common_truthvalue_conversion (location,
4027
                                                         TREE_OPERAND (expr, 2)));
4028
          goto ret;
4029
        }
4030
 
4031
    CASE_CONVERT:
4032
      /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
4033
         since that affects how `default_conversion' will behave.  */
4034
      if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
4035
          || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
4036
        break;
4037
      /* If this is widening the argument, we can ignore it.  */
4038
      if (TYPE_PRECISION (TREE_TYPE (expr))
4039
          >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
4040
        return c_common_truthvalue_conversion (location,
4041
                                               TREE_OPERAND (expr, 0));
4042
      break;
4043
 
4044
    case MODIFY_EXPR:
4045
      if (!TREE_NO_WARNING (expr)
4046
          && warn_parentheses)
4047
        {
4048
          warning (OPT_Wparentheses,
4049
                   "suggest parentheses around assignment used as truth value");
4050
          TREE_NO_WARNING (expr) = 1;
4051
        }
4052
      break;
4053
 
4054
    default:
4055
      break;
4056
    }
4057
 
4058
  if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
4059
    {
4060
      tree t = c_save_expr (expr);
4061
      expr = (build_binary_op
4062
              (EXPR_LOCATION (expr),
4063
               (TREE_SIDE_EFFECTS (expr)
4064
                ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
4065
        c_common_truthvalue_conversion
4066
               (location,
4067
                build_unary_op (location, REALPART_EXPR, t, 0)),
4068
        c_common_truthvalue_conversion
4069
               (location,
4070
                build_unary_op (location, IMAGPART_EXPR, t, 0)),
4071
               0));
4072
      goto ret;
4073
    }
4074
 
4075
  if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
4076
    {
4077
      tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
4078
                                          FCONST0 (TYPE_MODE
4079
                                                   (TREE_TYPE (expr))));
4080
      return build_binary_op (location, NE_EXPR, expr, fixed_zero_node, 1);
4081
    }
4082
  else
4083
    return build_binary_op (location, NE_EXPR, expr, integer_zero_node, 1);
4084
 
4085
 ret:
4086
  protected_set_expr_location (expr, location);
4087
  return expr;
4088
}
4089
 
4090
static void def_builtin_1  (enum built_in_function fncode,
4091
                            const char *name,
4092
                            enum built_in_class fnclass,
4093
                            tree fntype, tree libtype,
4094
                            bool both_p, bool fallback_p, bool nonansi_p,
4095
                            tree fnattrs, bool implicit_p);
4096
 
4097
 
4098
/* Apply the TYPE_QUALS to the new DECL.  */
4099
 
4100
void
4101
c_apply_type_quals_to_decl (int type_quals, tree decl)
4102
{
4103
  tree type = TREE_TYPE (decl);
4104
 
4105
  if (type == error_mark_node)
4106
    return;
4107
 
4108
  if (((type_quals & TYPE_QUAL_CONST)
4109
       || (type && TREE_CODE (type) == REFERENCE_TYPE))
4110
      /* An object declared 'const' is only readonly after it is
4111
         initialized.  We don't have any way of expressing this currently,
4112
         so we need to be conservative and unset TREE_READONLY for types
4113
         with constructors.  Otherwise aliasing code will ignore stores in
4114
         an inline constructor.  */
4115
      && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
4116
    TREE_READONLY (decl) = 1;
4117
  if (type_quals & TYPE_QUAL_VOLATILE)
4118
    {
4119
      TREE_SIDE_EFFECTS (decl) = 1;
4120
      TREE_THIS_VOLATILE (decl) = 1;
4121
    }
4122
  if (type_quals & TYPE_QUAL_RESTRICT)
4123
    {
4124
      while (type && TREE_CODE (type) == ARRAY_TYPE)
4125
        /* Allow 'restrict' on arrays of pointers.
4126
           FIXME currently we just ignore it.  */
4127
        type = TREE_TYPE (type);
4128
      if (!type
4129
          || !POINTER_TYPE_P (type)
4130
          || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
4131
        error ("invalid use of %<restrict%>");
4132
    }
4133
}
4134
 
4135
/* Hash function for the problem of multiple type definitions in
4136
   different files.  This must hash all types that will compare
4137
   equal via comptypes to the same value.  In practice it hashes
4138
   on some of the simple stuff and leaves the details to comptypes.  */
4139
 
4140
static hashval_t
4141
c_type_hash (const void *p)
4142
{
4143
  int i = 0;
4144
  int shift, size;
4145
  const_tree const t = (const_tree) p;
4146
  tree t2;
4147
  switch (TREE_CODE (t))
4148
    {
4149
    /* For pointers, hash on pointee type plus some swizzling.  */
4150
    case POINTER_TYPE:
4151
      return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
4152
    /* Hash on number of elements and total size.  */
4153
    case ENUMERAL_TYPE:
4154
      shift = 3;
4155
      t2 = TYPE_VALUES (t);
4156
      break;
4157
    case RECORD_TYPE:
4158
      shift = 0;
4159
      t2 = TYPE_FIELDS (t);
4160
      break;
4161
    case QUAL_UNION_TYPE:
4162
      shift = 1;
4163
      t2 = TYPE_FIELDS (t);
4164
      break;
4165
    case UNION_TYPE:
4166
      shift = 2;
4167
      t2 = TYPE_FIELDS (t);
4168
      break;
4169
    default:
4170
      gcc_unreachable ();
4171
    }
4172
  for (; t2; t2 = TREE_CHAIN (t2))
4173
    i++;
4174
  /* We might have a VLA here.  */
4175
  if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST)
4176
    size = 0;
4177
  else
4178
    size = TREE_INT_CST_LOW (TYPE_SIZE (t));
4179
  return ((size << 24) | (i << shift));
4180
}
4181
 
4182
static GTY((param_is (union tree_node))) htab_t type_hash_table;
4183
 
4184
/* Return the typed-based alias set for T, which may be an expression
4185
   or a type.  Return -1 if we don't do anything special.  */
4186
 
4187
alias_set_type
4188
c_common_get_alias_set (tree t)
4189
{
4190
  tree u;
4191
  PTR *slot;
4192
 
4193
  /* For VLAs, use the alias set of the element type rather than the
4194
     default of alias set 0 for types compared structurally.  */
4195
  if (TYPE_P (t) && TYPE_STRUCTURAL_EQUALITY_P (t))
4196
    {
4197
      if (TREE_CODE (t) == ARRAY_TYPE)
4198
        return get_alias_set (TREE_TYPE (t));
4199
      return -1;
4200
    }
4201
 
4202
  /* Permit type-punning when accessing a union, provided the access
4203
     is directly through the union.  For example, this code does not
4204
     permit taking the address of a union member and then storing
4205
     through it.  Even the type-punning allowed here is a GCC
4206
     extension, albeit a common and useful one; the C standard says
4207
     that such accesses have implementation-defined behavior.  */
4208
  for (u = t;
4209
       TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
4210
       u = TREE_OPERAND (u, 0))
4211
    if (TREE_CODE (u) == COMPONENT_REF
4212
        && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
4213
      return 0;
4214
 
4215
  /* That's all the expressions we handle specially.  */
4216
  if (!TYPE_P (t))
4217
    return -1;
4218
 
4219
  /* The C standard guarantees that any object may be accessed via an
4220
     lvalue that has character type.  */
4221
  if (t == char_type_node
4222
      || t == signed_char_type_node
4223
      || t == unsigned_char_type_node)
4224
    return 0;
4225
 
4226
  /* The C standard specifically allows aliasing between signed and
4227
     unsigned variants of the same type.  We treat the signed
4228
     variant as canonical.  */
4229
  if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
4230
    {
4231
      tree t1 = c_common_signed_type (t);
4232
 
4233
      /* t1 == t can happen for boolean nodes which are always unsigned.  */
4234
      if (t1 != t)
4235
        return get_alias_set (t1);
4236
    }
4237
  else if (POINTER_TYPE_P (t))
4238
    {
4239
      tree t1;
4240
 
4241
      /* Unfortunately, there is no canonical form of a pointer type.
4242
         In particular, if we have `typedef int I', then `int *', and
4243
         `I *' are different types.  So, we have to pick a canonical
4244
         representative.  We do this below.
4245
 
4246
         Technically, this approach is actually more conservative that
4247
         it needs to be.  In particular, `const int *' and `int *'
4248
         should be in different alias sets, according to the C and C++
4249
         standard, since their types are not the same, and so,
4250
         technically, an `int **' and `const int **' cannot point at
4251
         the same thing.
4252
 
4253
         But, the standard is wrong.  In particular, this code is
4254
         legal C++:
4255
 
4256
            int *ip;
4257
            int **ipp = &ip;
4258
            const int* const* cipp = ipp;
4259
 
4260
         And, it doesn't make sense for that to be legal unless you
4261
         can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
4262
         the pointed-to types.  This issue has been reported to the
4263
         C++ committee.  */
4264
      t1 = build_type_no_quals (t);
4265
      if (t1 != t)
4266
        return get_alias_set (t1);
4267
    }
4268
 
4269
  /* Handle the case of multiple type nodes referring to "the same" type,
4270
     which occurs with IMA.  These share an alias set.  FIXME:  Currently only
4271
     C90 is handled.  (In C99 type compatibility is not transitive, which
4272
     complicates things mightily. The alias set splay trees can theoretically
4273
     represent this, but insertion is tricky when you consider all the
4274
     different orders things might arrive in.) */
4275
 
4276
  if (c_language != clk_c || flag_isoc99)
4277
    return -1;
4278
 
4279
  /* Save time if there's only one input file.  */
4280
  if (num_in_fnames == 1)
4281
    return -1;
4282
 
4283
  /* Pointers need special handling if they point to any type that
4284
     needs special handling (below).  */
4285
  if (TREE_CODE (t) == POINTER_TYPE)
4286
    {
4287
      tree t2;
4288
      /* Find bottom type under any nested POINTERs.  */
4289
      for (t2 = TREE_TYPE (t);
4290
           TREE_CODE (t2) == POINTER_TYPE;
4291
           t2 = TREE_TYPE (t2))
4292
        ;
4293
      if (TREE_CODE (t2) != RECORD_TYPE
4294
          && TREE_CODE (t2) != ENUMERAL_TYPE
4295
          && TREE_CODE (t2) != QUAL_UNION_TYPE
4296
          && TREE_CODE (t2) != UNION_TYPE)
4297
        return -1;
4298
      if (TYPE_SIZE (t2) == 0)
4299
        return -1;
4300
    }
4301
  /* These are the only cases that need special handling.  */
4302
  if (TREE_CODE (t) != RECORD_TYPE
4303
      && TREE_CODE (t) != ENUMERAL_TYPE
4304
      && TREE_CODE (t) != QUAL_UNION_TYPE
4305
      && TREE_CODE (t) != UNION_TYPE
4306
      && TREE_CODE (t) != POINTER_TYPE)
4307
    return -1;
4308
  /* Undefined? */
4309
  if (TYPE_SIZE (t) == 0)
4310
    return -1;
4311
 
4312
  /* Look up t in hash table.  Only one of the compatible types within each
4313
     alias set is recorded in the table.  */
4314
  if (!type_hash_table)
4315
    type_hash_table = htab_create_ggc (1021, c_type_hash,
4316
            (htab_eq) lang_hooks.types_compatible_p,
4317
            NULL);
4318
  slot = htab_find_slot (type_hash_table, t, INSERT);
4319
  if (*slot != NULL)
4320
    {
4321
      TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
4322
      return TYPE_ALIAS_SET ((tree)*slot);
4323
    }
4324
  else
4325
    /* Our caller will assign and record (in t) a new alias set; all we need
4326
       to do is remember t in the hash table.  */
4327
    *slot = t;
4328
 
4329
  return -1;
4330
}
4331
 
4332
/* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where
4333
   the second parameter indicates which OPERATOR is being applied.
4334
   The COMPLAIN flag controls whether we should diagnose possibly
4335
   ill-formed constructs or not.  LOC is the location of the SIZEOF or
4336
   TYPEOF operator.  */
4337
 
4338
tree
4339
c_sizeof_or_alignof_type (location_t loc,
4340
                          tree type, bool is_sizeof, int complain)
4341
{
4342
  const char *op_name;
4343
  tree value = NULL;
4344
  enum tree_code type_code = TREE_CODE (type);
4345
 
4346
  op_name = is_sizeof ? "sizeof" : "__alignof__";
4347
 
4348
  if (type_code == FUNCTION_TYPE)
4349
    {
4350
      if (is_sizeof)
4351
        {
4352
          if (complain && (pedantic || warn_pointer_arith))
4353
            pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4354
                     "invalid application of %<sizeof%> to a function type");
4355
          else if (!complain)
4356
            return error_mark_node;
4357
          value = size_one_node;
4358
        }
4359
      else
4360
        value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
4361
    }
4362
  else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
4363
    {
4364
      if (type_code == VOID_TYPE
4365
          && complain && (pedantic || warn_pointer_arith))
4366
        pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4367
                 "invalid application of %qs to a void type", op_name);
4368
      else if (!complain)
4369
        return error_mark_node;
4370
      value = size_one_node;
4371
    }
4372
  else if (!COMPLETE_TYPE_P (type))
4373
    {
4374
      if (complain)
4375
        error_at (loc, "invalid application of %qs to incomplete type %qT ",
4376
                  op_name, type);
4377
      value = size_zero_node;
4378
    }
4379
  else
4380
    {
4381
      if (is_sizeof)
4382
        /* Convert in case a char is more than one unit.  */
4383
        value = size_binop_loc (loc, CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
4384
                                size_int (TYPE_PRECISION (char_type_node)
4385
                                          / BITS_PER_UNIT));
4386
      else
4387
        value = size_int (TYPE_ALIGN_UNIT (type));
4388
    }
4389
 
4390
  /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
4391
     TYPE_IS_SIZETYPE means that certain things (like overflow) will
4392
     never happen.  However, this node should really have type
4393
     `size_t', which is just a typedef for an ordinary integer type.  */
4394
  value = fold_convert_loc (loc, size_type_node, value);
4395
  gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
4396
 
4397
  return value;
4398
}
4399
 
4400
/* Implement the __alignof keyword: Return the minimum required
4401
   alignment of EXPR, measured in bytes.  For VAR_DECLs,
4402
   FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
4403
   from an "aligned" __attribute__ specification).  LOC is the
4404
   location of the ALIGNOF operator.  */
4405
 
4406
tree
4407
c_alignof_expr (location_t loc, tree expr)
4408
{
4409
  tree t;
4410
 
4411
  if (VAR_OR_FUNCTION_DECL_P (expr))
4412
    t = size_int (DECL_ALIGN_UNIT (expr));
4413
 
4414
  else if (TREE_CODE (expr) == COMPONENT_REF
4415
           && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
4416
    {
4417
      error_at (loc, "%<__alignof%> applied to a bit-field");
4418
      t = size_one_node;
4419
    }
4420
  else if (TREE_CODE (expr) == COMPONENT_REF
4421
           && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
4422
    t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
4423
 
4424
  else if (TREE_CODE (expr) == INDIRECT_REF)
4425
    {
4426
      tree t = TREE_OPERAND (expr, 0);
4427
      tree best = t;
4428
      int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4429
 
4430
      while (CONVERT_EXPR_P (t)
4431
             && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
4432
        {
4433
          int thisalign;
4434
 
4435
          t = TREE_OPERAND (t, 0);
4436
          thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4437
          if (thisalign > bestalign)
4438
            best = t, bestalign = thisalign;
4439
        }
4440
      return c_alignof (loc, TREE_TYPE (TREE_TYPE (best)));
4441
    }
4442
  else
4443
    return c_alignof (loc, TREE_TYPE (expr));
4444
 
4445
  return fold_convert_loc (loc, size_type_node, t);
4446
}
4447
 
4448
/* Handle C and C++ default attributes.  */
4449
 
4450
enum built_in_attribute
4451
{
4452
#define DEF_ATTR_NULL_TREE(ENUM) ENUM,
4453
#define DEF_ATTR_INT(ENUM, VALUE) ENUM,
4454
#define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
4455
#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
4456
#include "builtin-attrs.def"
4457
#undef DEF_ATTR_NULL_TREE
4458
#undef DEF_ATTR_INT
4459
#undef DEF_ATTR_IDENT
4460
#undef DEF_ATTR_TREE_LIST
4461
  ATTR_LAST
4462
};
4463
 
4464
static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
4465
 
4466
static void c_init_attributes (void);
4467
 
4468
enum c_builtin_type
4469
{
4470
#define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
4471
#define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
4472
#define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
4473
#define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
4474
#define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4475
#define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4476
#define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
4477
#define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
4478
#define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
4479
#define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
4480
#define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
4481
#define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
4482
#define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4483
#define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4484
#define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
4485
  NAME,
4486
#define DEF_POINTER_TYPE(NAME, TYPE) NAME,
4487
#include "builtin-types.def"
4488
#undef DEF_PRIMITIVE_TYPE
4489
#undef DEF_FUNCTION_TYPE_0
4490
#undef DEF_FUNCTION_TYPE_1
4491
#undef DEF_FUNCTION_TYPE_2
4492
#undef DEF_FUNCTION_TYPE_3
4493
#undef DEF_FUNCTION_TYPE_4
4494
#undef DEF_FUNCTION_TYPE_5
4495
#undef DEF_FUNCTION_TYPE_6
4496
#undef DEF_FUNCTION_TYPE_7
4497
#undef DEF_FUNCTION_TYPE_VAR_0
4498
#undef DEF_FUNCTION_TYPE_VAR_1
4499
#undef DEF_FUNCTION_TYPE_VAR_2
4500
#undef DEF_FUNCTION_TYPE_VAR_3
4501
#undef DEF_FUNCTION_TYPE_VAR_4
4502
#undef DEF_FUNCTION_TYPE_VAR_5
4503
#undef DEF_POINTER_TYPE
4504
  BT_LAST
4505
};
4506
 
4507
typedef enum c_builtin_type builtin_type;
4508
 
4509
/* A temporary array for c_common_nodes_and_builtins.  Used in
4510
   communication with def_fn_type.  */
4511
static tree builtin_types[(int) BT_LAST + 1];
4512
 
4513
/* A helper function for c_common_nodes_and_builtins.  Build function type
4514
   for DEF with return type RET and N arguments.  If VAR is true, then the
4515
   function should be variadic after those N arguments.
4516
 
4517
   Takes special care not to ICE if any of the types involved are
4518
   error_mark_node, which indicates that said type is not in fact available
4519
   (see builtin_type_for_size).  In which case the function type as a whole
4520
   should be error_mark_node.  */
4521
 
4522
static void
4523
def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
4524
{
4525
  tree args = NULL, t;
4526
  va_list list;
4527
  int i;
4528
 
4529
  va_start (list, n);
4530
  for (i = 0; i < n; ++i)
4531
    {
4532
      builtin_type a = (builtin_type) va_arg (list, int);
4533
      t = builtin_types[a];
4534
      if (t == error_mark_node)
4535
        goto egress;
4536
      args = tree_cons (NULL_TREE, t, args);
4537
    }
4538
  va_end (list);
4539
 
4540
  args = nreverse (args);
4541
  if (!var)
4542
    args = chainon (args, void_list_node);
4543
 
4544
  t = builtin_types[ret];
4545
  if (t == error_mark_node)
4546
    goto egress;
4547
  t = build_function_type (t, args);
4548
 
4549
 egress:
4550
  builtin_types[def] = t;
4551
}
4552
 
4553
/* Build builtin functions common to both C and C++ language
4554
   frontends.  */
4555
 
4556
static void
4557
c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
4558
{
4559
#define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
4560
  builtin_types[ENUM] = VALUE;
4561
#define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
4562
  def_fn_type (ENUM, RETURN, 0, 0);
4563
#define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
4564
  def_fn_type (ENUM, RETURN, 0, 1, ARG1);
4565
#define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
4566
  def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
4567
#define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4568
  def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
4569
#define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4570
  def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
4571
#define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4572
  def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4573
#define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4574
                            ARG6)                                       \
4575
  def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
4576
#define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4577
                            ARG6, ARG7)                                 \
4578
  def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
4579
#define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
4580
  def_fn_type (ENUM, RETURN, 1, 0);
4581
#define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
4582
  def_fn_type (ENUM, RETURN, 1, 1, ARG1);
4583
#define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
4584
  def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
4585
#define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4586
  def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
4587
#define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4588
  def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
4589
#define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4590
  def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4591
#define DEF_POINTER_TYPE(ENUM, TYPE) \
4592
  builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
4593
 
4594
#include "builtin-types.def"
4595
 
4596
#undef DEF_PRIMITIVE_TYPE
4597
#undef DEF_FUNCTION_TYPE_1
4598
#undef DEF_FUNCTION_TYPE_2
4599
#undef DEF_FUNCTION_TYPE_3
4600
#undef DEF_FUNCTION_TYPE_4
4601
#undef DEF_FUNCTION_TYPE_5
4602
#undef DEF_FUNCTION_TYPE_6
4603
#undef DEF_FUNCTION_TYPE_VAR_0
4604
#undef DEF_FUNCTION_TYPE_VAR_1
4605
#undef DEF_FUNCTION_TYPE_VAR_2
4606
#undef DEF_FUNCTION_TYPE_VAR_3
4607
#undef DEF_FUNCTION_TYPE_VAR_4
4608
#undef DEF_FUNCTION_TYPE_VAR_5
4609
#undef DEF_POINTER_TYPE
4610
  builtin_types[(int) BT_LAST] = NULL_TREE;
4611
 
4612
  c_init_attributes ();
4613
 
4614
#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
4615
                    NONANSI_P, ATTRS, IMPLICIT, COND)                   \
4616
  if (NAME && COND)                                                     \
4617
    def_builtin_1 (ENUM, NAME, CLASS,                                   \
4618
                   builtin_types[(int) TYPE],                           \
4619
                   builtin_types[(int) LIBTYPE],                        \
4620
                   BOTH_P, FALLBACK_P, NONANSI_P,                       \
4621
                   built_in_attributes[(int) ATTRS], IMPLICIT);
4622
#include "builtins.def"
4623
#undef DEF_BUILTIN
4624
 
4625
  targetm.init_builtins ();
4626
 
4627
  build_common_builtin_nodes ();
4628
 
4629
  if (flag_mudflap)
4630
    mudflap_init ();
4631
}
4632
 
4633
/* Like get_identifier, but avoid warnings about null arguments when
4634
   the argument may be NULL for targets where GCC lacks stdint.h type
4635
   information.  */
4636
 
4637
static inline tree
4638
c_get_ident (const char *id)
4639
{
4640
  return get_identifier (id);
4641
}
4642
 
4643
/* Build tree nodes and builtin functions common to both C and C++ language
4644
   frontends.  */
4645
 
4646
void
4647
c_common_nodes_and_builtins (void)
4648
{
4649
  int char16_type_size;
4650
  int char32_type_size;
4651
  int wchar_type_size;
4652
  tree array_domain_type;
4653
  tree va_list_ref_type_node;
4654
  tree va_list_arg_type_node;
4655
 
4656
  /* Define `int' and `char' first so that dbx will output them first.  */
4657
  record_builtin_type (RID_INT, NULL, integer_type_node);
4658
  record_builtin_type (RID_CHAR, "char", char_type_node);
4659
 
4660
  /* `signed' is the same as `int'.  FIXME: the declarations of "signed",
4661
     "unsigned long", "long long unsigned" and "unsigned short" were in C++
4662
     but not C.  Are the conditionals here needed?  */
4663
  if (c_dialect_cxx ())
4664
    record_builtin_type (RID_SIGNED, NULL, integer_type_node);
4665
  record_builtin_type (RID_LONG, "long int", long_integer_type_node);
4666
  record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
4667
  record_builtin_type (RID_MAX, "long unsigned int",
4668
                       long_unsigned_type_node);
4669
  if (c_dialect_cxx ())
4670
    record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
4671
  record_builtin_type (RID_MAX, "long long int",
4672
                       long_long_integer_type_node);
4673
  record_builtin_type (RID_MAX, "long long unsigned int",
4674
                       long_long_unsigned_type_node);
4675
  if (c_dialect_cxx ())
4676
    record_builtin_type (RID_MAX, "long long unsigned",
4677
                         long_long_unsigned_type_node);
4678
  record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
4679
  record_builtin_type (RID_MAX, "short unsigned int",
4680
                       short_unsigned_type_node);
4681
  if (c_dialect_cxx ())
4682
    record_builtin_type (RID_MAX, "unsigned short",
4683
                         short_unsigned_type_node);
4684
 
4685
  /* Define both `signed char' and `unsigned char'.  */
4686
  record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
4687
  record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
4688
 
4689
  /* These are types that c_common_type_for_size and
4690
     c_common_type_for_mode use.  */
4691
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4692
                                         TYPE_DECL, NULL_TREE,
4693
                                         intQI_type_node));
4694
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4695
                                         TYPE_DECL, NULL_TREE,
4696
                                         intHI_type_node));
4697
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4698
                                         TYPE_DECL, NULL_TREE,
4699
                                         intSI_type_node));
4700
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4701
                                         TYPE_DECL, NULL_TREE,
4702
                                         intDI_type_node));
4703
#if HOST_BITS_PER_WIDE_INT >= 64
4704
  if (targetm.scalar_mode_supported_p (TImode))
4705
    lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4706
                                           TYPE_DECL,
4707
                                           get_identifier ("__int128_t"),
4708
                                           intTI_type_node));
4709
#endif
4710
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4711
                                         TYPE_DECL, NULL_TREE,
4712
                                         unsigned_intQI_type_node));
4713
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4714
                                         TYPE_DECL, NULL_TREE,
4715
                                         unsigned_intHI_type_node));
4716
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4717
                                         TYPE_DECL, NULL_TREE,
4718
                                         unsigned_intSI_type_node));
4719
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4720
                                         TYPE_DECL, NULL_TREE,
4721
                                         unsigned_intDI_type_node));
4722
#if HOST_BITS_PER_WIDE_INT >= 64
4723
  if (targetm.scalar_mode_supported_p (TImode))
4724
    lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4725
                                           TYPE_DECL,
4726
                                           get_identifier ("__uint128_t"),
4727
                                           unsigned_intTI_type_node));
4728
#endif
4729
 
4730
  /* Create the widest literal types.  */
4731
  widest_integer_literal_type_node
4732
    = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
4733
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4734
                                         TYPE_DECL, NULL_TREE,
4735
                                         widest_integer_literal_type_node));
4736
 
4737
  widest_unsigned_literal_type_node
4738
    = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
4739
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4740
                                         TYPE_DECL, NULL_TREE,
4741
                                         widest_unsigned_literal_type_node));
4742
 
4743
  /* `unsigned long' is the standard type for sizeof.
4744
     Note that stddef.h uses `unsigned long',
4745
     and this must agree, even if long and int are the same size.  */
4746
  size_type_node =
4747
    TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
4748
  signed_size_type_node = c_common_signed_type (size_type_node);
4749
  set_sizetype (size_type_node);
4750
 
4751
  pid_type_node =
4752
    TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
4753
 
4754
  build_common_tree_nodes_2 (flag_short_double);
4755
 
4756
  record_builtin_type (RID_FLOAT, NULL, float_type_node);
4757
  record_builtin_type (RID_DOUBLE, NULL, double_type_node);
4758
  record_builtin_type (RID_MAX, "long double", long_double_type_node);
4759
 
4760
  /* Only supported decimal floating point extension if the target
4761
     actually supports underlying modes. */
4762
  if (targetm.scalar_mode_supported_p (SDmode)
4763
      && targetm.scalar_mode_supported_p (DDmode)
4764
      && targetm.scalar_mode_supported_p (TDmode))
4765
    {
4766
      record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
4767
      record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
4768
      record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
4769
    }
4770
 
4771
  if (targetm.fixed_point_supported_p ())
4772
    {
4773
      record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
4774
      record_builtin_type (RID_FRACT, NULL, fract_type_node);
4775
      record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
4776
      record_builtin_type (RID_MAX, "long long _Fract",
4777
                           long_long_fract_type_node);
4778
      record_builtin_type (RID_MAX, "unsigned short _Fract",
4779
                           unsigned_short_fract_type_node);
4780
      record_builtin_type (RID_MAX, "unsigned _Fract",
4781
                           unsigned_fract_type_node);
4782
      record_builtin_type (RID_MAX, "unsigned long _Fract",
4783
                           unsigned_long_fract_type_node);
4784
      record_builtin_type (RID_MAX, "unsigned long long _Fract",
4785
                           unsigned_long_long_fract_type_node);
4786
      record_builtin_type (RID_MAX, "_Sat short _Fract",
4787
                           sat_short_fract_type_node);
4788
      record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
4789
      record_builtin_type (RID_MAX, "_Sat long _Fract",
4790
                           sat_long_fract_type_node);
4791
      record_builtin_type (RID_MAX, "_Sat long long _Fract",
4792
                           sat_long_long_fract_type_node);
4793
      record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
4794
                           sat_unsigned_short_fract_type_node);
4795
      record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
4796
                           sat_unsigned_fract_type_node);
4797
      record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
4798
                           sat_unsigned_long_fract_type_node);
4799
      record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
4800
                           sat_unsigned_long_long_fract_type_node);
4801
      record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
4802
      record_builtin_type (RID_ACCUM, NULL, accum_type_node);
4803
      record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
4804
      record_builtin_type (RID_MAX, "long long _Accum",
4805
                           long_long_accum_type_node);
4806
      record_builtin_type (RID_MAX, "unsigned short _Accum",
4807
                           unsigned_short_accum_type_node);
4808
      record_builtin_type (RID_MAX, "unsigned _Accum",
4809
                           unsigned_accum_type_node);
4810
      record_builtin_type (RID_MAX, "unsigned long _Accum",
4811
                           unsigned_long_accum_type_node);
4812
      record_builtin_type (RID_MAX, "unsigned long long _Accum",
4813
                           unsigned_long_long_accum_type_node);
4814
      record_builtin_type (RID_MAX, "_Sat short _Accum",
4815
                           sat_short_accum_type_node);
4816
      record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
4817
      record_builtin_type (RID_MAX, "_Sat long _Accum",
4818
                           sat_long_accum_type_node);
4819
      record_builtin_type (RID_MAX, "_Sat long long _Accum",
4820
                          sat_long_long_accum_type_node);
4821
      record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
4822
                           sat_unsigned_short_accum_type_node);
4823
      record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
4824
                           sat_unsigned_accum_type_node);
4825
      record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
4826
                           sat_unsigned_long_accum_type_node);
4827
      record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
4828
                           sat_unsigned_long_long_accum_type_node);
4829
 
4830
    }
4831
 
4832
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4833
                                         TYPE_DECL,
4834
                                         get_identifier ("complex int"),
4835
                                         complex_integer_type_node));
4836
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4837
                                         TYPE_DECL,
4838
                                         get_identifier ("complex float"),
4839
                                         complex_float_type_node));
4840
  lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4841
                                         TYPE_DECL,
4842
                                         get_identifier ("complex double"),
4843
                                         complex_double_type_node));
4844
  lang_hooks.decls.pushdecl
4845
    (build_decl (UNKNOWN_LOCATION,
4846
                 TYPE_DECL, get_identifier ("complex long double"),
4847
                 complex_long_double_type_node));
4848
 
4849
  if (c_dialect_cxx ())
4850
    /* For C++, make fileptr_type_node a distinct void * type until
4851
       FILE type is defined.  */
4852
    fileptr_type_node = build_variant_type_copy (ptr_type_node);
4853
 
4854
  record_builtin_type (RID_VOID, NULL, void_type_node);
4855
 
4856
  /* Set the TYPE_NAME for any variants that were built before
4857
     record_builtin_type gave names to the built-in types. */
4858
  {
4859
    tree void_name = TYPE_NAME (void_type_node);
4860
    TYPE_NAME (void_type_node) = NULL_TREE;
4861
    TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
4862
      = void_name;
4863
    TYPE_NAME (void_type_node) = void_name;
4864
  }
4865
 
4866
  /* This node must not be shared.  */
4867
  void_zero_node = make_node (INTEGER_CST);
4868
  TREE_TYPE (void_zero_node) = void_type_node;
4869
 
4870
  void_list_node = build_void_list_node ();
4871
 
4872
  /* Make a type to be the domain of a few array types
4873
     whose domains don't really matter.
4874
     200 is small enough that it always fits in size_t
4875
     and large enough that it can hold most function names for the
4876
     initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
4877
  array_domain_type = build_index_type (size_int (200));
4878
 
4879
  /* Make a type for arrays of characters.
4880
     With luck nothing will ever really depend on the length of this
4881
     array type.  */
4882
  char_array_type_node
4883
    = build_array_type (char_type_node, array_domain_type);
4884
 
4885
  /* Likewise for arrays of ints.  */
4886
  int_array_type_node
4887
    = build_array_type (integer_type_node, array_domain_type);
4888
 
4889
  string_type_node = build_pointer_type (char_type_node);
4890
  const_string_type_node
4891
    = build_pointer_type (build_qualified_type
4892
                          (char_type_node, TYPE_QUAL_CONST));
4893
 
4894
  /* This is special for C++ so functions can be overloaded.  */
4895
  wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
4896
  wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
4897
  wchar_type_size = TYPE_PRECISION (wchar_type_node);
4898
  underlying_wchar_type_node = wchar_type_node;
4899
  if (c_dialect_cxx ())
4900
    {
4901
      if (TYPE_UNSIGNED (wchar_type_node))
4902
        wchar_type_node = make_unsigned_type (wchar_type_size);
4903
      else
4904
        wchar_type_node = make_signed_type (wchar_type_size);
4905
      record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
4906
    }
4907
 
4908
  /* This is for wide string constants.  */
4909
  wchar_array_type_node
4910
    = build_array_type (wchar_type_node, array_domain_type);
4911
 
4912
  /* Define 'char16_t'.  */
4913
  char16_type_node = get_identifier (CHAR16_TYPE);
4914
  char16_type_node = TREE_TYPE (identifier_global_value (char16_type_node));
4915
  char16_type_size = TYPE_PRECISION (char16_type_node);
4916
  if (c_dialect_cxx ())
4917
    {
4918
      char16_type_node = make_unsigned_type (char16_type_size);
4919
 
4920
      if (cxx_dialect == cxx0x)
4921
        record_builtin_type (RID_CHAR16, "char16_t", char16_type_node);
4922
    }
4923
 
4924
  /* This is for UTF-16 string constants.  */
4925
  char16_array_type_node
4926
    = build_array_type (char16_type_node, array_domain_type);
4927
 
4928
  /* Define 'char32_t'.  */
4929
  char32_type_node = get_identifier (CHAR32_TYPE);
4930
  char32_type_node = TREE_TYPE (identifier_global_value (char32_type_node));
4931
  char32_type_size = TYPE_PRECISION (char32_type_node);
4932
  if (c_dialect_cxx ())
4933
    {
4934
      char32_type_node = make_unsigned_type (char32_type_size);
4935
 
4936
      if (cxx_dialect == cxx0x)
4937
        record_builtin_type (RID_CHAR32, "char32_t", char32_type_node);
4938
    }
4939
 
4940
  /* This is for UTF-32 string constants.  */
4941
  char32_array_type_node
4942
    = build_array_type (char32_type_node, array_domain_type);
4943
 
4944
  wint_type_node =
4945
    TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
4946
 
4947
  intmax_type_node =
4948
    TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
4949
  uintmax_type_node =
4950
    TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
4951
 
4952
  if (SIG_ATOMIC_TYPE)
4953
    sig_atomic_type_node =
4954
      TREE_TYPE (identifier_global_value (c_get_ident (SIG_ATOMIC_TYPE)));
4955
  if (INT8_TYPE)
4956
    int8_type_node =
4957
      TREE_TYPE (identifier_global_value (c_get_ident (INT8_TYPE)));
4958
  if (INT16_TYPE)
4959
    int16_type_node =
4960
      TREE_TYPE (identifier_global_value (c_get_ident (INT16_TYPE)));
4961
  if (INT32_TYPE)
4962
    int32_type_node =
4963
      TREE_TYPE (identifier_global_value (c_get_ident (INT32_TYPE)));
4964
  if (INT64_TYPE)
4965
    int64_type_node =
4966
      TREE_TYPE (identifier_global_value (c_get_ident (INT64_TYPE)));
4967
  if (UINT8_TYPE)
4968
    uint8_type_node =
4969
      TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
4970
  if (UINT16_TYPE)
4971
    uint16_type_node =
4972
      TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
4973
  if (UINT32_TYPE)
4974
    c_uint32_type_node =
4975
      TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
4976
  if (UINT64_TYPE)
4977
    c_uint64_type_node =
4978
      TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
4979
  if (INT_LEAST8_TYPE)
4980
    int_least8_type_node =
4981
      TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST8_TYPE)));
4982
  if (INT_LEAST16_TYPE)
4983
    int_least16_type_node =
4984
      TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST16_TYPE)));
4985
  if (INT_LEAST32_TYPE)
4986
    int_least32_type_node =
4987
      TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST32_TYPE)));
4988
  if (INT_LEAST64_TYPE)
4989
    int_least64_type_node =
4990
      TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST64_TYPE)));
4991
  if (UINT_LEAST8_TYPE)
4992
    uint_least8_type_node =
4993
      TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST8_TYPE)));
4994
  if (UINT_LEAST16_TYPE)
4995
    uint_least16_type_node =
4996
      TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST16_TYPE)));
4997
  if (UINT_LEAST32_TYPE)
4998
    uint_least32_type_node =
4999
      TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST32_TYPE)));
5000
  if (UINT_LEAST64_TYPE)
5001
    uint_least64_type_node =
5002
      TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST64_TYPE)));
5003
  if (INT_FAST8_TYPE)
5004
    int_fast8_type_node =
5005
      TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST8_TYPE)));
5006
  if (INT_FAST16_TYPE)
5007
    int_fast16_type_node =
5008
      TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST16_TYPE)));
5009
  if (INT_FAST32_TYPE)
5010
    int_fast32_type_node =
5011
      TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST32_TYPE)));
5012
  if (INT_FAST64_TYPE)
5013
    int_fast64_type_node =
5014
      TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST64_TYPE)));
5015
  if (UINT_FAST8_TYPE)
5016
    uint_fast8_type_node =
5017
      TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST8_TYPE)));
5018
  if (UINT_FAST16_TYPE)
5019
    uint_fast16_type_node =
5020
      TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST16_TYPE)));
5021
  if (UINT_FAST32_TYPE)
5022
    uint_fast32_type_node =
5023
      TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST32_TYPE)));
5024
  if (UINT_FAST64_TYPE)
5025
    uint_fast64_type_node =
5026
      TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST64_TYPE)));
5027
  if (INTPTR_TYPE)
5028
    intptr_type_node =
5029
      TREE_TYPE (identifier_global_value (c_get_ident (INTPTR_TYPE)));
5030
  if (UINTPTR_TYPE)
5031
    uintptr_type_node =
5032
      TREE_TYPE (identifier_global_value (c_get_ident (UINTPTR_TYPE)));
5033
 
5034
  default_function_type = build_function_type (integer_type_node, NULL_TREE);
5035
  ptrdiff_type_node
5036
    = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
5037
  unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
5038
 
5039
  lang_hooks.decls.pushdecl
5040
    (build_decl (UNKNOWN_LOCATION,
5041
                 TYPE_DECL, get_identifier ("__builtin_va_list"),
5042
                 va_list_type_node));
5043
#ifdef TARGET_ENUM_VA_LIST
5044
  {
5045
    int l;
5046
    const char *pname;
5047
    tree ptype;
5048
    for (l = 0; TARGET_ENUM_VA_LIST (l, &pname, &ptype); ++l)
5049
      {
5050
        lang_hooks.decls.pushdecl
5051
          (build_decl (UNKNOWN_LOCATION,
5052
                       TYPE_DECL, get_identifier (pname),
5053
                       ptype));
5054
 
5055
      }
5056
  }
5057
#endif
5058
 
5059
  if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
5060
    {
5061
      va_list_arg_type_node = va_list_ref_type_node =
5062
        build_pointer_type (TREE_TYPE (va_list_type_node));
5063
    }
5064
  else
5065
    {
5066
      va_list_arg_type_node = va_list_type_node;
5067
      va_list_ref_type_node = build_reference_type (va_list_type_node);
5068
    }
5069
 
5070
  if (!flag_preprocess_only)
5071
    c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
5072
 
5073
  main_identifier_node = get_identifier ("main");
5074
 
5075
  /* Create the built-in __null node.  It is important that this is
5076
     not shared.  */
5077
  null_node = make_node (INTEGER_CST);
5078
  TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
5079
 
5080
  /* Since builtin_types isn't gc'ed, don't export these nodes.  */
5081
  memset (builtin_types, 0, sizeof (builtin_types));
5082
}
5083
 
5084
/* The number of named compound-literals generated thus far.  */
5085
static GTY(()) int compound_literal_number;
5086
 
5087
/* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal.  */
5088
 
5089
void
5090
set_compound_literal_name (tree decl)
5091
{
5092
  char *name;
5093
  ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
5094
                           compound_literal_number);
5095
  compound_literal_number++;
5096
  DECL_NAME (decl) = get_identifier (name);
5097
}
5098
 
5099
tree
5100
build_va_arg (location_t loc, tree expr, tree type)
5101
{
5102
  expr = build1 (VA_ARG_EXPR, type, expr);
5103
  SET_EXPR_LOCATION (expr, loc);
5104
  return expr;
5105
}
5106
 
5107
 
5108
/* Linked list of disabled built-in functions.  */
5109
 
5110
typedef struct disabled_builtin
5111
{
5112
  const char *name;
5113
  struct disabled_builtin *next;
5114
} disabled_builtin;
5115
static disabled_builtin *disabled_builtins = NULL;
5116
 
5117
static bool builtin_function_disabled_p (const char *);
5118
 
5119
/* Disable a built-in function specified by -fno-builtin-NAME.  If NAME
5120
   begins with "__builtin_", give an error.  */
5121
 
5122
void
5123
disable_builtin_function (const char *name)
5124
{
5125
  if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
5126
    error ("cannot disable built-in function %qs", name);
5127
  else
5128
    {
5129
      disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
5130
      new_disabled_builtin->name = name;
5131
      new_disabled_builtin->next = disabled_builtins;
5132
      disabled_builtins = new_disabled_builtin;
5133
    }
5134
}
5135
 
5136
 
5137
/* Return true if the built-in function NAME has been disabled, false
5138
   otherwise.  */
5139
 
5140
static bool
5141
builtin_function_disabled_p (const char *name)
5142
{
5143
  disabled_builtin *p;
5144
  for (p = disabled_builtins; p != NULL; p = p->next)
5145
    {
5146
      if (strcmp (name, p->name) == 0)
5147
        return true;
5148
    }
5149
  return false;
5150
}
5151
 
5152
 
5153
/* Worker for DEF_BUILTIN.
5154
   Possibly define a builtin function with one or two names.
5155
   Does not declare a non-__builtin_ function if flag_no_builtin, or if
5156
   nonansi_p and flag_no_nonansi_builtin.  */
5157
 
5158
static void
5159
def_builtin_1 (enum built_in_function fncode,
5160
               const char *name,
5161
               enum built_in_class fnclass,
5162
               tree fntype, tree libtype,
5163
               bool both_p, bool fallback_p, bool nonansi_p,
5164
               tree fnattrs, bool implicit_p)
5165
{
5166
  tree decl;
5167
  const char *libname;
5168
 
5169
  if (fntype == error_mark_node)
5170
    return;
5171
 
5172
  gcc_assert ((!both_p && !fallback_p)
5173
              || !strncmp (name, "__builtin_",
5174
                           strlen ("__builtin_")));
5175
 
5176
  libname = name + strlen ("__builtin_");
5177
  decl = add_builtin_function (name, fntype, fncode, fnclass,
5178
                               (fallback_p ? libname : NULL),
5179
                               fnattrs);
5180
  if (both_p
5181
      && !flag_no_builtin && !builtin_function_disabled_p (libname)
5182
      && !(nonansi_p && flag_no_nonansi_builtin))
5183
    add_builtin_function (libname, libtype, fncode, fnclass,
5184
                          NULL, fnattrs);
5185
 
5186
  built_in_decls[(int) fncode] = decl;
5187
  if (implicit_p)
5188
    implicit_built_in_decls[(int) fncode] = decl;
5189
}
5190
 
5191
/* Nonzero if the type T promotes to int.  This is (nearly) the
5192
   integral promotions defined in ISO C99 6.3.1.1/2.  */
5193
 
5194
bool
5195
c_promoting_integer_type_p (const_tree t)
5196
{
5197
  switch (TREE_CODE (t))
5198
    {
5199
    case INTEGER_TYPE:
5200
      return (TYPE_MAIN_VARIANT (t) == char_type_node
5201
              || TYPE_MAIN_VARIANT (t) == signed_char_type_node
5202
              || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
5203
              || TYPE_MAIN_VARIANT (t) == short_integer_type_node
5204
              || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
5205
              || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
5206
 
5207
    case ENUMERAL_TYPE:
5208
      /* ??? Technically all enumerations not larger than an int
5209
         promote to an int.  But this is used along code paths
5210
         that only want to notice a size change.  */
5211
      return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
5212
 
5213
    case BOOLEAN_TYPE:
5214
      return 1;
5215
 
5216
    default:
5217
      return 0;
5218
    }
5219
}
5220
 
5221
/* Return 1 if PARMS specifies a fixed number of parameters
5222
   and none of their types is affected by default promotions.  */
5223
 
5224
int
5225
self_promoting_args_p (const_tree parms)
5226
{
5227
  const_tree t;
5228
  for (t = parms; t; t = TREE_CHAIN (t))
5229
    {
5230
      tree type = TREE_VALUE (t);
5231
 
5232
      if (type == error_mark_node)
5233
        continue;
5234
 
5235
      if (TREE_CHAIN (t) == 0 && type != void_type_node)
5236
        return 0;
5237
 
5238
      if (type == 0)
5239
        return 0;
5240
 
5241
      if (TYPE_MAIN_VARIANT (type) == float_type_node)
5242
        return 0;
5243
 
5244
      if (c_promoting_integer_type_p (type))
5245
        return 0;
5246
    }
5247
  return 1;
5248
}
5249
 
5250
/* Recursively remove any '*' or '&' operator from TYPE.  */
5251
tree
5252
strip_pointer_operator (tree t)
5253
{
5254
  while (POINTER_TYPE_P (t))
5255
    t = TREE_TYPE (t);
5256
  return t;
5257
}
5258
 
5259
/* Recursively remove pointer or array type from TYPE. */
5260
tree
5261
strip_pointer_or_array_types (tree t)
5262
{
5263
  while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
5264
    t = TREE_TYPE (t);
5265
  return t;
5266
}
5267
 
5268
/* Used to compare case labels.  K1 and K2 are actually tree nodes
5269
   representing case labels, or NULL_TREE for a `default' label.
5270
   Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
5271
   K2, and 0 if K1 and K2 are equal.  */
5272
 
5273
int
5274
case_compare (splay_tree_key k1, splay_tree_key k2)
5275
{
5276
  /* Consider a NULL key (such as arises with a `default' label) to be
5277
     smaller than anything else.  */
5278
  if (!k1)
5279
    return k2 ? -1 : 0;
5280
  else if (!k2)
5281
    return k1 ? 1 : 0;
5282
 
5283
  return tree_int_cst_compare ((tree) k1, (tree) k2);
5284
}
5285
 
5286
/* Process a case label, located at LOC, for the range LOW_VALUE
5287
   ... HIGH_VALUE.  If LOW_VALUE and HIGH_VALUE are both NULL_TREE
5288
   then this case label is actually a `default' label.  If only
5289
   HIGH_VALUE is NULL_TREE, then case label was declared using the
5290
   usual C/C++ syntax, rather than the GNU case range extension.
5291
   CASES is a tree containing all the case ranges processed so far;
5292
   COND is the condition for the switch-statement itself.  Returns the
5293
   CASE_LABEL_EXPR created, or ERROR_MARK_NODE if no CASE_LABEL_EXPR
5294
   is created.  */
5295
 
5296
tree
5297
c_add_case_label (location_t loc, splay_tree cases, tree cond, tree orig_type,
5298
                  tree low_value, tree high_value)
5299
{
5300
  tree type;
5301
  tree label;
5302
  tree case_label;
5303
  splay_tree_node node;
5304
 
5305
  /* Create the LABEL_DECL itself.  */
5306
  label = create_artificial_label (loc);
5307
 
5308
  /* If there was an error processing the switch condition, bail now
5309
     before we get more confused.  */
5310
  if (!cond || cond == error_mark_node)
5311
    goto error_out;
5312
 
5313
  if ((low_value && TREE_TYPE (low_value)
5314
       && POINTER_TYPE_P (TREE_TYPE (low_value)))
5315
      || (high_value && TREE_TYPE (high_value)
5316
          && POINTER_TYPE_P (TREE_TYPE (high_value))))
5317
    {
5318
      error_at (loc, "pointers are not permitted as case values");
5319
      goto error_out;
5320
    }
5321
 
5322
  /* Case ranges are a GNU extension.  */
5323
  if (high_value)
5324
    pedwarn (loc, OPT_pedantic,
5325
             "range expressions in switch statements are non-standard");
5326
 
5327
  type = TREE_TYPE (cond);
5328
  if (low_value)
5329
    {
5330
      low_value = check_case_value (low_value);
5331
      low_value = convert_and_check (type, low_value);
5332
      if (low_value == error_mark_node)
5333
        goto error_out;
5334
    }
5335
  if (high_value)
5336
    {
5337
      high_value = check_case_value (high_value);
5338
      high_value = convert_and_check (type, high_value);
5339
      if (high_value == error_mark_node)
5340
        goto error_out;
5341
    }
5342
 
5343
  if (low_value && high_value)
5344
    {
5345
      /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
5346
         really a case range, even though it was written that way.
5347
         Remove the HIGH_VALUE to simplify later processing.  */
5348
      if (tree_int_cst_equal (low_value, high_value))
5349
        high_value = NULL_TREE;
5350
      else if (!tree_int_cst_lt (low_value, high_value))
5351
        warning_at (loc, 0, "empty range specified");
5352
    }
5353
 
5354
  /* See if the case is in range of the type of the original testing
5355
     expression.  If both low_value and high_value are out of range,
5356
     don't insert the case label and return NULL_TREE.  */
5357
  if (low_value
5358
      && !check_case_bounds (type, orig_type,
5359
                             &low_value, high_value ? &high_value : NULL))
5360
    return NULL_TREE;
5361
 
5362
  /* Look up the LOW_VALUE in the table of case labels we already
5363
     have.  */
5364
  node = splay_tree_lookup (cases, (splay_tree_key) low_value);
5365
  /* If there was not an exact match, check for overlapping ranges.
5366
     There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
5367
     that's a `default' label and the only overlap is an exact match.  */
5368
  if (!node && (low_value || high_value))
5369
    {
5370
      splay_tree_node low_bound;
5371
      splay_tree_node high_bound;
5372
 
5373
      /* Even though there wasn't an exact match, there might be an
5374
         overlap between this case range and another case range.
5375
         Since we've (inductively) not allowed any overlapping case
5376
         ranges, we simply need to find the greatest low case label
5377
         that is smaller that LOW_VALUE, and the smallest low case
5378
         label that is greater than LOW_VALUE.  If there is an overlap
5379
         it will occur in one of these two ranges.  */
5380
      low_bound = splay_tree_predecessor (cases,
5381
                                          (splay_tree_key) low_value);
5382
      high_bound = splay_tree_successor (cases,
5383
                                         (splay_tree_key) low_value);
5384
 
5385
      /* Check to see if the LOW_BOUND overlaps.  It is smaller than
5386
         the LOW_VALUE, so there is no need to check unless the
5387
         LOW_BOUND is in fact itself a case range.  */
5388
      if (low_bound
5389
          && CASE_HIGH ((tree) low_bound->value)
5390
          && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
5391
                                    low_value) >= 0)
5392
        node = low_bound;
5393
      /* Check to see if the HIGH_BOUND overlaps.  The low end of that
5394
         range is bigger than the low end of the current range, so we
5395
         are only interested if the current range is a real range, and
5396
         not an ordinary case label.  */
5397
      else if (high_bound
5398
               && high_value
5399
               && (tree_int_cst_compare ((tree) high_bound->key,
5400
                                         high_value)
5401
                   <= 0))
5402
        node = high_bound;
5403
    }
5404
  /* If there was an overlap, issue an error.  */
5405
  if (node)
5406
    {
5407
      tree duplicate = CASE_LABEL ((tree) node->value);
5408
 
5409
      if (high_value)
5410
        {
5411
          error_at (loc, "duplicate (or overlapping) case value");
5412
          error_at (DECL_SOURCE_LOCATION (duplicate),
5413
                    "this is the first entry overlapping that value");
5414
        }
5415
      else if (low_value)
5416
        {
5417
          error_at (loc, "duplicate case value") ;
5418
          error_at (DECL_SOURCE_LOCATION (duplicate), "previously used here");
5419
        }
5420
      else
5421
        {
5422
          error_at (loc, "multiple default labels in one switch");
5423
          error_at (DECL_SOURCE_LOCATION (duplicate),
5424
                    "this is the first default label");
5425
        }
5426
      goto error_out;
5427
    }
5428
 
5429
  /* Add a CASE_LABEL to the statement-tree.  */
5430
  case_label = add_stmt (build_case_label (loc, low_value, high_value, label));
5431
  /* Register this case label in the splay tree.  */
5432
  splay_tree_insert (cases,
5433
                     (splay_tree_key) low_value,
5434
                     (splay_tree_value) case_label);
5435
 
5436
  return case_label;
5437
 
5438
 error_out:
5439
  /* Add a label so that the back-end doesn't think that the beginning of
5440
     the switch is unreachable.  Note that we do not add a case label, as
5441
     that just leads to duplicates and thence to failure later on.  */
5442
  if (!cases->root)
5443
    {
5444
      tree t = create_artificial_label (loc);
5445
      add_stmt (build_stmt (loc, LABEL_EXPR, t));
5446
    }
5447
  return error_mark_node;
5448
}
5449
 
5450
/* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
5451
   Used to verify that case values match up with enumerator values.  */
5452
 
5453
static void
5454
match_case_to_enum_1 (tree key, tree type, tree label)
5455
{
5456
  char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
5457
 
5458
  /* ??? Not working too hard to print the double-word value.
5459
     Should perhaps be done with %lwd in the diagnostic routines?  */
5460
  if (TREE_INT_CST_HIGH (key) == 0)
5461
    snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
5462
              TREE_INT_CST_LOW (key));
5463
  else if (!TYPE_UNSIGNED (type)
5464
           && TREE_INT_CST_HIGH (key) == -1
5465
           && TREE_INT_CST_LOW (key) != 0)
5466
    snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
5467
              -TREE_INT_CST_LOW (key));
5468
  else
5469
    snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
5470
              (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (key),
5471
              (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (key));
5472
 
5473
  if (TYPE_NAME (type) == 0)
5474
    warning_at (DECL_SOURCE_LOCATION (CASE_LABEL (label)),
5475
                warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5476
                "case value %qs not in enumerated type",
5477
                buf);
5478
  else
5479
    warning_at (DECL_SOURCE_LOCATION (CASE_LABEL (label)),
5480
                warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5481
                "case value %qs not in enumerated type %qT",
5482
                buf, type);
5483
}
5484
 
5485
/* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
5486
   Used to verify that case values match up with enumerator values.  */
5487
 
5488
static int
5489
match_case_to_enum (splay_tree_node node, void *data)
5490
{
5491
  tree label = (tree) node->value;
5492
  tree type = (tree) data;
5493
 
5494
  /* Skip default case.  */
5495
  if (!CASE_LOW (label))
5496
    return 0;
5497
 
5498
  /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
5499
     when we did our enum->case scan.  Reset our scratch bit after.  */
5500
  if (!CASE_LOW_SEEN (label))
5501
    match_case_to_enum_1 (CASE_LOW (label), type, label);
5502
  else
5503
    CASE_LOW_SEEN (label) = 0;
5504
 
5505
  /* If CASE_HIGH is non-null, we have a range.  If CASE_HIGH_SEEN is
5506
     not set, that means that CASE_HIGH did not appear when we did our
5507
     enum->case scan.  Reset our scratch bit after.  */
5508
  if (CASE_HIGH (label))
5509
    {
5510
      if (!CASE_HIGH_SEEN (label))
5511
        match_case_to_enum_1 (CASE_HIGH (label), type, label);
5512
      else
5513
        CASE_HIGH_SEEN (label) = 0;
5514
    }
5515
 
5516
  return 0;
5517
}
5518
 
5519
/* Handle -Wswitch*.  Called from the front end after parsing the
5520
   switch construct.  */
5521
/* ??? Should probably be somewhere generic, since other languages
5522
   besides C and C++ would want this.  At the moment, however, C/C++
5523
   are the only tree-ssa languages that support enumerations at all,
5524
   so the point is moot.  */
5525
 
5526
void
5527
c_do_switch_warnings (splay_tree cases, location_t switch_location,
5528
                      tree type, tree cond)
5529
{
5530
  splay_tree_node default_node;
5531
  splay_tree_node node;
5532
  tree chain;
5533
 
5534
  if (!warn_switch && !warn_switch_enum && !warn_switch_default)
5535
    return;
5536
 
5537
  default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
5538
  if (!default_node)
5539
    warning_at (switch_location, OPT_Wswitch_default,
5540
                "switch missing default case");
5541
 
5542
  /* From here on, we only care about about enumerated types.  */
5543
  if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
5544
    return;
5545
 
5546
  /* From here on, we only care about -Wswitch and -Wswitch-enum.  */
5547
  if (!warn_switch_enum && !warn_switch)
5548
    return;
5549
 
5550
  /* Check the cases.  Warn about case values which are not members of
5551
     the enumerated type.  For -Wswitch-enum, or for -Wswitch when
5552
     there is no default case, check that exactly all enumeration
5553
     literals are covered by the cases.  */
5554
 
5555
  /* Clearing COND if it is not an integer constant simplifies
5556
     the tests inside the loop below.  */
5557
  if (TREE_CODE (cond) != INTEGER_CST)
5558
    cond = NULL_TREE;
5559
 
5560
  /* The time complexity here is O(N*lg(N)) worst case, but for the
5561
      common case of monotonically increasing enumerators, it is
5562
      O(N), since the nature of the splay tree will keep the next
5563
      element adjacent to the root at all times.  */
5564
 
5565
  for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
5566
    {
5567
      tree value = TREE_VALUE (chain);
5568
      if (TREE_CODE (value) == CONST_DECL)
5569
        value = DECL_INITIAL (value);
5570
      node = splay_tree_lookup (cases, (splay_tree_key) value);
5571
      if (node)
5572
        {
5573
          /* Mark the CASE_LOW part of the case entry as seen.  */
5574
          tree label = (tree) node->value;
5575
          CASE_LOW_SEEN (label) = 1;
5576
          continue;
5577
        }
5578
 
5579
      /* Even though there wasn't an exact match, there might be a
5580
         case range which includes the enumerator's value.  */
5581
      node = splay_tree_predecessor (cases, (splay_tree_key) value);
5582
      if (node && CASE_HIGH ((tree) node->value))
5583
        {
5584
          tree label = (tree) node->value;
5585
          int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
5586
          if (cmp >= 0)
5587
            {
5588
              /* If we match the upper bound exactly, mark the CASE_HIGH
5589
                 part of the case entry as seen.  */
5590
              if (cmp == 0)
5591
                CASE_HIGH_SEEN (label) = 1;
5592
              continue;
5593
            }
5594
        }
5595
 
5596
      /* We've now determined that this enumerated literal isn't
5597
         handled by the case labels of the switch statement.  */
5598
 
5599
      /* If the switch expression is a constant, we only really care
5600
         about whether that constant is handled by the switch.  */
5601
      if (cond && tree_int_cst_compare (cond, value))
5602
        continue;
5603
 
5604
      /* If there is a default_node, the only relevant option is
5605
         Wswitch-enum.  Otherwise, if both are enabled then we prefer
5606
         to warn using -Wswitch because -Wswitch is enabled by -Wall
5607
         while -Wswitch-enum is explicit.  */
5608
      warning_at (switch_location,
5609
                  (default_node || !warn_switch
5610
                   ? OPT_Wswitch_enum
5611
                   : OPT_Wswitch),
5612
                  "enumeration value %qE not handled in switch",
5613
                  TREE_PURPOSE (chain));
5614
    }
5615
 
5616
  /* Warn if there are case expressions that don't correspond to
5617
     enumerators.  This can occur since C and C++ don't enforce
5618
     type-checking of assignments to enumeration variables.
5619
 
5620
     The time complexity here is now always O(N) worst case, since
5621
     we should have marked both the lower bound and upper bound of
5622
     every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
5623
     above.  This scan also resets those fields.  */
5624
 
5625
  splay_tree_foreach (cases, match_case_to_enum, type);
5626
}
5627
 
5628
/* Finish an expression taking the address of LABEL (an
5629
   IDENTIFIER_NODE).  Returns an expression for the address.
5630
 
5631
   LOC is the location for the expression returned.  */
5632
 
5633
tree
5634
finish_label_address_expr (tree label, location_t loc)
5635
{
5636
  tree result;
5637
 
5638
  pedwarn (input_location, OPT_pedantic, "taking the address of a label is non-standard");
5639
 
5640
  if (label == error_mark_node)
5641
    return error_mark_node;
5642
 
5643
  label = lookup_label (label);
5644
  if (label == NULL_TREE)
5645
    result = null_pointer_node;
5646
  else
5647
    {
5648
      TREE_USED (label) = 1;
5649
      result = build1 (ADDR_EXPR, ptr_type_node, label);
5650
      /* The current function is not necessarily uninlinable.
5651
         Computed gotos are incompatible with inlining, but the value
5652
         here could be used only in a diagnostic, for example.  */
5653
      protected_set_expr_location (result, loc);
5654
    }
5655
 
5656
  return result;
5657
}
5658
 
5659
 
5660
/* Given a boolean expression ARG, return a tree representing an increment
5661
   or decrement (as indicated by CODE) of ARG.  The front end must check for
5662
   invalid cases (e.g., decrement in C++).  */
5663
tree
5664
boolean_increment (enum tree_code code, tree arg)
5665
{
5666
  tree val;
5667
  tree true_res = build_int_cst (TREE_TYPE (arg), 1);
5668
 
5669
  arg = stabilize_reference (arg);
5670
  switch (code)
5671
    {
5672
    case PREINCREMENT_EXPR:
5673
      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5674
      break;
5675
    case POSTINCREMENT_EXPR:
5676
      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5677
      arg = save_expr (arg);
5678
      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5679
      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5680
      break;
5681
    case PREDECREMENT_EXPR:
5682
      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5683
                    invert_truthvalue_loc (input_location, arg));
5684
      break;
5685
    case POSTDECREMENT_EXPR:
5686
      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5687
                    invert_truthvalue_loc (input_location, arg));
5688
      arg = save_expr (arg);
5689
      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5690
      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5691
      break;
5692
    default:
5693
      gcc_unreachable ();
5694
    }
5695
  TREE_SIDE_EFFECTS (val) = 1;
5696
  return val;
5697
}
5698
 
5699
/* Built-in macros for stddef.h and stdint.h, that require macros
5700
   defined in this file.  */
5701
void
5702
c_stddef_cpp_builtins(void)
5703
{
5704
  builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
5705
  builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
5706
  builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
5707
  builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
5708
  builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
5709
  builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
5710
  builtin_define_with_value ("__CHAR16_TYPE__", CHAR16_TYPE, 0);
5711
  builtin_define_with_value ("__CHAR32_TYPE__", CHAR32_TYPE, 0);
5712
  if (SIG_ATOMIC_TYPE)
5713
    builtin_define_with_value ("__SIG_ATOMIC_TYPE__", SIG_ATOMIC_TYPE, 0);
5714
  if (INT8_TYPE)
5715
    builtin_define_with_value ("__INT8_TYPE__", INT8_TYPE, 0);
5716
  if (INT16_TYPE)
5717
    builtin_define_with_value ("__INT16_TYPE__", INT16_TYPE, 0);
5718
  if (INT32_TYPE)
5719
    builtin_define_with_value ("__INT32_TYPE__", INT32_TYPE, 0);
5720
  if (INT64_TYPE)
5721
    builtin_define_with_value ("__INT64_TYPE__", INT64_TYPE, 0);
5722
  if (UINT8_TYPE)
5723
    builtin_define_with_value ("__UINT8_TYPE__", UINT8_TYPE, 0);
5724
  if (UINT16_TYPE)
5725
    builtin_define_with_value ("__UINT16_TYPE__", UINT16_TYPE, 0);
5726
  if (UINT32_TYPE)
5727
    builtin_define_with_value ("__UINT32_TYPE__", UINT32_TYPE, 0);
5728
  if (UINT64_TYPE)
5729
    builtin_define_with_value ("__UINT64_TYPE__", UINT64_TYPE, 0);
5730
  if (INT_LEAST8_TYPE)
5731
    builtin_define_with_value ("__INT_LEAST8_TYPE__", INT_LEAST8_TYPE, 0);
5732
  if (INT_LEAST16_TYPE)
5733
    builtin_define_with_value ("__INT_LEAST16_TYPE__", INT_LEAST16_TYPE, 0);
5734
  if (INT_LEAST32_TYPE)
5735
    builtin_define_with_value ("__INT_LEAST32_TYPE__", INT_LEAST32_TYPE, 0);
5736
  if (INT_LEAST64_TYPE)
5737
    builtin_define_with_value ("__INT_LEAST64_TYPE__", INT_LEAST64_TYPE, 0);
5738
  if (UINT_LEAST8_TYPE)
5739
    builtin_define_with_value ("__UINT_LEAST8_TYPE__", UINT_LEAST8_TYPE, 0);
5740
  if (UINT_LEAST16_TYPE)
5741
    builtin_define_with_value ("__UINT_LEAST16_TYPE__", UINT_LEAST16_TYPE, 0);
5742
  if (UINT_LEAST32_TYPE)
5743
    builtin_define_with_value ("__UINT_LEAST32_TYPE__", UINT_LEAST32_TYPE, 0);
5744
  if (UINT_LEAST64_TYPE)
5745
    builtin_define_with_value ("__UINT_LEAST64_TYPE__", UINT_LEAST64_TYPE, 0);
5746
  if (INT_FAST8_TYPE)
5747
    builtin_define_with_value ("__INT_FAST8_TYPE__", INT_FAST8_TYPE, 0);
5748
  if (INT_FAST16_TYPE)
5749
    builtin_define_with_value ("__INT_FAST16_TYPE__", INT_FAST16_TYPE, 0);
5750
  if (INT_FAST32_TYPE)
5751
    builtin_define_with_value ("__INT_FAST32_TYPE__", INT_FAST32_TYPE, 0);
5752
  if (INT_FAST64_TYPE)
5753
    builtin_define_with_value ("__INT_FAST64_TYPE__", INT_FAST64_TYPE, 0);
5754
  if (UINT_FAST8_TYPE)
5755
    builtin_define_with_value ("__UINT_FAST8_TYPE__", UINT_FAST8_TYPE, 0);
5756
  if (UINT_FAST16_TYPE)
5757
    builtin_define_with_value ("__UINT_FAST16_TYPE__", UINT_FAST16_TYPE, 0);
5758
  if (UINT_FAST32_TYPE)
5759
    builtin_define_with_value ("__UINT_FAST32_TYPE__", UINT_FAST32_TYPE, 0);
5760
  if (UINT_FAST64_TYPE)
5761
    builtin_define_with_value ("__UINT_FAST64_TYPE__", UINT_FAST64_TYPE, 0);
5762
  if (INTPTR_TYPE)
5763
    builtin_define_with_value ("__INTPTR_TYPE__", INTPTR_TYPE, 0);
5764
  if (UINTPTR_TYPE)
5765
    builtin_define_with_value ("__UINTPTR_TYPE__", UINTPTR_TYPE, 0);
5766
}
5767
 
5768
static void
5769
c_init_attributes (void)
5770
{
5771
  /* Fill in the built_in_attributes array.  */
5772
#define DEF_ATTR_NULL_TREE(ENUM)                                \
5773
  built_in_attributes[(int) ENUM] = NULL_TREE;
5774
#define DEF_ATTR_INT(ENUM, VALUE)                               \
5775
  built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
5776
#define DEF_ATTR_IDENT(ENUM, STRING)                            \
5777
  built_in_attributes[(int) ENUM] = get_identifier (STRING);
5778
#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
5779
  built_in_attributes[(int) ENUM]                       \
5780
    = tree_cons (built_in_attributes[(int) PURPOSE],    \
5781
                 built_in_attributes[(int) VALUE],      \
5782
                 built_in_attributes[(int) CHAIN]);
5783
#include "builtin-attrs.def"
5784
#undef DEF_ATTR_NULL_TREE
5785
#undef DEF_ATTR_INT
5786
#undef DEF_ATTR_IDENT
5787
#undef DEF_ATTR_TREE_LIST
5788
}
5789
 
5790
/* Attribute handlers common to C front ends.  */
5791
 
5792
/* Handle a "packed" attribute; arguments as in
5793
   struct attribute_spec.handler.  */
5794
 
5795
static tree
5796
handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5797
                         int flags, bool *no_add_attrs)
5798
{
5799
  if (TYPE_P (*node))
5800
    {
5801
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5802
        *node = build_variant_type_copy (*node);
5803
      TYPE_PACKED (*node) = 1;
5804
    }
5805
  else if (TREE_CODE (*node) == FIELD_DECL)
5806
    {
5807
      if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT
5808
          /* Still pack bitfields.  */
5809
          && ! DECL_INITIAL (*node))
5810
        warning (OPT_Wattributes,
5811
                 "%qE attribute ignored for field of type %qT",
5812
                 name, TREE_TYPE (*node));
5813
      else
5814
        DECL_PACKED (*node) = 1;
5815
    }
5816
  /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
5817
     used for DECL_REGISTER.  It wouldn't mean anything anyway.
5818
     We can't set DECL_PACKED on the type of a TYPE_DECL, because
5819
     that changes what the typedef is typing.  */
5820
  else
5821
    {
5822
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5823
      *no_add_attrs = true;
5824
    }
5825
 
5826
  return NULL_TREE;
5827
}
5828
 
5829
/* Handle a "nocommon" attribute; arguments as in
5830
   struct attribute_spec.handler.  */
5831
 
5832
static tree
5833
handle_nocommon_attribute (tree *node, tree name,
5834
                           tree ARG_UNUSED (args),
5835
                           int ARG_UNUSED (flags), bool *no_add_attrs)
5836
{
5837
  if (TREE_CODE (*node) == VAR_DECL)
5838
    DECL_COMMON (*node) = 0;
5839
  else
5840
    {
5841
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5842
      *no_add_attrs = true;
5843
    }
5844
 
5845
  return NULL_TREE;
5846
}
5847
 
5848
/* Handle a "common" attribute; arguments as in
5849
   struct attribute_spec.handler.  */
5850
 
5851
static tree
5852
handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5853
                         int ARG_UNUSED (flags), bool *no_add_attrs)
5854
{
5855
  if (TREE_CODE (*node) == VAR_DECL)
5856
    DECL_COMMON (*node) = 1;
5857
  else
5858
    {
5859
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5860
      *no_add_attrs = true;
5861
    }
5862
 
5863
  return NULL_TREE;
5864
}
5865
 
5866
/* Handle a "noreturn" attribute; arguments as in
5867
   struct attribute_spec.handler.  */
5868
 
5869
static tree
5870
handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5871
                           int ARG_UNUSED (flags), bool *no_add_attrs)
5872
{
5873
  tree type = TREE_TYPE (*node);
5874
 
5875
  /* See FIXME comment in c_common_attribute_table.  */
5876
  if (TREE_CODE (*node) == FUNCTION_DECL)
5877
    TREE_THIS_VOLATILE (*node) = 1;
5878
  else if (TREE_CODE (type) == POINTER_TYPE
5879
           && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5880
    TREE_TYPE (*node)
5881
      = build_pointer_type
5882
        (build_type_variant (TREE_TYPE (type),
5883
                             TYPE_READONLY (TREE_TYPE (type)), 1));
5884
  else
5885
    {
5886
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5887
      *no_add_attrs = true;
5888
    }
5889
 
5890
  return NULL_TREE;
5891
}
5892
 
5893
/* Handle a "hot" and attribute; arguments as in
5894
   struct attribute_spec.handler.  */
5895
 
5896
static tree
5897
handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5898
                      int ARG_UNUSED (flags), bool *no_add_attrs)
5899
{
5900
  if (TREE_CODE (*node) == FUNCTION_DECL)
5901
    {
5902
      if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
5903
        {
5904
          warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5905
                   name, "cold");
5906
          *no_add_attrs = true;
5907
        }
5908
      /* Most of the rest of the hot processing is done later with
5909
         lookup_attribute.  */
5910
    }
5911
  else
5912
    {
5913
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5914
      *no_add_attrs = true;
5915
    }
5916
 
5917
  return NULL_TREE;
5918
}
5919
/* Handle a "cold" and attribute; arguments as in
5920
   struct attribute_spec.handler.  */
5921
 
5922
static tree
5923
handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5924
                       int ARG_UNUSED (flags), bool *no_add_attrs)
5925
{
5926
  if (TREE_CODE (*node) == FUNCTION_DECL)
5927
    {
5928
      if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
5929
        {
5930
          warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5931
                   name, "hot");
5932
          *no_add_attrs = true;
5933
        }
5934
      /* Most of the rest of the cold processing is done later with
5935
         lookup_attribute.  */
5936
    }
5937
  else
5938
    {
5939
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5940
      *no_add_attrs = true;
5941
    }
5942
 
5943
  return NULL_TREE;
5944
}
5945
 
5946
/* Handle a "noinline" attribute; arguments as in
5947
   struct attribute_spec.handler.  */
5948
 
5949
static tree
5950
handle_noinline_attribute (tree *node, tree name,
5951
                           tree ARG_UNUSED (args),
5952
                           int ARG_UNUSED (flags), bool *no_add_attrs)
5953
{
5954
  if (TREE_CODE (*node) == FUNCTION_DECL)
5955
    DECL_UNINLINABLE (*node) = 1;
5956
  else
5957
    {
5958
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5959
      *no_add_attrs = true;
5960
    }
5961
 
5962
  return NULL_TREE;
5963
}
5964
 
5965
/* Handle a "noclone" attribute; arguments as in
5966
   struct attribute_spec.handler.  */
5967
 
5968
static tree
5969
handle_noclone_attribute (tree *node, tree name,
5970
                          tree ARG_UNUSED (args),
5971
                          int ARG_UNUSED (flags), bool *no_add_attrs)
5972
{
5973
  if (TREE_CODE (*node) != FUNCTION_DECL)
5974
    {
5975
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5976
      *no_add_attrs = true;
5977
    }
5978
 
5979
  return NULL_TREE;
5980
}
5981
 
5982
/* Handle a "always_inline" attribute; arguments as in
5983
   struct attribute_spec.handler.  */
5984
 
5985
static tree
5986
handle_always_inline_attribute (tree *node, tree name,
5987
                                tree ARG_UNUSED (args),
5988
                                int ARG_UNUSED (flags),
5989
                                bool *no_add_attrs)
5990
{
5991
  if (TREE_CODE (*node) == FUNCTION_DECL)
5992
    {
5993
      /* Set the attribute and mark it for disregarding inline
5994
         limits.  */
5995
      DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
5996
    }
5997
  else
5998
    {
5999
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6000
      *no_add_attrs = true;
6001
    }
6002
 
6003
  return NULL_TREE;
6004
}
6005
 
6006
/* Handle a "gnu_inline" attribute; arguments as in
6007
   struct attribute_spec.handler.  */
6008
 
6009
static tree
6010
handle_gnu_inline_attribute (tree *node, tree name,
6011
                             tree ARG_UNUSED (args),
6012
                             int ARG_UNUSED (flags),
6013
                             bool *no_add_attrs)
6014
{
6015
  if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
6016
    {
6017
      /* Do nothing else, just set the attribute.  We'll get at
6018
         it later with lookup_attribute.  */
6019
    }
6020
  else
6021
    {
6022
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6023
      *no_add_attrs = true;
6024
    }
6025
 
6026
  return NULL_TREE;
6027
}
6028
 
6029
/* Handle an "artificial" attribute; arguments as in
6030
   struct attribute_spec.handler.  */
6031
 
6032
static tree
6033
handle_artificial_attribute (tree *node, tree name,
6034
                             tree ARG_UNUSED (args),
6035
                             int ARG_UNUSED (flags),
6036
                             bool *no_add_attrs)
6037
{
6038
  if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
6039
    {
6040
      /* Do nothing else, just set the attribute.  We'll get at
6041
         it later with lookup_attribute.  */
6042
    }
6043
  else
6044
    {
6045
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6046
      *no_add_attrs = true;
6047
    }
6048
 
6049
  return NULL_TREE;
6050
}
6051
 
6052
/* Handle a "flatten" attribute; arguments as in
6053
   struct attribute_spec.handler.  */
6054
 
6055
static tree
6056
handle_flatten_attribute (tree *node, tree name,
6057
                          tree args ATTRIBUTE_UNUSED,
6058
                          int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
6059
{
6060
  if (TREE_CODE (*node) == FUNCTION_DECL)
6061
    /* Do nothing else, just set the attribute.  We'll get at
6062
       it later with lookup_attribute.  */
6063
    ;
6064
  else
6065
    {
6066
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6067
      *no_add_attrs = true;
6068
    }
6069
 
6070
  return NULL_TREE;
6071
}
6072
 
6073
/* Handle a "warning" or "error" attribute; arguments as in
6074
   struct attribute_spec.handler.  */
6075
 
6076
static tree
6077
handle_error_attribute (tree *node, tree name, tree args,
6078
                        int ARG_UNUSED (flags), bool *no_add_attrs)
6079
{
6080
  if (TREE_CODE (*node) == FUNCTION_DECL
6081
      || TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6082
    /* Do nothing else, just set the attribute.  We'll get at
6083
       it later with lookup_attribute.  */
6084
    ;
6085
  else
6086
    {
6087
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6088
      *no_add_attrs = true;
6089
    }
6090
 
6091
  return NULL_TREE;
6092
}
6093
 
6094
/* Handle a "used" attribute; arguments as in
6095
   struct attribute_spec.handler.  */
6096
 
6097
static tree
6098
handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
6099
                       int ARG_UNUSED (flags), bool *no_add_attrs)
6100
{
6101
  tree node = *pnode;
6102
 
6103
  if (TREE_CODE (node) == FUNCTION_DECL
6104
      || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
6105
    {
6106
      TREE_USED (node) = 1;
6107
      DECL_PRESERVE_P (node) = 1;
6108
    }
6109
  else
6110
    {
6111
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6112
      *no_add_attrs = true;
6113
    }
6114
 
6115
  return NULL_TREE;
6116
}
6117
 
6118
/* Handle a "unused" attribute; arguments as in
6119
   struct attribute_spec.handler.  */
6120
 
6121
static tree
6122
handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6123
                         int flags, bool *no_add_attrs)
6124
{
6125
  if (DECL_P (*node))
6126
    {
6127
      tree decl = *node;
6128
 
6129
      if (TREE_CODE (decl) == PARM_DECL
6130
          || TREE_CODE (decl) == VAR_DECL
6131
          || TREE_CODE (decl) == FUNCTION_DECL
6132
          || TREE_CODE (decl) == LABEL_DECL
6133
          || TREE_CODE (decl) == TYPE_DECL)
6134
        TREE_USED (decl) = 1;
6135
      else
6136
        {
6137
          warning (OPT_Wattributes, "%qE attribute ignored", name);
6138
          *no_add_attrs = true;
6139
        }
6140
    }
6141
  else
6142
    {
6143
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6144
        *node = build_variant_type_copy (*node);
6145
      TREE_USED (*node) = 1;
6146
    }
6147
 
6148
  return NULL_TREE;
6149
}
6150
 
6151
/* Handle a "externally_visible" attribute; arguments as in
6152
   struct attribute_spec.handler.  */
6153
 
6154
static tree
6155
handle_externally_visible_attribute (tree *pnode, tree name,
6156
                                     tree ARG_UNUSED (args),
6157
                                     int ARG_UNUSED (flags),
6158
                                     bool *no_add_attrs)
6159
{
6160
  tree node = *pnode;
6161
 
6162
  if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
6163
    {
6164
      if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
6165
           && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
6166
        {
6167
          warning (OPT_Wattributes,
6168
                   "%qE attribute have effect only on public objects", name);
6169
          *no_add_attrs = true;
6170
        }
6171
    }
6172
  else
6173
    {
6174
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6175
      *no_add_attrs = true;
6176
    }
6177
 
6178
  return NULL_TREE;
6179
}
6180
 
6181
/* Handle a "const" attribute; arguments as in
6182
   struct attribute_spec.handler.  */
6183
 
6184
static tree
6185
handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6186
                        int ARG_UNUSED (flags), bool *no_add_attrs)
6187
{
6188
  tree type = TREE_TYPE (*node);
6189
 
6190
  /* See FIXME comment on noreturn in c_common_attribute_table.  */
6191
  if (TREE_CODE (*node) == FUNCTION_DECL)
6192
    TREE_READONLY (*node) = 1;
6193
  else if (TREE_CODE (type) == POINTER_TYPE
6194
           && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
6195
    TREE_TYPE (*node)
6196
      = build_pointer_type
6197
        (build_type_variant (TREE_TYPE (type), 1,
6198
                             TREE_THIS_VOLATILE (TREE_TYPE (type))));
6199
  else
6200
    {
6201
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6202
      *no_add_attrs = true;
6203
    }
6204
 
6205
  return NULL_TREE;
6206
}
6207
 
6208
/* Handle a "transparent_union" attribute; arguments as in
6209
   struct attribute_spec.handler.  */
6210
 
6211
static tree
6212
handle_transparent_union_attribute (tree *node, tree name,
6213
                                    tree ARG_UNUSED (args), int flags,
6214
                                    bool *no_add_attrs)
6215
{
6216
  tree type;
6217
 
6218
  *no_add_attrs = true;
6219
 
6220
  if (TREE_CODE (*node) == TYPE_DECL)
6221
    node = &TREE_TYPE (*node);
6222
  type = *node;
6223
 
6224
  if (TREE_CODE (type) == UNION_TYPE)
6225
    {
6226
      /* When IN_PLACE is set, leave the check for FIELDS and MODE to
6227
         the code in finish_struct.  */
6228
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6229
        {
6230
          if (TYPE_FIELDS (type) == NULL_TREE
6231
              || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
6232
            goto ignored;
6233
 
6234
          /* A type variant isn't good enough, since we don't a cast
6235
             to such a type removed as a no-op.  */
6236
          *node = type = build_duplicate_type (type);
6237
        }
6238
 
6239
      TYPE_TRANSPARENT_AGGR (type) = 1;
6240
      return NULL_TREE;
6241
    }
6242
 
6243
 ignored:
6244
  warning (OPT_Wattributes, "%qE attribute ignored", name);
6245
  return NULL_TREE;
6246
}
6247
 
6248
/* Subroutine of handle_{con,de}structor_attribute.  Evaluate ARGS to
6249
   get the requested priority for a constructor or destructor,
6250
   possibly issuing diagnostics for invalid or reserved
6251
   priorities.  */
6252
 
6253
static priority_type
6254
get_priority (tree args, bool is_destructor)
6255
{
6256
  HOST_WIDE_INT pri;
6257
  tree arg;
6258
 
6259
  if (!args)
6260
    return DEFAULT_INIT_PRIORITY;
6261
 
6262
  if (!SUPPORTS_INIT_PRIORITY)
6263
    {
6264
      if (is_destructor)
6265
        error ("destructor priorities are not supported");
6266
      else
6267
        error ("constructor priorities are not supported");
6268
      return DEFAULT_INIT_PRIORITY;
6269
    }
6270
 
6271
  arg = TREE_VALUE (args);
6272
  if (!host_integerp (arg, /*pos=*/0)
6273
      || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
6274
    goto invalid;
6275
 
6276
  pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
6277
  if (pri < 0 || pri > MAX_INIT_PRIORITY)
6278
    goto invalid;
6279
 
6280
  if (pri <= MAX_RESERVED_INIT_PRIORITY)
6281
    {
6282
      if (is_destructor)
6283
        warning (0,
6284
                 "destructor priorities from 0 to %d are reserved "
6285
                 "for the implementation",
6286
                 MAX_RESERVED_INIT_PRIORITY);
6287
      else
6288
        warning (0,
6289
                 "constructor priorities from 0 to %d are reserved "
6290
                 "for the implementation",
6291
                 MAX_RESERVED_INIT_PRIORITY);
6292
    }
6293
  return pri;
6294
 
6295
 invalid:
6296
  if (is_destructor)
6297
    error ("destructor priorities must be integers from 0 to %d inclusive",
6298
           MAX_INIT_PRIORITY);
6299
  else
6300
    error ("constructor priorities must be integers from 0 to %d inclusive",
6301
           MAX_INIT_PRIORITY);
6302
  return DEFAULT_INIT_PRIORITY;
6303
}
6304
 
6305
/* Handle a "constructor" attribute; arguments as in
6306
   struct attribute_spec.handler.  */
6307
 
6308
static tree
6309
handle_constructor_attribute (tree *node, tree name, tree args,
6310
                              int ARG_UNUSED (flags),
6311
                              bool *no_add_attrs)
6312
{
6313
  tree decl = *node;
6314
  tree type = TREE_TYPE (decl);
6315
 
6316
  if (TREE_CODE (decl) == FUNCTION_DECL
6317
      && TREE_CODE (type) == FUNCTION_TYPE
6318
      && decl_function_context (decl) == 0)
6319
    {
6320
      priority_type priority;
6321
      DECL_STATIC_CONSTRUCTOR (decl) = 1;
6322
      priority = get_priority (args, /*is_destructor=*/false);
6323
      SET_DECL_INIT_PRIORITY (decl, priority);
6324
      TREE_USED (decl) = 1;
6325
    }
6326
  else
6327
    {
6328
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6329
      *no_add_attrs = true;
6330
    }
6331
 
6332
  return NULL_TREE;
6333
}
6334
 
6335
/* Handle a "destructor" attribute; arguments as in
6336
   struct attribute_spec.handler.  */
6337
 
6338
static tree
6339
handle_destructor_attribute (tree *node, tree name, tree args,
6340
                             int ARG_UNUSED (flags),
6341
                             bool *no_add_attrs)
6342
{
6343
  tree decl = *node;
6344
  tree type = TREE_TYPE (decl);
6345
 
6346
  if (TREE_CODE (decl) == FUNCTION_DECL
6347
      && TREE_CODE (type) == FUNCTION_TYPE
6348
      && decl_function_context (decl) == 0)
6349
    {
6350
      priority_type priority;
6351
      DECL_STATIC_DESTRUCTOR (decl) = 1;
6352
      priority = get_priority (args, /*is_destructor=*/true);
6353
      SET_DECL_FINI_PRIORITY (decl, priority);
6354
      TREE_USED (decl) = 1;
6355
    }
6356
  else
6357
    {
6358
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6359
      *no_add_attrs = true;
6360
    }
6361
 
6362
  return NULL_TREE;
6363
}
6364
 
6365
/* Handle a "mode" attribute; arguments as in
6366
   struct attribute_spec.handler.  */
6367
 
6368
static tree
6369
handle_mode_attribute (tree *node, tree name, tree args,
6370
                       int ARG_UNUSED (flags), bool *no_add_attrs)
6371
{
6372
  tree type = *node;
6373
  tree ident = TREE_VALUE (args);
6374
 
6375
  *no_add_attrs = true;
6376
 
6377
  if (TREE_CODE (ident) != IDENTIFIER_NODE)
6378
    warning (OPT_Wattributes, "%qE attribute ignored", name);
6379
  else
6380
    {
6381
      int j;
6382
      const char *p = IDENTIFIER_POINTER (ident);
6383
      int len = strlen (p);
6384
      enum machine_mode mode = VOIDmode;
6385
      tree typefm;
6386
      bool valid_mode;
6387
 
6388
      if (len > 4 && p[0] == '_' && p[1] == '_'
6389
          && p[len - 1] == '_' && p[len - 2] == '_')
6390
        {
6391
          char *newp = (char *) alloca (len - 1);
6392
 
6393
          strcpy (newp, &p[2]);
6394
          newp[len - 4] = '\0';
6395
          p = newp;
6396
        }
6397
 
6398
      /* Change this type to have a type with the specified mode.
6399
         First check for the special modes.  */
6400
      if (!strcmp (p, "byte"))
6401
        mode = byte_mode;
6402
      else if (!strcmp (p, "word"))
6403
        mode = word_mode;
6404
      else if (!strcmp (p, "pointer"))
6405
        mode = ptr_mode;
6406
      else if (!strcmp (p, "libgcc_cmp_return"))
6407
        mode = targetm.libgcc_cmp_return_mode ();
6408
      else if (!strcmp (p, "libgcc_shift_count"))
6409
        mode = targetm.libgcc_shift_count_mode ();
6410
      else if (!strcmp (p, "unwind_word"))
6411
        mode = targetm.unwind_word_mode ();
6412
      else
6413
        for (j = 0; j < NUM_MACHINE_MODES; j++)
6414
          if (!strcmp (p, GET_MODE_NAME (j)))
6415
            {
6416
              mode = (enum machine_mode) j;
6417
              break;
6418
            }
6419
 
6420
      if (mode == VOIDmode)
6421
        {
6422
          error ("unknown machine mode %qE", ident);
6423
          return NULL_TREE;
6424
        }
6425
 
6426
      valid_mode = false;
6427
      switch (GET_MODE_CLASS (mode))
6428
        {
6429
        case MODE_INT:
6430
        case MODE_PARTIAL_INT:
6431
        case MODE_FLOAT:
6432
        case MODE_DECIMAL_FLOAT:
6433
        case MODE_FRACT:
6434
        case MODE_UFRACT:
6435
        case MODE_ACCUM:
6436
        case MODE_UACCUM:
6437
          valid_mode = targetm.scalar_mode_supported_p (mode);
6438
          break;
6439
 
6440
        case MODE_COMPLEX_INT:
6441
        case MODE_COMPLEX_FLOAT:
6442
          valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
6443
          break;
6444
 
6445
        case MODE_VECTOR_INT:
6446
        case MODE_VECTOR_FLOAT:
6447
        case MODE_VECTOR_FRACT:
6448
        case MODE_VECTOR_UFRACT:
6449
        case MODE_VECTOR_ACCUM:
6450
        case MODE_VECTOR_UACCUM:
6451
          warning (OPT_Wattributes, "specifying vector types with "
6452
                   "__attribute__ ((mode)) is deprecated");
6453
          warning (OPT_Wattributes,
6454
                   "use __attribute__ ((vector_size)) instead");
6455
          valid_mode = vector_mode_valid_p (mode);
6456
          break;
6457
 
6458
        default:
6459
          break;
6460
        }
6461
      if (!valid_mode)
6462
        {
6463
          error ("unable to emulate %qs", p);
6464
          return NULL_TREE;
6465
        }
6466
 
6467
      if (POINTER_TYPE_P (type))
6468
        {
6469
          addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
6470
          tree (*fn)(tree, enum machine_mode, bool);
6471
 
6472
          if (!targetm.addr_space.valid_pointer_mode (mode, as))
6473
            {
6474
              error ("invalid pointer mode %qs", p);
6475
              return NULL_TREE;
6476
            }
6477
 
6478
          if (TREE_CODE (type) == POINTER_TYPE)
6479
            fn = build_pointer_type_for_mode;
6480
          else
6481
            fn = build_reference_type_for_mode;
6482
          typefm = fn (TREE_TYPE (type), mode, false);
6483
        }
6484
      else
6485
        {
6486
          /* For fixed-point modes, we need to test if the signness of type
6487
             and the machine mode are consistent.  */
6488
          if (ALL_FIXED_POINT_MODE_P (mode)
6489
              && TYPE_UNSIGNED (type) != UNSIGNED_FIXED_POINT_MODE_P (mode))
6490
            {
6491
              error ("signness of type and machine mode %qs don't match", p);
6492
              return NULL_TREE;
6493
            }
6494
          /* For fixed-point modes, we need to pass saturating info.  */
6495
          typefm = lang_hooks.types.type_for_mode (mode,
6496
                        ALL_FIXED_POINT_MODE_P (mode) ? TYPE_SATURATING (type)
6497
                                                      : TYPE_UNSIGNED (type));
6498
        }
6499
 
6500
      if (typefm == NULL_TREE)
6501
        {
6502
          error ("no data type for mode %qs", p);
6503
          return NULL_TREE;
6504
        }
6505
      else if (TREE_CODE (type) == ENUMERAL_TYPE)
6506
        {
6507
          /* For enumeral types, copy the precision from the integer
6508
             type returned above.  If not an INTEGER_TYPE, we can't use
6509
             this mode for this type.  */
6510
          if (TREE_CODE (typefm) != INTEGER_TYPE)
6511
            {
6512
              error ("cannot use mode %qs for enumeral types", p);
6513
              return NULL_TREE;
6514
            }
6515
 
6516
          if (flags & ATTR_FLAG_TYPE_IN_PLACE)
6517
            {
6518
              TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
6519
              typefm = type;
6520
            }
6521
          else
6522
            {
6523
              /* We cannot build a type variant, as there's code that assumes
6524
                 that TYPE_MAIN_VARIANT has the same mode.  This includes the
6525
                 debug generators.  Instead, create a subrange type.  This
6526
                 results in all of the enumeral values being emitted only once
6527
                 in the original, and the subtype gets them by reference.  */
6528
              if (TYPE_UNSIGNED (type))
6529
                typefm = make_unsigned_type (TYPE_PRECISION (typefm));
6530
              else
6531
                typefm = make_signed_type (TYPE_PRECISION (typefm));
6532
              TREE_TYPE (typefm) = type;
6533
            }
6534
        }
6535
      else if (VECTOR_MODE_P (mode)
6536
               ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
6537
               : TREE_CODE (type) != TREE_CODE (typefm))
6538
        {
6539
          error ("mode %qs applied to inappropriate type", p);
6540
          return NULL_TREE;
6541
        }
6542
 
6543
      *node = typefm;
6544
    }
6545
 
6546
  return NULL_TREE;
6547
}
6548
 
6549
/* Handle a "section" attribute; arguments as in
6550
   struct attribute_spec.handler.  */
6551
 
6552
static tree
6553
handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6554
                          int ARG_UNUSED (flags), bool *no_add_attrs)
6555
{
6556
  tree decl = *node;
6557
 
6558
  if (targetm.have_named_sections)
6559
    {
6560
      user_defined_section_attribute = true;
6561
 
6562
      if ((TREE_CODE (decl) == FUNCTION_DECL
6563
           || TREE_CODE (decl) == VAR_DECL)
6564
          && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6565
        {
6566
          if (TREE_CODE (decl) == VAR_DECL
6567
              && current_function_decl != NULL_TREE
6568
              && !TREE_STATIC (decl))
6569
            {
6570
              error_at (DECL_SOURCE_LOCATION (decl),
6571
                        "section attribute cannot be specified for "
6572
                        "local variables");
6573
              *no_add_attrs = true;
6574
            }
6575
 
6576
          /* The decl may have already been given a section attribute
6577
             from a previous declaration.  Ensure they match.  */
6578
          else if (DECL_SECTION_NAME (decl) != NULL_TREE
6579
                   && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
6580
                              TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
6581
            {
6582
              error ("section of %q+D conflicts with previous declaration",
6583
                     *node);
6584
              *no_add_attrs = true;
6585
            }
6586
          else if (TREE_CODE (decl) == VAR_DECL
6587
                   && !targetm.have_tls && targetm.emutls.tmpl_section
6588
                   && DECL_THREAD_LOCAL_P (decl))
6589
            {
6590
              error ("section of %q+D cannot be overridden", *node);
6591
              *no_add_attrs = true;
6592
            }
6593
          else
6594
            DECL_SECTION_NAME (decl) = TREE_VALUE (args);
6595
        }
6596
      else
6597
        {
6598
          error ("section attribute not allowed for %q+D", *node);
6599
          *no_add_attrs = true;
6600
        }
6601
    }
6602
  else
6603
    {
6604
      error_at (DECL_SOURCE_LOCATION (*node),
6605
                "section attributes are not supported for this target");
6606
      *no_add_attrs = true;
6607
    }
6608
 
6609
  return NULL_TREE;
6610
}
6611
 
6612
/* Handle a "aligned" attribute; arguments as in
6613
   struct attribute_spec.handler.  */
6614
 
6615
static tree
6616
handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6617
                          int flags, bool *no_add_attrs)
6618
{
6619
  tree decl = NULL_TREE;
6620
  tree *type = NULL;
6621
  int is_type = 0;
6622
  tree align_expr = (args ? TREE_VALUE (args)
6623
                     : size_int (ATTRIBUTE_ALIGNED_VALUE / BITS_PER_UNIT));
6624
  int i;
6625
 
6626
  if (DECL_P (*node))
6627
    {
6628
      decl = *node;
6629
      type = &TREE_TYPE (decl);
6630
      is_type = TREE_CODE (*node) == TYPE_DECL;
6631
    }
6632
  else if (TYPE_P (*node))
6633
    type = node, is_type = 1;
6634
 
6635
  if (TREE_CODE (align_expr) != INTEGER_CST)
6636
    {
6637
      error ("requested alignment is not a constant");
6638
      *no_add_attrs = true;
6639
    }
6640
  else if ((i = tree_log2 (align_expr)) == -1)
6641
    {
6642
      error ("requested alignment is not a power of 2");
6643
      *no_add_attrs = true;
6644
    }
6645
  else if (i >= HOST_BITS_PER_INT - BITS_PER_UNIT_LOG)
6646
    {
6647
      error ("requested alignment is too large");
6648
      *no_add_attrs = true;
6649
    }
6650
  else if (is_type)
6651
    {
6652
      if ((flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6653
        /* OK, modify the type in place.  */;
6654
      /* If we have a TYPE_DECL, then copy the type, so that we
6655
         don't accidentally modify a builtin type.  See pushdecl.  */
6656
      else if (decl && TREE_TYPE (decl) != error_mark_node
6657
               && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
6658
        {
6659
          tree tt = TREE_TYPE (decl);
6660
          *type = build_variant_type_copy (*type);
6661
          DECL_ORIGINAL_TYPE (decl) = tt;
6662
          TYPE_NAME (*type) = decl;
6663
          TREE_USED (*type) = TREE_USED (decl);
6664
          TREE_TYPE (decl) = *type;
6665
        }
6666
      else
6667
        *type = build_variant_type_copy (*type);
6668
 
6669
      TYPE_ALIGN (*type) = (1U << i) * BITS_PER_UNIT;
6670
      TYPE_USER_ALIGN (*type) = 1;
6671
    }
6672
  else if (! VAR_OR_FUNCTION_DECL_P (decl)
6673
           && TREE_CODE (decl) != FIELD_DECL)
6674
    {
6675
      error ("alignment may not be specified for %q+D", decl);
6676
      *no_add_attrs = true;
6677
    }
6678
  else if (TREE_CODE (decl) == FUNCTION_DECL
6679
           && DECL_ALIGN (decl) > (1U << i) * BITS_PER_UNIT)
6680
    {
6681
      if (DECL_USER_ALIGN (decl))
6682
        error ("alignment for %q+D was previously specified as %d "
6683
               "and may not be decreased", decl,
6684
               DECL_ALIGN (decl) / BITS_PER_UNIT);
6685
      else
6686
        error ("alignment for %q+D must be at least %d", decl,
6687
               DECL_ALIGN (decl) / BITS_PER_UNIT);
6688
      *no_add_attrs = true;
6689
    }
6690
  else
6691
    {
6692
      DECL_ALIGN (decl) = (1U << i) * BITS_PER_UNIT;
6693
      DECL_USER_ALIGN (decl) = 1;
6694
    }
6695
 
6696
  return NULL_TREE;
6697
}
6698
 
6699
/* Handle a "weak" attribute; arguments as in
6700
   struct attribute_spec.handler.  */
6701
 
6702
static tree
6703
handle_weak_attribute (tree *node, tree name,
6704
                       tree ARG_UNUSED (args),
6705
                       int ARG_UNUSED (flags),
6706
                       bool * ARG_UNUSED (no_add_attrs))
6707
{
6708
  if (TREE_CODE (*node) == FUNCTION_DECL
6709
      && DECL_DECLARED_INLINE_P (*node))
6710
    {
6711
      error ("inline function %q+D cannot be declared weak", *node);
6712
      *no_add_attrs = true;
6713
    }
6714
  else if (TREE_CODE (*node) == FUNCTION_DECL
6715
           || TREE_CODE (*node) == VAR_DECL)
6716
    declare_weak (*node);
6717
  else
6718
    warning (OPT_Wattributes, "%qE attribute ignored", name);
6719
 
6720
  return NULL_TREE;
6721
}
6722
 
6723
/* Handle an "alias" attribute; arguments as in
6724
   struct attribute_spec.handler.  */
6725
 
6726
static tree
6727
handle_alias_attribute (tree *node, tree name, tree args,
6728
                        int ARG_UNUSED (flags), bool *no_add_attrs)
6729
{
6730
  tree decl = *node;
6731
 
6732
  if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
6733
    {
6734
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6735
      *no_add_attrs = true;
6736
    }
6737
  else if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
6738
      || (TREE_CODE (decl) != FUNCTION_DECL
6739
          && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
6740
      /* A static variable declaration is always a tentative definition,
6741
         but the alias is a non-tentative definition which overrides.  */
6742
      || (TREE_CODE (decl) != FUNCTION_DECL
6743
          && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
6744
    {
6745
      error ("%q+D defined both normally and as an alias", decl);
6746
      *no_add_attrs = true;
6747
    }
6748
 
6749
  /* Note that the very first time we process a nested declaration,
6750
     decl_function_context will not be set.  Indeed, *would* never
6751
     be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
6752
     we do below.  After such frobbery, pushdecl would set the context.
6753
     In any case, this is never what we want.  */
6754
  else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
6755
    {
6756
      tree id;
6757
 
6758
      id = TREE_VALUE (args);
6759
      if (TREE_CODE (id) != STRING_CST)
6760
        {
6761
          error ("alias argument not a string");
6762
          *no_add_attrs = true;
6763
          return NULL_TREE;
6764
        }
6765
      id = get_identifier (TREE_STRING_POINTER (id));
6766
      /* This counts as a use of the object pointed to.  */
6767
      TREE_USED (id) = 1;
6768
 
6769
      if (TREE_CODE (decl) == FUNCTION_DECL)
6770
        DECL_INITIAL (decl) = error_mark_node;
6771
      else
6772
        {
6773
          if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
6774
            DECL_EXTERNAL (decl) = 1;
6775
          else
6776
            DECL_EXTERNAL (decl) = 0;
6777
          TREE_STATIC (decl) = 1;
6778
        }
6779
    }
6780
  else
6781
    {
6782
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6783
      *no_add_attrs = true;
6784
    }
6785
 
6786
  return NULL_TREE;
6787
}
6788
 
6789
/* Handle a "weakref" attribute; arguments as in struct
6790
   attribute_spec.handler.  */
6791
 
6792
static tree
6793
handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6794
                          int flags, bool *no_add_attrs)
6795
{
6796
  tree attr = NULL_TREE;
6797
 
6798
  /* We must ignore the attribute when it is associated with
6799
     local-scoped decls, since attribute alias is ignored and many
6800
     such symbols do not even have a DECL_WEAK field.  */
6801
  if (decl_function_context (*node)
6802
      || current_function_decl
6803
      || (TREE_CODE (*node) != VAR_DECL && TREE_CODE (*node) != FUNCTION_DECL))
6804
    {
6805
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6806
      *no_add_attrs = true;
6807
      return NULL_TREE;
6808
    }
6809
 
6810
  /* The idea here is that `weakref("name")' mutates into `weakref,
6811
     alias("name")', and weakref without arguments, in turn,
6812
     implicitly adds weak. */
6813
 
6814
  if (args)
6815
    {
6816
      attr = tree_cons (get_identifier ("alias"), args, attr);
6817
      attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
6818
 
6819
      *no_add_attrs = true;
6820
 
6821
      decl_attributes (node, attr, flags);
6822
    }
6823
  else
6824
    {
6825
      if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
6826
        error_at (DECL_SOURCE_LOCATION (*node),
6827
                  "weakref attribute must appear before alias attribute");
6828
 
6829
      /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
6830
         and that isn't supported; and because it wants to add it to
6831
         the list of weak decls, which isn't helpful.  */
6832
      DECL_WEAK (*node) = 1;
6833
    }
6834
 
6835
  return NULL_TREE;
6836
}
6837
 
6838
/* Handle an "visibility" attribute; arguments as in
6839
   struct attribute_spec.handler.  */
6840
 
6841
static tree
6842
handle_visibility_attribute (tree *node, tree name, tree args,
6843
                             int ARG_UNUSED (flags),
6844
                             bool *ARG_UNUSED (no_add_attrs))
6845
{
6846
  tree decl = *node;
6847
  tree id = TREE_VALUE (args);
6848
  enum symbol_visibility vis;
6849
 
6850
  if (TYPE_P (*node))
6851
    {
6852
      if (TREE_CODE (*node) == ENUMERAL_TYPE)
6853
        /* OK */;
6854
      else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
6855
        {
6856
          warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
6857
                   name);
6858
          return NULL_TREE;
6859
        }
6860
      else if (TYPE_FIELDS (*node))
6861
        {
6862
          error ("%qE attribute ignored because %qT is already defined",
6863
                 name, *node);
6864
          return NULL_TREE;
6865
        }
6866
    }
6867
  else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
6868
    {
6869
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6870
      return NULL_TREE;
6871
    }
6872
 
6873
  if (TREE_CODE (id) != STRING_CST)
6874
    {
6875
      error ("visibility argument not a string");
6876
      return NULL_TREE;
6877
    }
6878
 
6879
  /*  If this is a type, set the visibility on the type decl.  */
6880
  if (TYPE_P (decl))
6881
    {
6882
      decl = TYPE_NAME (decl);
6883
      if (!decl)
6884
        return NULL_TREE;
6885
      if (TREE_CODE (decl) == IDENTIFIER_NODE)
6886
        {
6887
           warning (OPT_Wattributes, "%qE attribute ignored on types",
6888
                    name);
6889
           return NULL_TREE;
6890
        }
6891
    }
6892
 
6893
  if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
6894
    vis = VISIBILITY_DEFAULT;
6895
  else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
6896
    vis = VISIBILITY_INTERNAL;
6897
  else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
6898
    vis = VISIBILITY_HIDDEN;
6899
  else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
6900
    vis = VISIBILITY_PROTECTED;
6901
  else
6902
    {
6903
      error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
6904
      vis = VISIBILITY_DEFAULT;
6905
    }
6906
 
6907
  if (DECL_VISIBILITY_SPECIFIED (decl)
6908
      && vis != DECL_VISIBILITY (decl))
6909
    {
6910
      tree attributes = (TYPE_P (*node)
6911
                         ? TYPE_ATTRIBUTES (*node)
6912
                         : DECL_ATTRIBUTES (decl));
6913
      if (lookup_attribute ("visibility", attributes))
6914
        error ("%qD redeclared with different visibility", decl);
6915
      else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6916
               && lookup_attribute ("dllimport", attributes))
6917
        error ("%qD was declared %qs which implies default visibility",
6918
               decl, "dllimport");
6919
      else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6920
               && lookup_attribute ("dllexport", attributes))
6921
        error ("%qD was declared %qs which implies default visibility",
6922
               decl, "dllexport");
6923
    }
6924
 
6925
  DECL_VISIBILITY (decl) = vis;
6926
  DECL_VISIBILITY_SPECIFIED (decl) = 1;
6927
 
6928
  /* Go ahead and attach the attribute to the node as well.  This is needed
6929
     so we can determine whether we have VISIBILITY_DEFAULT because the
6930
     visibility was not specified, or because it was explicitly overridden
6931
     from the containing scope.  */
6932
 
6933
  return NULL_TREE;
6934
}
6935
 
6936
/* Determine the ELF symbol visibility for DECL, which is either a
6937
   variable or a function.  It is an error to use this function if a
6938
   definition of DECL is not available in this translation unit.
6939
   Returns true if the final visibility has been determined by this
6940
   function; false if the caller is free to make additional
6941
   modifications.  */
6942
 
6943
bool
6944
c_determine_visibility (tree decl)
6945
{
6946
  gcc_assert (TREE_CODE (decl) == VAR_DECL
6947
              || TREE_CODE (decl) == FUNCTION_DECL);
6948
 
6949
  /* If the user explicitly specified the visibility with an
6950
     attribute, honor that.  DECL_VISIBILITY will have been set during
6951
     the processing of the attribute.  We check for an explicit
6952
     attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
6953
     to distinguish the use of an attribute from the use of a "#pragma
6954
     GCC visibility push(...)"; in the latter case we still want other
6955
     considerations to be able to overrule the #pragma.  */
6956
  if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl))
6957
      || (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6958
          && (lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))
6959
              || lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))))
6960
    return true;
6961
 
6962
  /* Set default visibility to whatever the user supplied with
6963
     visibility_specified depending on #pragma GCC visibility.  */
6964
  if (!DECL_VISIBILITY_SPECIFIED (decl))
6965
    {
6966
      if (visibility_options.inpragma
6967
          || DECL_VISIBILITY (decl) != default_visibility)
6968
        {
6969
          DECL_VISIBILITY (decl) = default_visibility;
6970
          DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
6971
          /* If visibility changed and DECL already has DECL_RTL, ensure
6972
             symbol flags are updated.  */
6973
          if (((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
6974
               || TREE_CODE (decl) == FUNCTION_DECL)
6975
              && DECL_RTL_SET_P (decl))
6976
            make_decl_rtl (decl);
6977
        }
6978
    }
6979
  return false;
6980
}
6981
 
6982
/* Handle an "tls_model" attribute; arguments as in
6983
   struct attribute_spec.handler.  */
6984
 
6985
static tree
6986
handle_tls_model_attribute (tree *node, tree name, tree args,
6987
                            int ARG_UNUSED (flags), bool *no_add_attrs)
6988
{
6989
  tree id;
6990
  tree decl = *node;
6991
  enum tls_model kind;
6992
 
6993
  *no_add_attrs = true;
6994
 
6995
  if (TREE_CODE (decl) != VAR_DECL || !DECL_THREAD_LOCAL_P (decl))
6996
    {
6997
      warning (OPT_Wattributes, "%qE attribute ignored", name);
6998
      return NULL_TREE;
6999
    }
7000
 
7001
  kind = DECL_TLS_MODEL (decl);
7002
  id = TREE_VALUE (args);
7003
  if (TREE_CODE (id) != STRING_CST)
7004
    {
7005
      error ("tls_model argument not a string");
7006
      return NULL_TREE;
7007
    }
7008
 
7009
  if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
7010
    kind = TLS_MODEL_LOCAL_EXEC;
7011
  else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
7012
    kind = TLS_MODEL_INITIAL_EXEC;
7013
  else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
7014
    kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
7015
  else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
7016
    kind = TLS_MODEL_GLOBAL_DYNAMIC;
7017
  else
7018
    error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
7019
 
7020
  DECL_TLS_MODEL (decl) = kind;
7021
  return NULL_TREE;
7022
}
7023
 
7024
/* Handle a "no_instrument_function" attribute; arguments as in
7025
   struct attribute_spec.handler.  */
7026
 
7027
static tree
7028
handle_no_instrument_function_attribute (tree *node, tree name,
7029
                                         tree ARG_UNUSED (args),
7030
                                         int ARG_UNUSED (flags),
7031
                                         bool *no_add_attrs)
7032
{
7033
  tree decl = *node;
7034
 
7035
  if (TREE_CODE (decl) != FUNCTION_DECL)
7036
    {
7037
      error_at (DECL_SOURCE_LOCATION (decl),
7038
                "%qE attribute applies only to functions", name);
7039
      *no_add_attrs = true;
7040
    }
7041
  else if (DECL_INITIAL (decl))
7042
    {
7043
      error_at (DECL_SOURCE_LOCATION (decl),
7044
                "can%'t set %qE attribute after definition", name);
7045
      *no_add_attrs = true;
7046
    }
7047
  else
7048
    DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
7049
 
7050
  return NULL_TREE;
7051
}
7052
 
7053
/* Handle a "malloc" attribute; arguments as in
7054
   struct attribute_spec.handler.  */
7055
 
7056
static tree
7057
handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7058
                         int ARG_UNUSED (flags), bool *no_add_attrs)
7059
{
7060
  if (TREE_CODE (*node) == FUNCTION_DECL
7061
      && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
7062
    DECL_IS_MALLOC (*node) = 1;
7063
  else
7064
    {
7065
      warning (OPT_Wattributes, "%qE attribute ignored", name);
7066
      *no_add_attrs = true;
7067
    }
7068
 
7069
  return NULL_TREE;
7070
}
7071
 
7072
/* Handle a "alloc_size" attribute; arguments as in
7073
   struct attribute_spec.handler.  */
7074
 
7075
static tree
7076
handle_alloc_size_attribute (tree *node, tree ARG_UNUSED (name), tree args,
7077
                             int ARG_UNUSED (flags), bool *no_add_attrs)
7078
{
7079
  unsigned arg_count = type_num_arguments (*node);
7080
  for (; args; args = TREE_CHAIN (args))
7081
    {
7082
      tree position = TREE_VALUE (args);
7083
 
7084
      if (TREE_CODE (position) != INTEGER_CST
7085
          || TREE_INT_CST_HIGH (position)
7086
          || TREE_INT_CST_LOW (position) < 1
7087
          || TREE_INT_CST_LOW (position) > arg_count )
7088
        {
7089
          warning (OPT_Wattributes,
7090
                   "alloc_size parameter outside range");
7091
          *no_add_attrs = true;
7092
          return NULL_TREE;
7093
        }
7094
    }
7095
  return NULL_TREE;
7096
}
7097
 
7098
/* Handle a "returns_twice" attribute; arguments as in
7099
   struct attribute_spec.handler.  */
7100
 
7101
static tree
7102
handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7103
                         int ARG_UNUSED (flags), bool *no_add_attrs)
7104
{
7105
  if (TREE_CODE (*node) == FUNCTION_DECL)
7106
    DECL_IS_RETURNS_TWICE (*node) = 1;
7107
  else
7108
    {
7109
      warning (OPT_Wattributes, "%qE attribute ignored", name);
7110
      *no_add_attrs = true;
7111
    }
7112
 
7113
  return NULL_TREE;
7114
}
7115
 
7116
/* Handle a "no_limit_stack" attribute; arguments as in
7117
   struct attribute_spec.handler.  */
7118
 
7119
static tree
7120
handle_no_limit_stack_attribute (tree *node, tree name,
7121
                                 tree ARG_UNUSED (args),
7122
                                 int ARG_UNUSED (flags),
7123
                                 bool *no_add_attrs)
7124
{
7125
  tree decl = *node;
7126
 
7127
  if (TREE_CODE (decl) != FUNCTION_DECL)
7128
    {
7129
      error_at (DECL_SOURCE_LOCATION (decl),
7130
             "%qE attribute applies only to functions", name);
7131
      *no_add_attrs = true;
7132
    }
7133
  else if (DECL_INITIAL (decl))
7134
    {
7135
      error_at (DECL_SOURCE_LOCATION (decl),
7136
                "can%'t set %qE attribute after definition", name);
7137
      *no_add_attrs = true;
7138
    }
7139
  else
7140
    DECL_NO_LIMIT_STACK (decl) = 1;
7141
 
7142
  return NULL_TREE;
7143
}
7144
 
7145
/* Handle a "pure" attribute; arguments as in
7146
   struct attribute_spec.handler.  */
7147
 
7148
static tree
7149
handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7150
                       int ARG_UNUSED (flags), bool *no_add_attrs)
7151
{
7152
  if (TREE_CODE (*node) == FUNCTION_DECL)
7153
    DECL_PURE_P (*node) = 1;
7154
  /* ??? TODO: Support types.  */
7155
  else
7156
    {
7157
      warning (OPT_Wattributes, "%qE attribute ignored", name);
7158
      *no_add_attrs = true;
7159
    }
7160
 
7161
  return NULL_TREE;
7162
}
7163
 
7164
/* Handle a "no vops" attribute; arguments as in
7165
   struct attribute_spec.handler.  */
7166
 
7167
static tree
7168
handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
7169
                         tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7170
                         bool *ARG_UNUSED (no_add_attrs))
7171
{
7172
  gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
7173
  DECL_IS_NOVOPS (*node) = 1;
7174
  return NULL_TREE;
7175
}
7176
 
7177
/* Handle a "deprecated" attribute; arguments as in
7178
   struct attribute_spec.handler.  */
7179
 
7180
static tree
7181
handle_deprecated_attribute (tree *node, tree name,
7182
                             tree args, int flags,
7183
                             bool *no_add_attrs)
7184
{
7185
  tree type = NULL_TREE;
7186
  int warn = 0;
7187
  tree what = NULL_TREE;
7188
 
7189
  if (!args)
7190
    *no_add_attrs = true;
7191
  else if (TREE_CODE (TREE_VALUE (args)) != STRING_CST)
7192
    {
7193
      error ("deprecated message is not a string");
7194
      *no_add_attrs = true;
7195
    }
7196
 
7197
  if (DECL_P (*node))
7198
    {
7199
      tree decl = *node;
7200
      type = TREE_TYPE (decl);
7201
 
7202
      if (TREE_CODE (decl) == TYPE_DECL
7203
          || TREE_CODE (decl) == PARM_DECL
7204
          || TREE_CODE (decl) == VAR_DECL
7205
          || TREE_CODE (decl) == FUNCTION_DECL
7206
          || TREE_CODE (decl) == FIELD_DECL)
7207
        TREE_DEPRECATED (decl) = 1;
7208
      else
7209
        warn = 1;
7210
    }
7211
  else if (TYPE_P (*node))
7212
    {
7213
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
7214
        *node = build_variant_type_copy (*node);
7215
      TREE_DEPRECATED (*node) = 1;
7216
      type = *node;
7217
    }
7218
  else
7219
    warn = 1;
7220
 
7221
  if (warn)
7222
    {
7223
      *no_add_attrs = true;
7224
      if (type && TYPE_NAME (type))
7225
        {
7226
          if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
7227
            what = TYPE_NAME (*node);
7228
          else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7229
                   && DECL_NAME (TYPE_NAME (type)))
7230
            what = DECL_NAME (TYPE_NAME (type));
7231
        }
7232
      if (what)
7233
        warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
7234
      else
7235
        warning (OPT_Wattributes, "%qE attribute ignored", name);
7236
    }
7237
 
7238
  return NULL_TREE;
7239
}
7240
 
7241
/* Handle a "vector_size" attribute; arguments as in
7242
   struct attribute_spec.handler.  */
7243
 
7244
static tree
7245
handle_vector_size_attribute (tree *node, tree name, tree args,
7246
                              int ARG_UNUSED (flags),
7247
                              bool *no_add_attrs)
7248
{
7249
  unsigned HOST_WIDE_INT vecsize, nunits;
7250
  enum machine_mode orig_mode;
7251
  tree type = *node, new_type, size;
7252
 
7253
  *no_add_attrs = true;
7254
 
7255
  size = TREE_VALUE (args);
7256
 
7257
  if (!host_integerp (size, 1))
7258
    {
7259
      warning (OPT_Wattributes, "%qE attribute ignored", name);
7260
      return NULL_TREE;
7261
    }
7262
 
7263
  /* Get the vector size (in bytes).  */
7264
  vecsize = tree_low_cst (size, 1);
7265
 
7266
  /* We need to provide for vector pointers, vector arrays, and
7267
     functions returning vectors.  For example:
7268
 
7269
       __attribute__((vector_size(16))) short *foo;
7270
 
7271
     In this case, the mode is SI, but the type being modified is
7272
     HI, so we need to look further.  */
7273
 
7274
  while (POINTER_TYPE_P (type)
7275
         || TREE_CODE (type) == FUNCTION_TYPE
7276
         || TREE_CODE (type) == METHOD_TYPE
7277
         || TREE_CODE (type) == ARRAY_TYPE
7278
         || TREE_CODE (type) == OFFSET_TYPE)
7279
    type = TREE_TYPE (type);
7280
 
7281
  /* Get the mode of the type being modified.  */
7282
  orig_mode = TYPE_MODE (type);
7283
 
7284
  if ((!INTEGRAL_TYPE_P (type)
7285
       && !SCALAR_FLOAT_TYPE_P (type)
7286
       && !FIXED_POINT_TYPE_P (type))
7287
      || (!SCALAR_FLOAT_MODE_P (orig_mode)
7288
          && GET_MODE_CLASS (orig_mode) != MODE_INT
7289
          && !ALL_SCALAR_FIXED_POINT_MODE_P (orig_mode))
7290
      || !host_integerp (TYPE_SIZE_UNIT (type), 1)
7291
      || TREE_CODE (type) == BOOLEAN_TYPE)
7292
    {
7293
      error ("invalid vector type for attribute %qE", name);
7294
      return NULL_TREE;
7295
    }
7296
 
7297
  if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
7298
    {
7299
      error ("vector size not an integral multiple of component size");
7300
      return NULL;
7301
    }
7302
 
7303
  if (vecsize == 0)
7304
    {
7305
      error ("zero vector size");
7306
      return NULL;
7307
    }
7308
 
7309
  /* Calculate how many units fit in the vector.  */
7310
  nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
7311
  if (nunits & (nunits - 1))
7312
    {
7313
      error ("number of components of the vector not a power of two");
7314
      return NULL_TREE;
7315
    }
7316
 
7317
  new_type = build_vector_type (type, nunits);
7318
 
7319
  /* Build back pointers if needed.  */
7320
  *node = lang_hooks.types.reconstruct_complex_type (*node, new_type);
7321
 
7322
  return NULL_TREE;
7323
}
7324
 
7325
/* Handle the "nonnull" attribute.  */
7326
static tree
7327
handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
7328
                          tree args, int ARG_UNUSED (flags),
7329
                          bool *no_add_attrs)
7330
{
7331
  tree type = *node;
7332
  unsigned HOST_WIDE_INT attr_arg_num;
7333
 
7334
  /* If no arguments are specified, all pointer arguments should be
7335
     non-null.  Verify a full prototype is given so that the arguments
7336
     will have the correct types when we actually check them later.  */
7337
  if (!args)
7338
    {
7339
      if (!TYPE_ARG_TYPES (type))
7340
        {
7341
          error ("nonnull attribute without arguments on a non-prototype");
7342
          *no_add_attrs = true;
7343
        }
7344
      return NULL_TREE;
7345
    }
7346
 
7347
  /* Argument list specified.  Verify that each argument number references
7348
     a pointer argument.  */
7349
  for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
7350
    {
7351
      tree argument;
7352
      unsigned HOST_WIDE_INT arg_num = 0, ck_num;
7353
 
7354
      if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
7355
        {
7356
          error ("nonnull argument has invalid operand number (argument %lu)",
7357
                 (unsigned long) attr_arg_num);
7358
          *no_add_attrs = true;
7359
          return NULL_TREE;
7360
        }
7361
 
7362
      argument = TYPE_ARG_TYPES (type);
7363
      if (argument)
7364
        {
7365
          for (ck_num = 1; ; ck_num++)
7366
            {
7367
              if (!argument || ck_num == arg_num)
7368
                break;
7369
              argument = TREE_CHAIN (argument);
7370
            }
7371
 
7372
          if (!argument
7373
              || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
7374
            {
7375
              error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
7376
                     (unsigned long) attr_arg_num, (unsigned long) arg_num);
7377
              *no_add_attrs = true;
7378
              return NULL_TREE;
7379
            }
7380
 
7381
          if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
7382
            {
7383
              error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
7384
                   (unsigned long) attr_arg_num, (unsigned long) arg_num);
7385
              *no_add_attrs = true;
7386
              return NULL_TREE;
7387
            }
7388
        }
7389
    }
7390
 
7391
  return NULL_TREE;
7392
}
7393
 
7394
/* Check the argument list of a function call for null in argument slots
7395
   that are marked as requiring a non-null pointer argument.  The NARGS
7396
   arguments are passed in the array ARGARRAY.
7397
*/
7398
 
7399
static void
7400
check_function_nonnull (tree attrs, int nargs, tree *argarray)
7401
{
7402
  tree a, args;
7403
  int i;
7404
 
7405
  for (a = attrs; a; a = TREE_CHAIN (a))
7406
    {
7407
      if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
7408
        {
7409
          args = TREE_VALUE (a);
7410
 
7411
          /* Walk the argument list.  If we encounter an argument number we
7412
             should check for non-null, do it.  If the attribute has no args,
7413
             then every pointer argument is checked (in which case the check
7414
             for pointer type is done in check_nonnull_arg).  */
7415
          for (i = 0; i < nargs; i++)
7416
            {
7417
              if (!args || nonnull_check_p (args, i + 1))
7418
                check_function_arguments_recurse (check_nonnull_arg, NULL,
7419
                                                  argarray[i],
7420
                                                  i + 1);
7421
            }
7422
        }
7423
    }
7424
}
7425
 
7426
/* Check that the Nth argument of a function call (counting backwards
7427
   from the end) is a (pointer)0.  The NARGS arguments are passed in the
7428
   array ARGARRAY.  */
7429
 
7430
static void
7431
check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
7432
{
7433
  tree attr = lookup_attribute ("sentinel", attrs);
7434
 
7435
  if (attr)
7436
    {
7437
      int len = 0;
7438
      int pos = 0;
7439
      tree sentinel;
7440
 
7441
      /* Skip over the named arguments.  */
7442
      while (typelist && len < nargs)
7443
        {
7444
          typelist = TREE_CHAIN (typelist);
7445
          len++;
7446
        }
7447
 
7448
      if (TREE_VALUE (attr))
7449
        {
7450
          tree p = TREE_VALUE (TREE_VALUE (attr));
7451
          pos = TREE_INT_CST_LOW (p);
7452
        }
7453
 
7454
      /* The sentinel must be one of the varargs, i.e.
7455
         in position >= the number of fixed arguments.  */
7456
      if ((nargs - 1 - pos) < len)
7457
        {
7458
          warning (OPT_Wformat,
7459
                   "not enough variable arguments to fit a sentinel");
7460
          return;
7461
        }
7462
 
7463
      /* Validate the sentinel.  */
7464
      sentinel = argarray[nargs - 1 - pos];
7465
      if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
7466
           || !integer_zerop (sentinel))
7467
          /* Although __null (in C++) is only an integer we allow it
7468
             nevertheless, as we are guaranteed that it's exactly
7469
             as wide as a pointer, and we don't want to force
7470
             users to cast the NULL they have written there.
7471
             We warn with -Wstrict-null-sentinel, though.  */
7472
          && (warn_strict_null_sentinel || null_node != sentinel))
7473
        warning (OPT_Wformat, "missing sentinel in function call");
7474
    }
7475
}
7476
 
7477
/* Helper for check_function_nonnull; given a list of operands which
7478
   must be non-null in ARGS, determine if operand PARAM_NUM should be
7479
   checked.  */
7480
 
7481
static bool
7482
nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
7483
{
7484
  unsigned HOST_WIDE_INT arg_num = 0;
7485
 
7486
  for (; args; args = TREE_CHAIN (args))
7487
    {
7488
      bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
7489
 
7490
      gcc_assert (found);
7491
 
7492
      if (arg_num == param_num)
7493
        return true;
7494
    }
7495
  return false;
7496
}
7497
 
7498
/* Check that the function argument PARAM (which is operand number
7499
   PARAM_NUM) is non-null.  This is called by check_function_nonnull
7500
   via check_function_arguments_recurse.  */
7501
 
7502
static void
7503
check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
7504
                   unsigned HOST_WIDE_INT param_num)
7505
{
7506
  /* Just skip checking the argument if it's not a pointer.  This can
7507
     happen if the "nonnull" attribute was given without an operand
7508
     list (which means to check every pointer argument).  */
7509
 
7510
  if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
7511
    return;
7512
 
7513
  if (integer_zerop (param))
7514
    warning (OPT_Wnonnull, "null argument where non-null required "
7515
             "(argument %lu)", (unsigned long) param_num);
7516
}
7517
 
7518
/* Helper for nonnull attribute handling; fetch the operand number
7519
   from the attribute argument list.  */
7520
 
7521
static bool
7522
get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
7523
{
7524
  /* Verify the arg number is a constant.  */
7525
  if (TREE_CODE (arg_num_expr) != INTEGER_CST
7526
      || TREE_INT_CST_HIGH (arg_num_expr) != 0)
7527
    return false;
7528
 
7529
  *valp = TREE_INT_CST_LOW (arg_num_expr);
7530
  return true;
7531
}
7532
 
7533
/* Handle a "nothrow" attribute; arguments as in
7534
   struct attribute_spec.handler.  */
7535
 
7536
static tree
7537
handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7538
                          int ARG_UNUSED (flags), bool *no_add_attrs)
7539
{
7540
  if (TREE_CODE (*node) == FUNCTION_DECL)
7541
    TREE_NOTHROW (*node) = 1;
7542
  /* ??? TODO: Support types.  */
7543
  else
7544
    {
7545
      warning (OPT_Wattributes, "%qE attribute ignored", name);
7546
      *no_add_attrs = true;
7547
    }
7548
 
7549
  return NULL_TREE;
7550
}
7551
 
7552
/* Handle a "cleanup" attribute; arguments as in
7553
   struct attribute_spec.handler.  */
7554
 
7555
static tree
7556
handle_cleanup_attribute (tree *node, tree name, tree args,
7557
                          int ARG_UNUSED (flags), bool *no_add_attrs)
7558
{
7559
  tree decl = *node;
7560
  tree cleanup_id, cleanup_decl;
7561
 
7562
  /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
7563
     for global destructors in C++.  This requires infrastructure that
7564
     we don't have generically at the moment.  It's also not a feature
7565
     we'd be missing too much, since we do have attribute constructor.  */
7566
  if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
7567
    {
7568
      warning (OPT_Wattributes, "%qE attribute ignored", name);
7569
      *no_add_attrs = true;
7570
      return NULL_TREE;
7571
    }
7572
 
7573
  /* Verify that the argument is a function in scope.  */
7574
  /* ??? We could support pointers to functions here as well, if
7575
     that was considered desirable.  */
7576
  cleanup_id = TREE_VALUE (args);
7577
  if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
7578
    {
7579
      error ("cleanup argument not an identifier");
7580
      *no_add_attrs = true;
7581
      return NULL_TREE;
7582
    }
7583
  cleanup_decl = lookup_name (cleanup_id);
7584
  if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
7585
    {
7586
      error ("cleanup argument not a function");
7587
      *no_add_attrs = true;
7588
      return NULL_TREE;
7589
    }
7590
 
7591
  /* That the function has proper type is checked with the
7592
     eventual call to build_function_call.  */
7593
 
7594
  return NULL_TREE;
7595
}
7596
 
7597
/* Handle a "warn_unused_result" attribute.  No special handling.  */
7598
 
7599
static tree
7600
handle_warn_unused_result_attribute (tree *node, tree name,
7601
                               tree ARG_UNUSED (args),
7602
                               int ARG_UNUSED (flags), bool *no_add_attrs)
7603
{
7604
  /* Ignore the attribute for functions not returning any value.  */
7605
  if (VOID_TYPE_P (TREE_TYPE (*node)))
7606
    {
7607
      warning (OPT_Wattributes, "%qE attribute ignored", name);
7608
      *no_add_attrs = true;
7609
    }
7610
 
7611
  return NULL_TREE;
7612
}
7613
 
7614
/* Handle a "sentinel" attribute.  */
7615
 
7616
static tree
7617
handle_sentinel_attribute (tree *node, tree name, tree args,
7618
                           int ARG_UNUSED (flags), bool *no_add_attrs)
7619
{
7620
  tree params = TYPE_ARG_TYPES (*node);
7621
 
7622
  if (!params)
7623
    {
7624
      warning (OPT_Wattributes,
7625
               "%qE attribute requires prototypes with named arguments", name);
7626
      *no_add_attrs = true;
7627
    }
7628
  else
7629
    {
7630
      while (TREE_CHAIN (params))
7631
        params = TREE_CHAIN (params);
7632
 
7633
      if (VOID_TYPE_P (TREE_VALUE (params)))
7634
        {
7635
          warning (OPT_Wattributes,
7636
                   "%qE attribute only applies to variadic functions", name);
7637
          *no_add_attrs = true;
7638
        }
7639
    }
7640
 
7641
  if (args)
7642
    {
7643
      tree position = TREE_VALUE (args);
7644
 
7645
      if (TREE_CODE (position) != INTEGER_CST)
7646
        {
7647
          warning (OPT_Wattributes,
7648
                   "requested position is not an integer constant");
7649
          *no_add_attrs = true;
7650
        }
7651
      else
7652
        {
7653
          if (tree_int_cst_lt (position, integer_zero_node))
7654
            {
7655
              warning (OPT_Wattributes,
7656
                       "requested position is less than zero");
7657
              *no_add_attrs = true;
7658
            }
7659
        }
7660
    }
7661
 
7662
  return NULL_TREE;
7663
}
7664
 
7665
/* Handle a "type_generic" attribute.  */
7666
 
7667
static tree
7668
handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
7669
                               tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7670
                               bool * ARG_UNUSED (no_add_attrs))
7671
{
7672
  tree params;
7673
 
7674
  /* Ensure we have a function type.  */
7675
  gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE);
7676
 
7677
  params = TYPE_ARG_TYPES (*node);
7678
  while (params && ! VOID_TYPE_P (TREE_VALUE (params)))
7679
    params = TREE_CHAIN (params);
7680
 
7681
  /* Ensure we have a variadic function.  */
7682
  gcc_assert (!params);
7683
 
7684
  return NULL_TREE;
7685
}
7686
 
7687
/* Handle a "target" attribute.  */
7688
 
7689
static tree
7690
handle_target_attribute (tree *node, tree name, tree args, int flags,
7691
                         bool *no_add_attrs)
7692
{
7693
  /* Ensure we have a function type.  */
7694
  if (TREE_CODE (*node) != FUNCTION_DECL)
7695
    {
7696
      warning (OPT_Wattributes, "%qE attribute ignored", name);
7697
      *no_add_attrs = true;
7698
    }
7699
  else if (! targetm.target_option.valid_attribute_p (*node, name, args,
7700
                                                      flags))
7701
    *no_add_attrs = true;
7702
 
7703
  return NULL_TREE;
7704
}
7705
 
7706
/* Arguments being collected for optimization.  */
7707
typedef const char *const_char_p;               /* For DEF_VEC_P.  */
7708
DEF_VEC_P(const_char_p);
7709
DEF_VEC_ALLOC_P(const_char_p, gc);
7710
static GTY(()) VEC(const_char_p, gc) *optimize_args;
7711
 
7712
 
7713
/* Inner function to convert a TREE_LIST to argv string to parse the optimize
7714
   options in ARGS.  ATTR_P is true if this is for attribute(optimize), and
7715
   false for #pragma GCC optimize.  */
7716
 
7717
bool
7718
parse_optimize_options (tree args, bool attr_p)
7719
{
7720
  bool ret = true;
7721
  unsigned opt_argc;
7722
  unsigned i;
7723
  int saved_flag_strict_aliasing;
7724
  const char **opt_argv;
7725
  tree ap;
7726
 
7727
  /* Build up argv vector.  Just in case the string is stored away, use garbage
7728
     collected strings.  */
7729
  VEC_truncate (const_char_p, optimize_args, 0);
7730
  VEC_safe_push (const_char_p, gc, optimize_args, NULL);
7731
 
7732
  for (ap = args; ap != NULL_TREE; ap = TREE_CHAIN (ap))
7733
    {
7734
      tree value = TREE_VALUE (ap);
7735
 
7736
      if (TREE_CODE (value) == INTEGER_CST)
7737
        {
7738
          char buffer[20];
7739
          sprintf (buffer, "-O%ld", (long) TREE_INT_CST_LOW (value));
7740
          VEC_safe_push (const_char_p, gc, optimize_args, ggc_strdup (buffer));
7741
        }
7742
 
7743
      else if (TREE_CODE (value) == STRING_CST)
7744
        {
7745
          /* Split string into multiple substrings.  */
7746
          size_t len = TREE_STRING_LENGTH (value);
7747
          char *p = ASTRDUP (TREE_STRING_POINTER (value));
7748
          char *end = p + len;
7749
          char *comma;
7750
          char *next_p = p;
7751
 
7752
          while (next_p != NULL)
7753
            {
7754
              size_t len2;
7755
              char *q, *r;
7756
 
7757
              p = next_p;
7758
              comma = strchr (p, ',');
7759
              if (comma)
7760
                {
7761
                  len2 = comma - p;
7762
                  *comma = '\0';
7763
                  next_p = comma+1;
7764
                }
7765
              else
7766
                {
7767
                  len2 = end - p;
7768
                  next_p = NULL;
7769
                }
7770
 
7771
              r = q = (char *) ggc_alloc (len2 + 3);
7772
 
7773
              /* If the user supplied -Oxxx or -fxxx, only allow -Oxxx or -fxxx
7774
                 options.  */
7775
              if (*p == '-' && p[1] != 'O' && p[1] != 'f')
7776
                {
7777
                  ret = false;
7778
                  if (attr_p)
7779
                    warning (OPT_Wattributes,
7780
                             "Bad option %s to optimize attribute.", p);
7781
                  else
7782
                    warning (OPT_Wpragmas,
7783
                             "Bad option %s to pragma attribute", p);
7784
                  continue;
7785
                }
7786
 
7787
              if (*p != '-')
7788
                {
7789
                  *r++ = '-';
7790
 
7791
                  /* Assume that Ox is -Ox, a numeric value is -Ox, a s by
7792
                     itself is -Os, and any other switch begins with a -f.  */
7793
                  if ((*p >= '0' && *p <= '9')
7794
                      || (p[0] == 's' && p[1] == '\0'))
7795
                    *r++ = 'O';
7796
                  else if (*p != 'O')
7797
                    *r++ = 'f';
7798
                }
7799
 
7800
              memcpy (r, p, len2);
7801
              r[len2] = '\0';
7802
              VEC_safe_push (const_char_p, gc, optimize_args, q);
7803
            }
7804
 
7805
        }
7806
    }
7807
 
7808
  opt_argc = VEC_length (const_char_p, optimize_args);
7809
  opt_argv = (const char **) alloca (sizeof (char *) * (opt_argc + 1));
7810
 
7811
  for (i = 1; i < opt_argc; i++)
7812
    opt_argv[i] = VEC_index (const_char_p, optimize_args, i);
7813
 
7814
  saved_flag_strict_aliasing = flag_strict_aliasing;
7815
 
7816
  /* Now parse the options.  */
7817
  decode_options (opt_argc, opt_argv);
7818
 
7819
  targetm.override_options_after_change();
7820
 
7821
  /* Don't allow changing -fstrict-aliasing.  */
7822
  flag_strict_aliasing = saved_flag_strict_aliasing;
7823
 
7824
  VEC_truncate (const_char_p, optimize_args, 0);
7825
  return ret;
7826
}
7827
 
7828
/* For handling "optimize" attribute. arguments as in
7829
   struct attribute_spec.handler.  */
7830
 
7831
static tree
7832
handle_optimize_attribute (tree *node, tree name, tree args,
7833
                           int ARG_UNUSED (flags), bool *no_add_attrs)
7834
{
7835
  /* Ensure we have a function type.  */
7836
  if (TREE_CODE (*node) != FUNCTION_DECL)
7837
    {
7838
      warning (OPT_Wattributes, "%qE attribute ignored", name);
7839
      *no_add_attrs = true;
7840
    }
7841
  else
7842
    {
7843
      struct cl_optimization cur_opts;
7844
      tree old_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node);
7845
 
7846
      /* Save current options.  */
7847
      cl_optimization_save (&cur_opts);
7848
 
7849
      /* If we previously had some optimization options, use them as the
7850
         default.  */
7851
      if (old_opts)
7852
        cl_optimization_restore (TREE_OPTIMIZATION (old_opts));
7853
 
7854
      /* Parse options, and update the vector.  */
7855
      parse_optimize_options (args, true);
7856
      DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
7857
        = build_optimization_node ();
7858
 
7859
      /* Restore current options.  */
7860
      cl_optimization_restore (&cur_opts);
7861
    }
7862
 
7863
  return NULL_TREE;
7864
}
7865
 
7866
/* Check for valid arguments being passed to a function.
7867
   ATTRS is a list of attributes.  There are NARGS arguments in the array
7868
   ARGARRAY.  TYPELIST is the list of argument types for the function.
7869
 */
7870
void
7871
check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
7872
{
7873
  /* Check for null being passed in a pointer argument that must be
7874
     non-null.  We also need to do this if format checking is enabled.  */
7875
 
7876
  if (warn_nonnull)
7877
    check_function_nonnull (attrs, nargs, argarray);
7878
 
7879
  /* Check for errors in format strings.  */
7880
 
7881
  if (warn_format || warn_missing_format_attribute)
7882
    check_function_format (attrs, nargs, argarray);
7883
 
7884
  if (warn_format)
7885
    check_function_sentinel (attrs, nargs, argarray, typelist);
7886
}
7887
 
7888
/* Generic argument checking recursion routine.  PARAM is the argument to
7889
   be checked.  PARAM_NUM is the number of the argument.  CALLBACK is invoked
7890
   once the argument is resolved.  CTX is context for the callback.  */
7891
void
7892
check_function_arguments_recurse (void (*callback)
7893
                                  (void *, tree, unsigned HOST_WIDE_INT),
7894
                                  void *ctx, tree param,
7895
                                  unsigned HOST_WIDE_INT param_num)
7896
{
7897
  if (CONVERT_EXPR_P (param)
7898
      && (TYPE_PRECISION (TREE_TYPE (param))
7899
          == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
7900
    {
7901
      /* Strip coercion.  */
7902
      check_function_arguments_recurse (callback, ctx,
7903
                                        TREE_OPERAND (param, 0), param_num);
7904
      return;
7905
    }
7906
 
7907
  if (TREE_CODE (param) == CALL_EXPR)
7908
    {
7909
      tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
7910
      tree attrs;
7911
      bool found_format_arg = false;
7912
 
7913
      /* See if this is a call to a known internationalization function
7914
         that modifies a format arg.  Such a function may have multiple
7915
         format_arg attributes (for example, ngettext).  */
7916
 
7917
      for (attrs = TYPE_ATTRIBUTES (type);
7918
           attrs;
7919
           attrs = TREE_CHAIN (attrs))
7920
        if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
7921
          {
7922
            tree inner_arg;
7923
            tree format_num_expr;
7924
            int format_num;
7925
            int i;
7926
            call_expr_arg_iterator iter;
7927
 
7928
            /* Extract the argument number, which was previously checked
7929
               to be valid.  */
7930
            format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
7931
 
7932
            gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
7933
                        && !TREE_INT_CST_HIGH (format_num_expr));
7934
 
7935
            format_num = TREE_INT_CST_LOW (format_num_expr);
7936
 
7937
            for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
7938
                 inner_arg != 0;
7939
                 inner_arg = next_call_expr_arg (&iter), i++)
7940
              if (i == format_num)
7941
                {
7942
                  check_function_arguments_recurse (callback, ctx,
7943
                                                    inner_arg, param_num);
7944
                  found_format_arg = true;
7945
                  break;
7946
                }
7947
          }
7948
 
7949
      /* If we found a format_arg attribute and did a recursive check,
7950
         we are done with checking this argument.  Otherwise, we continue
7951
         and this will be considered a non-literal.  */
7952
      if (found_format_arg)
7953
        return;
7954
    }
7955
 
7956
  if (TREE_CODE (param) == COND_EXPR)
7957
    {
7958
      /* Check both halves of the conditional expression.  */
7959
      check_function_arguments_recurse (callback, ctx,
7960
                                        TREE_OPERAND (param, 1), param_num);
7961
      check_function_arguments_recurse (callback, ctx,
7962
                                        TREE_OPERAND (param, 2), param_num);
7963
      return;
7964
    }
7965
 
7966
  (*callback) (ctx, param, param_num);
7967
}
7968
 
7969
/* Checks for a builtin function FNDECL that the number of arguments
7970
   NARGS against the required number REQUIRED and issues an error if
7971
   there is a mismatch.  Returns true if the number of arguments is
7972
   correct, otherwise false.  */
7973
 
7974
static bool
7975
builtin_function_validate_nargs (tree fndecl, int nargs, int required)
7976
{
7977
  if (nargs < required)
7978
    {
7979
      error_at (input_location,
7980
                "not enough arguments to function %qE", fndecl);
7981
      return false;
7982
    }
7983
  else if (nargs > required)
7984
    {
7985
      error_at (input_location,
7986
                "too many arguments to function %qE", fndecl);
7987
      return false;
7988
    }
7989
  return true;
7990
}
7991
 
7992
/* Verifies the NARGS arguments ARGS to the builtin function FNDECL.
7993
   Returns false if there was an error, otherwise true.  */
7994
 
7995
bool
7996
check_builtin_function_arguments (tree fndecl, int nargs, tree *args)
7997
{
7998
  if (!DECL_BUILT_IN (fndecl)
7999
      || DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_NORMAL)
8000
    return true;
8001
 
8002
  switch (DECL_FUNCTION_CODE (fndecl))
8003
    {
8004
    case BUILT_IN_CONSTANT_P:
8005
      return builtin_function_validate_nargs (fndecl, nargs, 1);
8006
 
8007
    case BUILT_IN_ISFINITE:
8008
    case BUILT_IN_ISINF:
8009
    case BUILT_IN_ISINF_SIGN:
8010
    case BUILT_IN_ISNAN:
8011
    case BUILT_IN_ISNORMAL:
8012
      if (builtin_function_validate_nargs (fndecl, nargs, 1))
8013
        {
8014
          if (TREE_CODE (TREE_TYPE (args[0])) != REAL_TYPE)
8015
            {
8016
              error ("non-floating-point argument in call to "
8017
                     "function %qE", fndecl);
8018
              return false;
8019
            }
8020
          return true;
8021
        }
8022
      return false;
8023
 
8024
    case BUILT_IN_ISGREATER:
8025
    case BUILT_IN_ISGREATEREQUAL:
8026
    case BUILT_IN_ISLESS:
8027
    case BUILT_IN_ISLESSEQUAL:
8028
    case BUILT_IN_ISLESSGREATER:
8029
    case BUILT_IN_ISUNORDERED:
8030
      if (builtin_function_validate_nargs (fndecl, nargs, 2))
8031
        {
8032
          enum tree_code code0, code1;
8033
          code0 = TREE_CODE (TREE_TYPE (args[0]));
8034
          code1 = TREE_CODE (TREE_TYPE (args[1]));
8035
          if (!((code0 == REAL_TYPE && code1 == REAL_TYPE)
8036
                || (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
8037
                || (code0 == INTEGER_TYPE && code1 == REAL_TYPE)))
8038
            {
8039
              error ("non-floating-point arguments in call to "
8040
                     "function %qE", fndecl);
8041
              return false;
8042
            }
8043
          return true;
8044
        }
8045
      return false;
8046
 
8047
    case BUILT_IN_FPCLASSIFY:
8048
      if (builtin_function_validate_nargs (fndecl, nargs, 6))
8049
        {
8050
          unsigned i;
8051
 
8052
          for (i=0; i<5; i++)
8053
            if (TREE_CODE (args[i]) != INTEGER_CST)
8054
              {
8055
                error ("non-const integer argument %u in call to function %qE",
8056
                       i+1, fndecl);
8057
                return false;
8058
              }
8059
 
8060
          if (TREE_CODE (TREE_TYPE (args[5])) != REAL_TYPE)
8061
            {
8062
              error ("non-floating-point argument in call to function %qE",
8063
                     fndecl);
8064
              return false;
8065
            }
8066
          return true;
8067
        }
8068
      return false;
8069
 
8070
    default:
8071
      return true;
8072
    }
8073
}
8074
 
8075
/* Function to help qsort sort FIELD_DECLs by name order.  */
8076
 
8077
int
8078
field_decl_cmp (const void *x_p, const void *y_p)
8079
{
8080
  const tree *const x = (const tree *const) x_p;
8081
  const tree *const y = (const tree *const) y_p;
8082
 
8083
  if (DECL_NAME (*x) == DECL_NAME (*y))
8084
    /* A nontype is "greater" than a type.  */
8085
    return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8086
  if (DECL_NAME (*x) == NULL_TREE)
8087
    return -1;
8088
  if (DECL_NAME (*y) == NULL_TREE)
8089
    return 1;
8090
  if (DECL_NAME (*x) < DECL_NAME (*y))
8091
    return -1;
8092
  return 1;
8093
}
8094
 
8095
static struct {
8096
  gt_pointer_operator new_value;
8097
  void *cookie;
8098
} resort_data;
8099
 
8100
/* This routine compares two fields like field_decl_cmp but using the
8101
pointer operator in resort_data.  */
8102
 
8103
static int
8104
resort_field_decl_cmp (const void *x_p, const void *y_p)
8105
{
8106
  const tree *const x = (const tree *const) x_p;
8107
  const tree *const y = (const tree *const) y_p;
8108
 
8109
  if (DECL_NAME (*x) == DECL_NAME (*y))
8110
    /* A nontype is "greater" than a type.  */
8111
    return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8112
  if (DECL_NAME (*x) == NULL_TREE)
8113
    return -1;
8114
  if (DECL_NAME (*y) == NULL_TREE)
8115
    return 1;
8116
  {
8117
    tree d1 = DECL_NAME (*x);
8118
    tree d2 = DECL_NAME (*y);
8119
    resort_data.new_value (&d1, resort_data.cookie);
8120
    resort_data.new_value (&d2, resort_data.cookie);
8121
    if (d1 < d2)
8122
      return -1;
8123
  }
8124
  return 1;
8125
}
8126
 
8127
/* Resort DECL_SORTED_FIELDS because pointers have been reordered.  */
8128
 
8129
void
8130
resort_sorted_fields (void *obj,
8131
                      void * ARG_UNUSED (orig_obj),
8132
                      gt_pointer_operator new_value,
8133
                      void *cookie)
8134
{
8135
  struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
8136
  resort_data.new_value = new_value;
8137
  resort_data.cookie = cookie;
8138
  qsort (&sf->elts[0], sf->len, sizeof (tree),
8139
         resort_field_decl_cmp);
8140
}
8141
 
8142
/* Subroutine of c_parse_error.
8143
   Return the result of concatenating LHS and RHS. RHS is really
8144
   a string literal, its first character is indicated by RHS_START and
8145
   RHS_SIZE is its length (including the terminating NUL character).
8146
 
8147
   The caller is responsible for deleting the returned pointer.  */
8148
 
8149
static char *
8150
catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
8151
{
8152
  const int lhs_size = strlen (lhs);
8153
  char *result = XNEWVEC (char, lhs_size + rhs_size);
8154
  strncpy (result, lhs, lhs_size);
8155
  strncpy (result + lhs_size, rhs_start, rhs_size);
8156
  return result;
8157
}
8158
 
8159
/* Issue the error given by GMSGID, indicating that it occurred before
8160
   TOKEN, which had the associated VALUE.  */
8161
 
8162
void
8163
c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
8164
               tree value, unsigned char token_flags)
8165
{
8166
#define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
8167
 
8168
  char *message = NULL;
8169
 
8170
  if (token_type == CPP_EOF)
8171
    message = catenate_messages (gmsgid, " at end of input");
8172
  else if (token_type == CPP_CHAR
8173
           || token_type == CPP_WCHAR
8174
           || token_type == CPP_CHAR16
8175
           || token_type == CPP_CHAR32)
8176
    {
8177
      unsigned int val = TREE_INT_CST_LOW (value);
8178
      const char *prefix;
8179
 
8180
      switch (token_type)
8181
        {
8182
        default:
8183
          prefix = "";
8184
          break;
8185
        case CPP_WCHAR:
8186
          prefix = "L";
8187
          break;
8188
        case CPP_CHAR16:
8189
          prefix = "u";
8190
          break;
8191
        case CPP_CHAR32:
8192
          prefix = "U";
8193
          break;
8194
        }
8195
 
8196
      if (val <= UCHAR_MAX && ISGRAPH (val))
8197
        message = catenate_messages (gmsgid, " before %s'%c'");
8198
      else
8199
        message = catenate_messages (gmsgid, " before %s'\\x%x'");
8200
 
8201
      error (message, prefix, val);
8202
      free (message);
8203
      message = NULL;
8204
    }
8205
  else if (token_type == CPP_STRING
8206
           || token_type == CPP_WSTRING
8207
           || token_type == CPP_STRING16
8208
           || token_type == CPP_STRING32
8209
           || token_type == CPP_UTF8STRING)
8210
    message = catenate_messages (gmsgid, " before string constant");
8211
  else if (token_type == CPP_NUMBER)
8212
    message = catenate_messages (gmsgid, " before numeric constant");
8213
  else if (token_type == CPP_NAME)
8214
    {
8215
      message = catenate_messages (gmsgid, " before %qE");
8216
      error (message, value);
8217
      free (message);
8218
      message = NULL;
8219
    }
8220
  else if (token_type == CPP_PRAGMA)
8221
    message = catenate_messages (gmsgid, " before %<#pragma%>");
8222
  else if (token_type == CPP_PRAGMA_EOL)
8223
    message = catenate_messages (gmsgid, " before end of line");
8224
  else if (token_type < N_TTYPES)
8225
    {
8226
      message = catenate_messages (gmsgid, " before %qs token");
8227
      error (message, cpp_type2name (token_type, token_flags));
8228
      free (message);
8229
      message = NULL;
8230
    }
8231
  else
8232
    error (gmsgid);
8233
 
8234
  if (message)
8235
    {
8236
      error (message);
8237
      free (message);
8238
    }
8239
#undef catenate_messages
8240
}
8241
 
8242
/* Callback from cpp_error for PFILE to print diagnostics from the
8243
   preprocessor.  The diagnostic is of type LEVEL, at location
8244
   LOCATION unless this is after lexing and the compiler's location
8245
   should be used instead, with column number possibly overridden by
8246
   COLUMN_OVERRIDE if not zero; MSG is the translated message and AP
8247
   the arguments.  Returns true if a diagnostic was emitted, false
8248
   otherwise.  */
8249
 
8250
bool
8251
c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
8252
             location_t location, unsigned int column_override,
8253
             const char *msg, va_list *ap)
8254
{
8255
  diagnostic_info diagnostic;
8256
  diagnostic_t dlevel;
8257
  int save_warn_system_headers = warn_system_headers;
8258
  bool ret;
8259
 
8260
  switch (level)
8261
    {
8262
    case CPP_DL_WARNING_SYSHDR:
8263
      if (flag_no_output)
8264
        return false;
8265
      warn_system_headers = 1;
8266
      /* Fall through.  */
8267
    case CPP_DL_WARNING:
8268
      if (flag_no_output)
8269
        return false;
8270
      dlevel = DK_WARNING;
8271
      break;
8272
    case CPP_DL_PEDWARN:
8273
      if (flag_no_output && !flag_pedantic_errors)
8274
        return false;
8275
      dlevel = DK_PEDWARN;
8276
      break;
8277
    case CPP_DL_ERROR:
8278
      dlevel = DK_ERROR;
8279
      break;
8280
    case CPP_DL_ICE:
8281
      dlevel = DK_ICE;
8282
      break;
8283
    case CPP_DL_NOTE:
8284
      dlevel = DK_NOTE;
8285
      break;
8286
    case CPP_DL_FATAL:
8287
      dlevel = DK_FATAL;
8288
      break;
8289
    default:
8290
      gcc_unreachable ();
8291
    }
8292
  if (done_lexing)
8293
    location = input_location;
8294
  diagnostic_set_info_translated (&diagnostic, msg, ap,
8295
                                  location, dlevel);
8296
  if (column_override)
8297
    diagnostic_override_column (&diagnostic, column_override);
8298
  ret = report_diagnostic (&diagnostic);
8299
  if (level == CPP_DL_WARNING_SYSHDR)
8300
    warn_system_headers = save_warn_system_headers;
8301
  return ret;
8302
}
8303
 
8304
/* Convert a character from the host to the target execution character
8305
   set.  cpplib handles this, mostly.  */
8306
 
8307
HOST_WIDE_INT
8308
c_common_to_target_charset (HOST_WIDE_INT c)
8309
{
8310
  /* Character constants in GCC proper are sign-extended under -fsigned-char,
8311
     zero-extended under -fno-signed-char.  cpplib insists that characters
8312
     and character constants are always unsigned.  Hence we must convert
8313
     back and forth.  */
8314
  cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
8315
 
8316
  uc = cpp_host_to_exec_charset (parse_in, uc);
8317
 
8318
  if (flag_signed_char)
8319
    return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
8320
                               >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
8321
  else
8322
    return uc;
8323
}
8324
 
8325
/* Build the result of __builtin_offsetof.  EXPR is a nested sequence of
8326
   component references, with STOP_REF, or alternatively an INDIRECT_REF of
8327
   NULL, at the bottom; much like the traditional rendering of offsetof as a
8328
   macro.  Returns the folded and properly cast result.  */
8329
 
8330
static tree
8331
fold_offsetof_1 (tree expr, tree stop_ref)
8332
{
8333
  enum tree_code code = PLUS_EXPR;
8334
  tree base, off, t;
8335
 
8336
  if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
8337
    return size_zero_node;
8338
 
8339
  switch (TREE_CODE (expr))
8340
    {
8341
    case ERROR_MARK:
8342
      return expr;
8343
 
8344
    case VAR_DECL:
8345
      error ("cannot apply %<offsetof%> to static data member %qD", expr);
8346
      return error_mark_node;
8347
 
8348
    case CALL_EXPR:
8349
    case TARGET_EXPR:
8350
      error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
8351
      return error_mark_node;
8352
 
8353
    case NOP_EXPR:
8354
    case INDIRECT_REF:
8355
      if (!integer_zerop (TREE_OPERAND (expr, 0)))
8356
        {
8357
          error ("cannot apply %<offsetof%> to a non constant address");
8358
          return error_mark_node;
8359
        }
8360
      return size_zero_node;
8361
 
8362
    case COMPONENT_REF:
8363
      base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8364
      if (base == error_mark_node)
8365
        return base;
8366
 
8367
      t = TREE_OPERAND (expr, 1);
8368
      if (DECL_C_BIT_FIELD (t))
8369
        {
8370
          error ("attempt to take address of bit-field structure "
8371
                 "member %qD", t);
8372
          return error_mark_node;
8373
        }
8374
      off = size_binop_loc (input_location, PLUS_EXPR, DECL_FIELD_OFFSET (t),
8375
                            size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t),
8376
                                                    1)
8377
                                      / BITS_PER_UNIT));
8378
      break;
8379
 
8380
    case ARRAY_REF:
8381
      base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8382
      if (base == error_mark_node)
8383
        return base;
8384
 
8385
      t = TREE_OPERAND (expr, 1);
8386
      if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
8387
        {
8388
          code = MINUS_EXPR;
8389
          t = fold_build1_loc (input_location, NEGATE_EXPR, TREE_TYPE (t), t);
8390
        }
8391
      t = convert (sizetype, t);
8392
      off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
8393
 
8394
      /* Check if the offset goes beyond the upper bound of the array.  */
8395
      if (code == PLUS_EXPR && TREE_CODE (t) == INTEGER_CST)
8396
        {
8397
          tree upbound = array_ref_up_bound (expr);
8398
          if (upbound != NULL_TREE
8399
              && TREE_CODE (upbound) == INTEGER_CST
8400
              && !tree_int_cst_equal (upbound,
8401
                                      TYPE_MAX_VALUE (TREE_TYPE (upbound))))
8402
            {
8403
              upbound = size_binop (PLUS_EXPR, upbound,
8404
                                    build_int_cst (TREE_TYPE (upbound), 1));
8405
              if (tree_int_cst_lt (upbound, t))
8406
                {
8407
                  tree v;
8408
 
8409
                  for (v = TREE_OPERAND (expr, 0);
8410
                       TREE_CODE (v) == COMPONENT_REF;
8411
                       v = TREE_OPERAND (v, 0))
8412
                    if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
8413
                        == RECORD_TYPE)
8414
                      {
8415
                        tree fld_chain = TREE_CHAIN (TREE_OPERAND (v, 1));
8416
                        for (; fld_chain; fld_chain = TREE_CHAIN (fld_chain))
8417
                          if (TREE_CODE (fld_chain) == FIELD_DECL)
8418
                            break;
8419
 
8420
                        if (fld_chain)
8421
                          break;
8422
                      }
8423
                  /* Don't warn if the array might be considered a poor
8424
                     man's flexible array member with a very permissive
8425
                     definition thereof.  */
8426
                  if (TREE_CODE (v) == ARRAY_REF
8427
                      || TREE_CODE (v) == COMPONENT_REF)
8428
                    warning (OPT_Warray_bounds,
8429
                             "index %E denotes an offset "
8430
                             "greater than size of %qT",
8431
                             t, TREE_TYPE (TREE_OPERAND (expr, 0)));
8432
                }
8433
            }
8434
        }
8435
      break;
8436
 
8437
    case COMPOUND_EXPR:
8438
      /* Handle static members of volatile structs.  */
8439
      t = TREE_OPERAND (expr, 1);
8440
      gcc_assert (TREE_CODE (t) == VAR_DECL);
8441
      return fold_offsetof_1 (t, stop_ref);
8442
 
8443
    default:
8444
      gcc_unreachable ();
8445
    }
8446
 
8447
  return size_binop (code, base, off);
8448
}
8449
 
8450
tree
8451
fold_offsetof (tree expr, tree stop_ref)
8452
{
8453
  /* Convert back from the internal sizetype to size_t.  */
8454
  return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
8455
}
8456
 
8457
/* Print an error message for an invalid lvalue.  USE says
8458
   how the lvalue is being used and so selects the error message.  */
8459
 
8460
void
8461
lvalue_error (enum lvalue_use use)
8462
{
8463
  switch (use)
8464
    {
8465
    case lv_assign:
8466
      error ("lvalue required as left operand of assignment");
8467
      break;
8468
    case lv_increment:
8469
      error ("lvalue required as increment operand");
8470
      break;
8471
    case lv_decrement:
8472
      error ("lvalue required as decrement operand");
8473
      break;
8474
    case lv_addressof:
8475
      error ("lvalue required as unary %<&%> operand");
8476
      break;
8477
    case lv_asm:
8478
      error ("lvalue required in asm statement");
8479
      break;
8480
    default:
8481
      gcc_unreachable ();
8482
    }
8483
}
8484
 
8485
/* *PTYPE is an incomplete array.  Complete it with a domain based on
8486
   INITIAL_VALUE.  If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
8487
   is true.  Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8488
   2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty.  */
8489
 
8490
int
8491
complete_array_type (tree *ptype, tree initial_value, bool do_default)
8492
{
8493
  tree maxindex, type, main_type, elt, unqual_elt;
8494
  int failure = 0, quals;
8495
  hashval_t hashcode = 0;
8496
 
8497
  maxindex = size_zero_node;
8498
  if (initial_value)
8499
    {
8500
      if (TREE_CODE (initial_value) == STRING_CST)
8501
        {
8502
          int eltsize
8503
            = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8504
          maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
8505
        }
8506
      else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8507
        {
8508
          VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
8509
 
8510
          if (VEC_empty (constructor_elt, v))
8511
            {
8512
              if (pedantic)
8513
                failure = 3;
8514
              maxindex = integer_minus_one_node;
8515
            }
8516
          else
8517
            {
8518
              tree curindex;
8519
              unsigned HOST_WIDE_INT cnt;
8520
              constructor_elt *ce;
8521
              bool fold_p = false;
8522
 
8523
              if (VEC_index (constructor_elt, v, 0)->index)
8524
                maxindex = fold_convert_loc (input_location, sizetype,
8525
                                             VEC_index (constructor_elt,
8526
                                                        v, 0)->index);
8527
              curindex = maxindex;
8528
 
8529
              for (cnt = 1;
8530
                   VEC_iterate (constructor_elt, v, cnt, ce);
8531
                   cnt++)
8532
                {
8533
                  bool curfold_p = false;
8534
                  if (ce->index)
8535
                    curindex = ce->index, curfold_p = true;
8536
                  else
8537
                    {
8538
                      if (fold_p)
8539
                        curindex = fold_convert (sizetype, curindex);
8540
                      curindex = size_binop (PLUS_EXPR, curindex,
8541
                                             size_one_node);
8542
                    }
8543
                  if (tree_int_cst_lt (maxindex, curindex))
8544
                    maxindex = curindex, fold_p = curfold_p;
8545
                }
8546
               if (fold_p)
8547
                 maxindex = fold_convert (sizetype, maxindex);
8548
            }
8549
        }
8550
      else
8551
        {
8552
          /* Make an error message unless that happened already.  */
8553
          if (initial_value != error_mark_node)
8554
            failure = 1;
8555
        }
8556
    }
8557
  else
8558
    {
8559
      failure = 2;
8560
      if (!do_default)
8561
        return failure;
8562
    }
8563
 
8564
  type = *ptype;
8565
  elt = TREE_TYPE (type);
8566
  quals = TYPE_QUALS (strip_array_types (elt));
8567
  if (quals == 0)
8568
    unqual_elt = elt;
8569
  else
8570
    unqual_elt = c_build_qualified_type (elt, KEEP_QUAL_ADDR_SPACE (quals));
8571
 
8572
  /* Using build_distinct_type_copy and modifying things afterward instead
8573
     of using build_array_type to create a new type preserves all of the
8574
     TYPE_LANG_FLAG_? bits that the front end may have set.  */
8575
  main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
8576
  TREE_TYPE (main_type) = unqual_elt;
8577
  TYPE_DOMAIN (main_type) = build_index_type (maxindex);
8578
  layout_type (main_type);
8579
 
8580
  /* Make sure we have the canonical MAIN_TYPE. */
8581
  hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
8582
  hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
8583
                                    hashcode);
8584
  main_type = type_hash_canon (hashcode, main_type);
8585
 
8586
  /* Fix the canonical type.  */
8587
  if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (main_type))
8588
      || TYPE_STRUCTURAL_EQUALITY_P (TYPE_DOMAIN (main_type)))
8589
    SET_TYPE_STRUCTURAL_EQUALITY (main_type);
8590
  else if (TYPE_CANONICAL (TREE_TYPE (main_type)) != TREE_TYPE (main_type)
8591
           || (TYPE_CANONICAL (TYPE_DOMAIN (main_type))
8592
               != TYPE_DOMAIN (main_type)))
8593
    TYPE_CANONICAL (main_type)
8594
      = build_array_type (TYPE_CANONICAL (TREE_TYPE (main_type)),
8595
                          TYPE_CANONICAL (TYPE_DOMAIN (main_type)));
8596
  else
8597
    TYPE_CANONICAL (main_type) = main_type;
8598
 
8599
  if (quals == 0)
8600
    type = main_type;
8601
  else
8602
    type = c_build_qualified_type (main_type, quals);
8603
 
8604
  if (COMPLETE_TYPE_P (type)
8605
      && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8606
      && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8607
    {
8608
      error ("size of array is too large");
8609
      /* If we proceed with the array type as it is, we'll eventually
8610
         crash in tree_low_cst().  */
8611
      type = error_mark_node;
8612
    }
8613
 
8614
  *ptype = type;
8615
  return failure;
8616
}
8617
 
8618
 
8619
/* Used to help initialize the builtin-types.def table.  When a type of
8620
   the correct size doesn't exist, use error_mark_node instead of NULL.
8621
   The later results in segfaults even when a decl using the type doesn't
8622
   get invoked.  */
8623
 
8624
tree
8625
builtin_type_for_size (int size, bool unsignedp)
8626
{
8627
  tree type = lang_hooks.types.type_for_size (size, unsignedp);
8628
  return type ? type : error_mark_node;
8629
}
8630
 
8631
/* A helper function for resolve_overloaded_builtin in resolving the
8632
   overloaded __sync_ builtins.  Returns a positive power of 2 if the
8633
   first operand of PARAMS is a pointer to a supported data type.
8634
   Returns 0 if an error is encountered.  */
8635
 
8636
static int
8637
sync_resolve_size (tree function, VEC(tree,gc) *params)
8638
{
8639
  tree type;
8640
  int size;
8641
 
8642
  if (VEC_empty (tree, params))
8643
    {
8644
      error ("too few arguments to function %qE", function);
8645
      return 0;
8646
    }
8647
 
8648
  type = TREE_TYPE (VEC_index (tree, params, 0));
8649
  if (TREE_CODE (type) != POINTER_TYPE)
8650
    goto incompatible;
8651
 
8652
  type = TREE_TYPE (type);
8653
  if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
8654
    goto incompatible;
8655
 
8656
  size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
8657
  if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
8658
    return size;
8659
 
8660
 incompatible:
8661
  error ("incompatible type for argument %d of %qE", 1, function);
8662
  return 0;
8663
}
8664
 
8665
/* A helper function for resolve_overloaded_builtin.  Adds casts to
8666
   PARAMS to make arguments match up with those of FUNCTION.  Drops
8667
   the variadic arguments at the end.  Returns false if some error
8668
   was encountered; true on success.  */
8669
 
8670
static bool
8671
sync_resolve_params (tree orig_function, tree function, VEC(tree, gc) *params)
8672
{
8673
  tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
8674
  tree ptype;
8675
  int number;
8676
  unsigned int parmnum;
8677
 
8678
  /* We've declared the implementation functions to use "volatile void *"
8679
     as the pointer parameter, so we shouldn't get any complaints from the
8680
     call to check_function_arguments what ever type the user used.  */
8681
  arg_types = TREE_CHAIN (arg_types);
8682
  ptype = TREE_TYPE (TREE_TYPE (VEC_index (tree, params, 0)));
8683
  number = 2;
8684
 
8685
  /* For the rest of the values, we need to cast these to FTYPE, so that we
8686
     don't get warnings for passing pointer types, etc.  */
8687
  parmnum = 0;
8688
  while (arg_types != void_list_node)
8689
    {
8690
      tree val;
8691
 
8692
      ++parmnum;
8693
      if (VEC_length (tree, params) <= parmnum)
8694
        {
8695
          error ("too few arguments to function %qE", orig_function);
8696
          return false;
8697
        }
8698
 
8699
      /* ??? Ideally for the first conversion we'd use convert_for_assignment
8700
         so that we get warnings for anything that doesn't match the pointer
8701
         type.  This isn't portable across the C and C++ front ends atm.  */
8702
      val = VEC_index (tree, params, parmnum);
8703
      val = convert (ptype, val);
8704
      val = convert (TREE_VALUE (arg_types), val);
8705
      VEC_replace (tree, params, parmnum, val);
8706
 
8707
      arg_types = TREE_CHAIN (arg_types);
8708
      number++;
8709
    }
8710
 
8711
  /* The definition of these primitives is variadic, with the remaining
8712
     being "an optional list of variables protected by the memory barrier".
8713
     No clue what that's supposed to mean, precisely, but we consider all
8714
     call-clobbered variables to be protected so we're safe.  */
8715
  VEC_truncate (tree, params, parmnum + 1);
8716
 
8717
  return true;
8718
}
8719
 
8720
/* A helper function for resolve_overloaded_builtin.  Adds a cast to
8721
   RESULT to make it match the type of the first pointer argument in
8722
   PARAMS.  */
8723
 
8724
static tree
8725
sync_resolve_return (tree first_param, tree result)
8726
{
8727
  tree ptype = TREE_TYPE (TREE_TYPE (first_param));
8728
  ptype = TYPE_MAIN_VARIANT (ptype);
8729
  return convert (ptype, result);
8730
}
8731
 
8732
/* Some builtin functions are placeholders for other expressions.  This
8733
   function should be called immediately after parsing the call expression
8734
   before surrounding code has committed to the type of the expression.
8735
 
8736
   LOC is the location of the builtin call.
8737
 
8738
   FUNCTION is the DECL that has been invoked; it is known to be a builtin.
8739
   PARAMS is the argument list for the call.  The return value is non-null
8740
   when expansion is complete, and null if normal processing should
8741
   continue.  */
8742
 
8743
tree
8744
resolve_overloaded_builtin (location_t loc, tree function, VEC(tree,gc) *params)
8745
{
8746
  enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
8747
  switch (DECL_BUILT_IN_CLASS (function))
8748
    {
8749
    case BUILT_IN_NORMAL:
8750
      break;
8751
    case BUILT_IN_MD:
8752
      if (targetm.resolve_overloaded_builtin)
8753
        return targetm.resolve_overloaded_builtin (loc, function, params);
8754
      else
8755
        return NULL_TREE;
8756
    default:
8757
      return NULL_TREE;
8758
    }
8759
 
8760
  /* Handle BUILT_IN_NORMAL here.  */
8761
  switch (orig_code)
8762
    {
8763
    case BUILT_IN_FETCH_AND_ADD_N:
8764
    case BUILT_IN_FETCH_AND_SUB_N:
8765
    case BUILT_IN_FETCH_AND_OR_N:
8766
    case BUILT_IN_FETCH_AND_AND_N:
8767
    case BUILT_IN_FETCH_AND_XOR_N:
8768
    case BUILT_IN_FETCH_AND_NAND_N:
8769
    case BUILT_IN_ADD_AND_FETCH_N:
8770
    case BUILT_IN_SUB_AND_FETCH_N:
8771
    case BUILT_IN_OR_AND_FETCH_N:
8772
    case BUILT_IN_AND_AND_FETCH_N:
8773
    case BUILT_IN_XOR_AND_FETCH_N:
8774
    case BUILT_IN_NAND_AND_FETCH_N:
8775
    case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
8776
    case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
8777
    case BUILT_IN_LOCK_TEST_AND_SET_N:
8778
    case BUILT_IN_LOCK_RELEASE_N:
8779
      {
8780
        int n = sync_resolve_size (function, params);
8781
        tree new_function, first_param, result;
8782
 
8783
        if (n == 0)
8784
          return error_mark_node;
8785
 
8786
        new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
8787
        if (!sync_resolve_params (function, new_function, params))
8788
          return error_mark_node;
8789
 
8790
        first_param = VEC_index (tree, params, 0);
8791
        result = build_function_call_vec (loc, new_function, params, NULL);
8792
        if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
8793
            && orig_code != BUILT_IN_LOCK_RELEASE_N)
8794
          result = sync_resolve_return (first_param, result);
8795
 
8796
        return result;
8797
      }
8798
 
8799
    default:
8800
      return NULL_TREE;
8801
    }
8802
}
8803
 
8804
/* Ignoring their sign, return true if two scalar types are the same.  */
8805
bool
8806
same_scalar_type_ignoring_signedness (tree t1, tree t2)
8807
{
8808
  enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
8809
 
8810
  gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE || c1 == FIXED_POINT_TYPE)
8811
              && (c2 == INTEGER_TYPE || c2 == REAL_TYPE
8812
                  || c2 == FIXED_POINT_TYPE));
8813
 
8814
  /* Equality works here because c_common_signed_type uses
8815
     TYPE_MAIN_VARIANT.  */
8816
  return c_common_signed_type (t1)
8817
    == c_common_signed_type (t2);
8818
}
8819
 
8820
/* Check for missing format attributes on function pointers.  LTYPE is
8821
   the new type or left-hand side type.  RTYPE is the old type or
8822
   right-hand side type.  Returns TRUE if LTYPE is missing the desired
8823
   attribute.  */
8824
 
8825
bool
8826
check_missing_format_attribute (tree ltype, tree rtype)
8827
{
8828
  tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
8829
  tree ra;
8830
 
8831
  for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
8832
    if (is_attribute_p ("format", TREE_PURPOSE (ra)))
8833
      break;
8834
  if (ra)
8835
    {
8836
      tree la;
8837
      for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
8838
        if (is_attribute_p ("format", TREE_PURPOSE (la)))
8839
          break;
8840
      return !la;
8841
    }
8842
  else
8843
    return false;
8844
}
8845
 
8846
/* Subscripting with type char is likely to lose on a machine where
8847
   chars are signed.  So warn on any machine, but optionally.  Don't
8848
   warn for unsigned char since that type is safe.  Don't warn for
8849
   signed char because anyone who uses that must have done so
8850
   deliberately. Furthermore, we reduce the false positive load by
8851
   warning only for non-constant value of type char.  */
8852
 
8853
void
8854
warn_array_subscript_with_type_char (tree index)
8855
{
8856
  if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
8857
      && TREE_CODE (index) != INTEGER_CST)
8858
    warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
8859
}
8860
 
8861
/* Implement -Wparentheses for the unexpected C precedence rules, to
8862
   cover cases like x + y << z which readers are likely to
8863
   misinterpret.  We have seen an expression in which CODE is a binary
8864
   operator used to combine expressions ARG_LEFT and ARG_RIGHT, which
8865
   before folding had CODE_LEFT and CODE_RIGHT.  CODE_LEFT and
8866
   CODE_RIGHT may be ERROR_MARK, which means that that side of the
8867
   expression was not formed using a binary or unary operator, or it
8868
   was enclosed in parentheses.  */
8869
 
8870
void
8871
warn_about_parentheses (enum tree_code code,
8872
                        enum tree_code code_left, tree arg_left,
8873
                        enum tree_code code_right, tree arg_right)
8874
{
8875
  if (!warn_parentheses)
8876
    return;
8877
 
8878
  /* This macro tests that the expression ARG with original tree code
8879
     CODE appears to be a boolean expression. or the result of folding a
8880
     boolean expression.  */
8881
#define APPEARS_TO_BE_BOOLEAN_EXPR_P(CODE, ARG)                             \
8882
        (truth_value_p (TREE_CODE (ARG))                                    \
8883
         || TREE_CODE (TREE_TYPE (ARG)) == BOOLEAN_TYPE                     \
8884
         /* Folding may create 0 or 1 integers from other expressions.  */  \
8885
         || ((CODE) != INTEGER_CST                                          \
8886
             && (integer_onep (ARG) || integer_zerop (ARG))))
8887
 
8888
  switch (code)
8889
    {
8890
    case LSHIFT_EXPR:
8891
      if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8892
        warning (OPT_Wparentheses,
8893
                 "suggest parentheses around %<+%> inside %<<<%>");
8894
      else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8895
        warning (OPT_Wparentheses,
8896
                 "suggest parentheses around %<-%> inside %<<<%>");
8897
      return;
8898
 
8899
    case RSHIFT_EXPR:
8900
      if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8901
        warning (OPT_Wparentheses,
8902
                 "suggest parentheses around %<+%> inside %<>>%>");
8903
      else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8904
        warning (OPT_Wparentheses,
8905
                 "suggest parentheses around %<-%> inside %<>>%>");
8906
      return;
8907
 
8908
    case TRUTH_ORIF_EXPR:
8909
      if (code_left == TRUTH_ANDIF_EXPR || code_right == TRUTH_ANDIF_EXPR)
8910
        warning (OPT_Wparentheses,
8911
                 "suggest parentheses around %<&&%> within %<||%>");
8912
      return;
8913
 
8914
    case BIT_IOR_EXPR:
8915
      if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
8916
          || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8917
          || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
8918
          || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8919
        warning (OPT_Wparentheses,
8920
                 "suggest parentheses around arithmetic in operand of %<|%>");
8921
      /* Check cases like x|y==z */
8922
      else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8923
               || TREE_CODE_CLASS (code_right) == tcc_comparison)
8924
        warning (OPT_Wparentheses,
8925
                 "suggest parentheses around comparison in operand of %<|%>");
8926
      /* Check cases like !x | y */
8927
      else if (code_left == TRUTH_NOT_EXPR
8928
               && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8929
        warning (OPT_Wparentheses, "suggest parentheses around operand of "
8930
                 "%<!%> or change %<|%> to %<||%> or %<!%> to %<~%>");
8931
      return;
8932
 
8933
    case BIT_XOR_EXPR:
8934
      if (code_left == BIT_AND_EXPR
8935
          || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8936
          || code_right == BIT_AND_EXPR
8937
          || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8938
        warning (OPT_Wparentheses,
8939
                 "suggest parentheses around arithmetic in operand of %<^%>");
8940
      /* Check cases like x^y==z */
8941
      else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8942
               || TREE_CODE_CLASS (code_right) == tcc_comparison)
8943
        warning (OPT_Wparentheses,
8944
                 "suggest parentheses around comparison in operand of %<^%>");
8945
      return;
8946
 
8947
    case BIT_AND_EXPR:
8948
      if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8949
        warning (OPT_Wparentheses,
8950
                 "suggest parentheses around %<+%> in operand of %<&%>");
8951
      else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8952
        warning (OPT_Wparentheses,
8953
                 "suggest parentheses around %<-%> in operand of %<&%>");
8954
      /* Check cases like x&y==z */
8955
      else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8956
               || TREE_CODE_CLASS (code_right) == tcc_comparison)
8957
        warning (OPT_Wparentheses,
8958
                 "suggest parentheses around comparison in operand of %<&%>");
8959
      /* Check cases like !x & y */
8960
      else if (code_left == TRUTH_NOT_EXPR
8961
               && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8962
        warning (OPT_Wparentheses, "suggest parentheses around operand of "
8963
                 "%<!%> or change %<&%> to %<&&%> or %<!%> to %<~%>");
8964
      return;
8965
 
8966
    case EQ_EXPR:
8967
      if (TREE_CODE_CLASS (code_left) == tcc_comparison
8968
          || TREE_CODE_CLASS (code_right) == tcc_comparison)
8969
        warning (OPT_Wparentheses,
8970
                 "suggest parentheses around comparison in operand of %<==%>");
8971
      return;
8972
    case NE_EXPR:
8973
      if (TREE_CODE_CLASS (code_left) == tcc_comparison
8974
          || TREE_CODE_CLASS (code_right) == tcc_comparison)
8975
        warning (OPT_Wparentheses,
8976
                 "suggest parentheses around comparison in operand of %<!=%>");
8977
      return;
8978
 
8979
    default:
8980
      if (TREE_CODE_CLASS (code) == tcc_comparison
8981
           && ((TREE_CODE_CLASS (code_left) == tcc_comparison
8982
                && code_left != NE_EXPR && code_left != EQ_EXPR
8983
                && INTEGRAL_TYPE_P (TREE_TYPE (arg_left)))
8984
               || (TREE_CODE_CLASS (code_right) == tcc_comparison
8985
                   && code_right != NE_EXPR && code_right != EQ_EXPR
8986
                   && INTEGRAL_TYPE_P (TREE_TYPE (arg_right)))))
8987
        warning (OPT_Wparentheses, "comparisons like %<X<=Y<=Z%> do not "
8988
                 "have their mathematical meaning");
8989
      return;
8990
    }
8991
#undef NOT_A_BOOLEAN_EXPR_P
8992
}
8993
 
8994
/* If LABEL (a LABEL_DECL) has not been used, issue a warning.  */
8995
 
8996
void
8997
warn_for_unused_label (tree label)
8998
{
8999
  if (!TREE_USED (label))
9000
    {
9001
      if (DECL_INITIAL (label))
9002
        warning (OPT_Wunused_label, "label %q+D defined but not used", label);
9003
      else
9004
        warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
9005
    }
9006
}
9007
 
9008
#ifndef TARGET_HAS_TARGETCM
9009
struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
9010
#endif
9011
 
9012
/* Warn for division by zero according to the value of DIVISOR.  LOC
9013
   is the location of the division operator.  */
9014
 
9015
void
9016
warn_for_div_by_zero (location_t loc, tree divisor)
9017
{
9018
  /* If DIVISOR is zero, and has integral or fixed-point type, issue a warning
9019
     about division by zero.  Do not issue a warning if DIVISOR has a
9020
     floating-point type, since we consider 0.0/0.0 a valid way of
9021
     generating a NaN.  */
9022
  if (c_inhibit_evaluation_warnings == 0
9023
      && (integer_zerop (divisor) || fixed_zerop (divisor)))
9024
    warning_at (loc, OPT_Wdiv_by_zero, "division by zero");
9025
}
9026
 
9027
/* Subroutine of build_binary_op. Give warnings for comparisons
9028
   between signed and unsigned quantities that may fail. Do the
9029
   checking based on the original operand trees ORIG_OP0 and ORIG_OP1,
9030
   so that casts will be considered, but default promotions won't
9031
   be.
9032
 
9033
   LOCATION is the location of the comparison operator.
9034
 
9035
   The arguments of this function map directly to local variables
9036
   of build_binary_op.  */
9037
 
9038
void
9039
warn_for_sign_compare (location_t location,
9040
                       tree orig_op0, tree orig_op1,
9041
                       tree op0, tree op1,
9042
                       tree result_type, enum tree_code resultcode)
9043
{
9044
  int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
9045
  int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
9046
  int unsignedp0, unsignedp1;
9047
 
9048
  /* In C++, check for comparison of different enum types.  */
9049
  if (c_dialect_cxx()
9050
      && TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
9051
      && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
9052
      && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
9053
         != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
9054
    {
9055
      warning_at (location,
9056
                  OPT_Wsign_compare, "comparison between types %qT and %qT",
9057
                  TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
9058
    }
9059
 
9060
  /* Do not warn if the comparison is being done in a signed type,
9061
     since the signed type will only be chosen if it can represent
9062
     all the values of the unsigned type.  */
9063
  if (!TYPE_UNSIGNED (result_type))
9064
    /* OK */;
9065
  /* Do not warn if both operands are unsigned.  */
9066
  else if (op0_signed == op1_signed)
9067
    /* OK */;
9068
  else
9069
    {
9070
      tree sop, uop, base_type;
9071
      bool ovf;
9072
 
9073
      if (op0_signed)
9074
        sop = orig_op0, uop = orig_op1;
9075
      else
9076
        sop = orig_op1, uop = orig_op0;
9077
 
9078
      STRIP_TYPE_NOPS (sop);
9079
      STRIP_TYPE_NOPS (uop);
9080
      base_type = (TREE_CODE (result_type) == COMPLEX_TYPE
9081
                   ? TREE_TYPE (result_type) : result_type);
9082
 
9083
      /* Do not warn if the signed quantity is an unsuffixed integer
9084
         literal (or some static constant expression involving such
9085
         literals or a conditional expression involving such literals)
9086
         and it is non-negative.  */
9087
      if (tree_expr_nonnegative_warnv_p (sop, &ovf))
9088
        /* OK */;
9089
      /* Do not warn if the comparison is an equality operation, the
9090
         unsigned quantity is an integral constant, and it would fit
9091
         in the result if the result were signed.  */
9092
      else if (TREE_CODE (uop) == INTEGER_CST
9093
               && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
9094
               && int_fits_type_p (uop, c_common_signed_type (base_type)))
9095
        /* OK */;
9096
      /* In C, do not warn if the unsigned quantity is an enumeration
9097
         constant and its maximum value would fit in the result if the
9098
         result were signed.  */
9099
      else if (!c_dialect_cxx() && TREE_CODE (uop) == INTEGER_CST
9100
               && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
9101
               && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (uop)),
9102
                                   c_common_signed_type (base_type)))
9103
        /* OK */;
9104
      else
9105
        warning_at (location,
9106
                    OPT_Wsign_compare,
9107
                    "comparison between signed and unsigned integer expressions");
9108
    }
9109
 
9110
  /* Warn if two unsigned values are being compared in a size larger
9111
     than their original size, and one (and only one) is the result of
9112
     a `~' operator.  This comparison will always fail.
9113
 
9114
     Also warn if one operand is a constant, and the constant does not
9115
     have all bits set that are set in the ~ operand when it is
9116
     extended.  */
9117
 
9118
  op0 = get_narrower (op0, &unsignedp0);
9119
  op1 = get_narrower (op1, &unsignedp1);
9120
 
9121
  if ((TREE_CODE (op0) == BIT_NOT_EXPR)
9122
      ^ (TREE_CODE (op1) == BIT_NOT_EXPR))
9123
    {
9124
      if (TREE_CODE (op0) == BIT_NOT_EXPR)
9125
        op0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
9126
      if (TREE_CODE (op1) == BIT_NOT_EXPR)
9127
        op1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
9128
 
9129
      if (host_integerp (op0, 0) || host_integerp (op1, 0))
9130
        {
9131
          tree primop;
9132
          HOST_WIDE_INT constant, mask;
9133
          int unsignedp;
9134
          unsigned int bits;
9135
 
9136
          if (host_integerp (op0, 0))
9137
            {
9138
              primop = op1;
9139
              unsignedp = unsignedp1;
9140
              constant = tree_low_cst (op0, 0);
9141
            }
9142
          else
9143
            {
9144
              primop = op0;
9145
              unsignedp = unsignedp0;
9146
              constant = tree_low_cst (op1, 0);
9147
            }
9148
 
9149
          bits = TYPE_PRECISION (TREE_TYPE (primop));
9150
          if (bits < TYPE_PRECISION (result_type)
9151
              && bits < HOST_BITS_PER_LONG && unsignedp)
9152
            {
9153
              mask = (~ (HOST_WIDE_INT) 0) << bits;
9154
              if ((mask & constant) != mask)
9155
                {
9156
                  if (constant == 0)
9157
                    warning (OPT_Wsign_compare,
9158
                             "promoted ~unsigned is always non-zero");
9159
                  else
9160
                    warning_at (location, OPT_Wsign_compare,
9161
                                "comparison of promoted ~unsigned with constant");
9162
                }
9163
            }
9164
        }
9165
      else if (unsignedp0 && unsignedp1
9166
               && (TYPE_PRECISION (TREE_TYPE (op0))
9167
                   < TYPE_PRECISION (result_type))
9168
               && (TYPE_PRECISION (TREE_TYPE (op1))
9169
                   < TYPE_PRECISION (result_type)))
9170
        warning_at (location, OPT_Wsign_compare,
9171
                 "comparison of promoted ~unsigned with unsigned");
9172
    }
9173
}
9174
 
9175
/* Setup a TYPE_DECL node as a typedef representation.
9176
 
9177
   X is a TYPE_DECL for a typedef statement.  Create a brand new
9178
   ..._TYPE node (which will be just a variant of the existing
9179
   ..._TYPE node with identical properties) and then install X
9180
   as the TYPE_NAME of this brand new (duplicate) ..._TYPE node.
9181
 
9182
   The whole point here is to end up with a situation where each
9183
   and every ..._TYPE node the compiler creates will be uniquely
9184
   associated with AT MOST one node representing a typedef name.
9185
   This way, even though the compiler substitutes corresponding
9186
   ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
9187
   early on, later parts of the compiler can always do the reverse
9188
   translation and get back the corresponding typedef name.  For
9189
   example, given:
9190
 
9191
        typedef struct S MY_TYPE;
9192
        MY_TYPE object;
9193
 
9194
   Later parts of the compiler might only know that `object' was of
9195
   type `struct S' if it were not for code just below.  With this
9196
   code however, later parts of the compiler see something like:
9197
 
9198
        struct S' == struct S
9199
        typedef struct S' MY_TYPE;
9200
        struct S' object;
9201
 
9202
    And they can then deduce (from the node for type struct S') that
9203
    the original object declaration was:
9204
 
9205
                MY_TYPE object;
9206
 
9207
    Being able to do this is important for proper support of protoize,
9208
    and also for generating precise symbolic debugging information
9209
    which takes full account of the programmer's (typedef) vocabulary.
9210
 
9211
    Obviously, we don't want to generate a duplicate ..._TYPE node if
9212
    the TYPE_DECL node that we are now processing really represents a
9213
    standard built-in type.  */
9214
 
9215
void
9216
set_underlying_type (tree x)
9217
{
9218
  if (x == error_mark_node)
9219
    return;
9220
  if (DECL_IS_BUILTIN (x))
9221
    {
9222
      if (TYPE_NAME (TREE_TYPE (x)) == 0)
9223
        TYPE_NAME (TREE_TYPE (x)) = x;
9224
    }
9225
  else if (TREE_TYPE (x) != error_mark_node
9226
           && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
9227
    {
9228
      tree tt = TREE_TYPE (x);
9229
      DECL_ORIGINAL_TYPE (x) = tt;
9230
      tt = build_variant_type_copy (tt);
9231
      TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
9232
      TYPE_NAME (tt) = x;
9233
      TREE_USED (tt) = TREE_USED (x);
9234
      TREE_TYPE (x) = tt;
9235
    }
9236
}
9237
 
9238
/* Returns true if X is a typedef decl.  */
9239
 
9240
bool
9241
is_typedef_decl (tree x)
9242
{
9243
  return (x && TREE_CODE (x) == TYPE_DECL
9244
          && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
9245
}
9246
 
9247
/* Record the types used by the current global variable declaration
9248
   being parsed, so that we can decide later to emit their debug info.
9249
   Those types are in types_used_by_cur_var_decl, and we are going to
9250
   store them in the types_used_by_vars_hash hash table.
9251
   DECL is the declaration of the global variable that has been parsed.  */
9252
 
9253
void
9254
record_types_used_by_current_var_decl (tree decl)
9255
{
9256
  gcc_assert (decl && DECL_P (decl) && TREE_STATIC (decl));
9257
 
9258
  if (types_used_by_cur_var_decl)
9259
    {
9260
      tree node;
9261
      for (node = types_used_by_cur_var_decl;
9262
           node;
9263
           node = TREE_CHAIN (node))
9264
      {
9265
        tree type = TREE_PURPOSE (node);
9266
        types_used_by_var_decl_insert (type, decl);
9267
      }
9268
      types_used_by_cur_var_decl = NULL;
9269
    }
9270
}
9271
 
9272
/* The C and C++ parsers both use vectors to hold function arguments.
9273
   For efficiency, we keep a cache of unused vectors.  This is the
9274
   cache.  */
9275
 
9276
typedef VEC(tree,gc)* tree_gc_vec;
9277
DEF_VEC_P(tree_gc_vec);
9278
DEF_VEC_ALLOC_P(tree_gc_vec,gc);
9279
static GTY((deletable)) VEC(tree_gc_vec,gc) *tree_vector_cache;
9280
 
9281
/* Return a new vector from the cache.  If the cache is empty,
9282
   allocate a new vector.  These vectors are GC'ed, so it is OK if the
9283
   pointer is not released..  */
9284
 
9285
VEC(tree,gc) *
9286
make_tree_vector (void)
9287
{
9288
  if (!VEC_empty (tree_gc_vec, tree_vector_cache))
9289
    return VEC_pop (tree_gc_vec, tree_vector_cache);
9290
  else
9291
    {
9292
      /* Passing 0 to VEC_alloc returns NULL, and our callers require
9293
         that we always return a non-NULL value.  The vector code uses
9294
         4 when growing a NULL vector, so we do too.  */
9295
      return VEC_alloc (tree, gc, 4);
9296
    }
9297
}
9298
 
9299
/* Release a vector of trees back to the cache.  */
9300
 
9301
void
9302
release_tree_vector (VEC(tree,gc) *vec)
9303
{
9304
  if (vec != NULL)
9305
    {
9306
      VEC_truncate (tree, vec, 0);
9307
      VEC_safe_push (tree_gc_vec, gc, tree_vector_cache, vec);
9308
    }
9309
}
9310
 
9311
/* Get a new tree vector holding a single tree.  */
9312
 
9313
VEC(tree,gc) *
9314
make_tree_vector_single (tree t)
9315
{
9316
  VEC(tree,gc) *ret = make_tree_vector ();
9317
  VEC_quick_push (tree, ret, t);
9318
  return ret;
9319
}
9320
 
9321
/* Get a new tree vector which is a copy of an existing one.  */
9322
 
9323
VEC(tree,gc) *
9324
make_tree_vector_copy (const VEC(tree,gc) *orig)
9325
{
9326
  VEC(tree,gc) *ret;
9327
  unsigned int ix;
9328
  tree t;
9329
 
9330
  ret = make_tree_vector ();
9331
  VEC_reserve (tree, gc, ret, VEC_length (tree, orig));
9332
  for (ix = 0; VEC_iterate (tree, orig, ix, t); ++ix)
9333
    VEC_quick_push (tree, ret, t);
9334
  return ret;
9335
}
9336
 
9337
#include "gt-c-common.h"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.