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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [c-common.c] - Blame information for rev 20

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

Line No. Rev Author Line
1 12 jlechner
/* 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 Free Software Foundation, Inc.
4
 
5
This file is part of GCC.
6
 
7
GCC is free software; you can redistribute it and/or modify it under
8
the terms of the GNU General Public License as published by the Free
9
Software Foundation; either version 2, or (at your option) any later
10
version.
11
 
12
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13
WARRANTY; without even the implied warranty of MERCHANTABILITY or
14
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15
for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with GCC; see the file COPYING.  If not, write to the Free
19
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20
02110-1301, USA.  */
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 "diagnostic.h"
37
#include "tm_p.h"
38
#include "obstack.h"
39
#include "cpplib.h"
40
#include "target.h"
41
#include "langhooks.h"
42
#include "tree-inline.h"
43
#include "c-tree.h"
44
#include "toplev.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
 
52
cpp_reader *parse_in;           /* Declared in c-pragma.h.  */
53
 
54
/* We let tm.h override the types used here, to handle trivial differences
55
   such as the choice of unsigned int or long unsigned int for size_t.
56
   When machines start needing nontrivial differences in the size type,
57
   it would be best to do something here to figure out automatically
58
   from other information what type to use.  */
59
 
60
#ifndef SIZE_TYPE
61
#define SIZE_TYPE "long unsigned int"
62
#endif
63
 
64
#ifndef PID_TYPE
65
#define PID_TYPE "int"
66
#endif
67
 
68
#ifndef WCHAR_TYPE
69
#define WCHAR_TYPE "int"
70
#endif
71
 
72
/* WCHAR_TYPE gets overridden by -fshort-wchar.  */
73
#define MODIFIED_WCHAR_TYPE \
74
        (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
75
 
76
#ifndef PTRDIFF_TYPE
77
#define PTRDIFF_TYPE "long int"
78
#endif
79
 
80
#ifndef WINT_TYPE
81
#define WINT_TYPE "unsigned int"
82
#endif
83
 
84
#ifndef INTMAX_TYPE
85
#define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)     \
86
                     ? "int"                                    \
87
                     : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
88
                        ? "long int"                            \
89
                        : "long long int"))
90
#endif
91
 
92
#ifndef UINTMAX_TYPE
93
#define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)    \
94
                     ? "unsigned int"                           \
95
                     : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
96
                        ? "long unsigned int"                   \
97
                        : "long long unsigned int"))
98
#endif
99
 
100
/* The following symbols are subsumed in the c_global_trees array, and
101
   listed here individually for documentation purposes.
102
 
103
   INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
104
 
105
        tree short_integer_type_node;
106
        tree long_integer_type_node;
107
        tree long_long_integer_type_node;
108
 
109
        tree short_unsigned_type_node;
110
        tree long_unsigned_type_node;
111
        tree long_long_unsigned_type_node;
112
 
113
        tree truthvalue_type_node;
114
        tree truthvalue_false_node;
115
        tree truthvalue_true_node;
116
 
117
        tree ptrdiff_type_node;
118
 
119
        tree unsigned_char_type_node;
120
        tree signed_char_type_node;
121
        tree wchar_type_node;
122
        tree signed_wchar_type_node;
123
        tree unsigned_wchar_type_node;
124
 
125
        tree float_type_node;
126
        tree double_type_node;
127
        tree long_double_type_node;
128
 
129
        tree complex_integer_type_node;
130
        tree complex_float_type_node;
131
        tree complex_double_type_node;
132
        tree complex_long_double_type_node;
133
 
134
        tree intQI_type_node;
135
        tree intHI_type_node;
136
        tree intSI_type_node;
137
        tree intDI_type_node;
138
        tree intTI_type_node;
139
 
140
        tree unsigned_intQI_type_node;
141
        tree unsigned_intHI_type_node;
142
        tree unsigned_intSI_type_node;
143
        tree unsigned_intDI_type_node;
144
        tree unsigned_intTI_type_node;
145
 
146
        tree widest_integer_literal_type_node;
147
        tree widest_unsigned_literal_type_node;
148
 
149
   Nodes for types `void *' and `const void *'.
150
 
151
        tree ptr_type_node, const_ptr_type_node;
152
 
153
   Nodes for types `char *' and `const char *'.
154
 
155
        tree string_type_node, const_string_type_node;
156
 
157
   Type `char[SOMENUMBER]'.
158
   Used when an array of char is needed and the size is irrelevant.
159
 
160
        tree char_array_type_node;
161
 
162
   Type `int[SOMENUMBER]' or something like it.
163
   Used when an array of int needed and the size is irrelevant.
164
 
165
        tree int_array_type_node;
166
 
167
   Type `wchar_t[SOMENUMBER]' or something like it.
168
   Used when a wide string literal is created.
169
 
170
        tree wchar_array_type_node;
171
 
172
   Type `int ()' -- used for implicit declaration of functions.
173
 
174
        tree default_function_type;
175
 
176
   A VOID_TYPE node, packaged in a TREE_LIST.
177
 
178
        tree void_list_node;
179
 
180
  The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
181
  and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
182
  VAR_DECLS, but C++ does.)
183
 
184
        tree function_name_decl_node;
185
        tree pretty_function_name_decl_node;
186
        tree c99_function_name_decl_node;
187
 
188
  Stack of nested function name VAR_DECLs.
189
 
190
        tree saved_function_name_decls;
191
 
192
*/
193
 
194
tree c_global_trees[CTI_MAX];
195
 
196
/* Switches common to the C front ends.  */
197
 
198
/* Nonzero if prepreprocessing only.  */
199
 
200
int flag_preprocess_only;
201
 
202
/* Nonzero means don't output line number information.  */
203
 
204
char flag_no_line_commands;
205
 
206
/* Nonzero causes -E output not to be done, but directives such as
207
   #define that have side effects are still obeyed.  */
208
 
209
char flag_no_output;
210
 
211
/* Nonzero means dump macros in some fashion.  */
212
 
213
char flag_dump_macros;
214
 
215
/* Nonzero means pass #include lines through to the output.  */
216
 
217
char flag_dump_includes;
218
 
219
/* Nonzero means process PCH files while preprocessing.  */
220
 
221
bool flag_pch_preprocess;
222
 
223
/* The file name to which we should write a precompiled header, or
224
   NULL if no header will be written in this compile.  */
225
 
226
const char *pch_file;
227
 
228
/* Nonzero if an ISO standard was selected.  It rejects macros in the
229
   user's namespace.  */
230
int flag_iso;
231
 
232
/* Nonzero if -undef was given.  It suppresses target built-in macros
233
   and assertions.  */
234
int flag_undef;
235
 
236
/* Nonzero means don't recognize the non-ANSI builtin functions.  */
237
 
238
int flag_no_builtin;
239
 
240
/* Nonzero means don't recognize the non-ANSI builtin functions.
241
   -ansi sets this.  */
242
 
243
int flag_no_nonansi_builtin;
244
 
245
/* Nonzero means give `double' the same size as `float'.  */
246
 
247
int flag_short_double;
248
 
249
/* Nonzero means give `wchar_t' the same size as `short'.  */
250
 
251
int flag_short_wchar;
252
 
253
/* Nonzero means allow Microsoft extensions without warnings or errors.  */
254
int flag_ms_extensions;
255
 
256
/* Nonzero means don't recognize the keyword `asm'.  */
257
 
258
int flag_no_asm;
259
 
260
/* Nonzero means give string constants the type `const char *', as mandated
261
   by the standard.  */
262
 
263
int flag_const_strings;
264
 
265
/* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
266
 
267
int flag_signed_bitfields = 1;
268
 
269
/* Nonzero means warn about deprecated conversion from string constant to
270
   `char *'.  */
271
 
272
int warn_write_strings;
273
 
274
/* Warn about #pragma directives that are not recognized.  */
275
 
276
int warn_unknown_pragmas; /* Tri state variable.  */
277
 
278
/* Warn about format/argument anomalies in calls to formatted I/O functions
279
   (*printf, *scanf, strftime, strfmon, etc.).  */
280
 
281
int warn_format;
282
 
283
/* Warn about using __null (as NULL in C++) as sentinel.  For code compiled
284
   with GCC this doesn't matter as __null is guaranteed to have the right
285
   size.  */
286
 
287
int warn_strict_null_sentinel;
288
 
289
/* Zero means that faster, ...NonNil variants of objc_msgSend...
290
   calls will be used in ObjC; passing nil receivers to such calls
291
   will most likely result in crashes.  */
292
int flag_nil_receivers = 1;
293
 
294
/* Nonzero means that code generation will be altered to support
295
   "zero-link" execution.  This currently affects ObjC only, but may
296
   affect other languages in the future.  */
297
int flag_zero_link = 0;
298
 
299
/* Nonzero means emit an '__OBJC, __image_info' for the current translation
300
   unit.  It will inform the ObjC runtime that class definition(s) herein
301
   contained are to replace one(s) previously loaded.  */
302
int flag_replace_objc_classes = 0;
303
 
304
/* C/ObjC language option variables.  */
305
 
306
 
307
/* Nonzero means allow type mismatches in conditional expressions;
308
   just make their values `void'.  */
309
 
310
int flag_cond_mismatch;
311
 
312
/* Nonzero means enable C89 Amendment 1 features.  */
313
 
314
int flag_isoc94;
315
 
316
/* Nonzero means use the ISO C99 dialect of C.  */
317
 
318
int flag_isoc99;
319
 
320
/* Nonzero means that we have builtin functions, and main is an int.  */
321
 
322
int flag_hosted = 1;
323
 
324
/* Warn if main is suspicious.  */
325
 
326
int warn_main;
327
 
328
 
329
/* ObjC language option variables.  */
330
 
331
 
332
/* Open and close the file for outputting class declarations, if
333
   requested (ObjC).  */
334
 
335
int flag_gen_declaration;
336
 
337
/* Tells the compiler that this is a special run.  Do not perform any
338
   compiling, instead we are to test some platform dependent features
339
   and output a C header file with appropriate definitions.  */
340
 
341
int print_struct_values;
342
 
343
/* Tells the compiler what is the constant string class for Objc.  */
344
 
345
const char *constant_string_class_name;
346
 
347
 
348
/* C++ language option variables.  */
349
 
350
 
351
/* Nonzero means don't recognize any extension keywords.  */
352
 
353
int flag_no_gnu_keywords;
354
 
355
/* Nonzero means do emit exported implementations of functions even if
356
   they can be inlined.  */
357
 
358
int flag_implement_inlines = 1;
359
 
360
/* Nonzero means that implicit instantiations will be emitted if needed.  */
361
 
362
int flag_implicit_templates = 1;
363
 
364
/* Nonzero means that implicit instantiations of inline templates will be
365
   emitted if needed, even if instantiations of non-inline templates
366
   aren't.  */
367
 
368
int flag_implicit_inline_templates = 1;
369
 
370
/* Nonzero means generate separate instantiation control files and
371
   juggle them at link time.  */
372
 
373
int flag_use_repository;
374
 
375
/* Nonzero if we want to issue diagnostics that the standard says are not
376
   required.  */
377
 
378
int flag_optional_diags = 1;
379
 
380
/* Nonzero means we should attempt to elide constructors when possible.  */
381
 
382
int flag_elide_constructors = 1;
383
 
384
/* Nonzero means that member functions defined in class scope are
385
   inline by default.  */
386
 
387
int flag_default_inline = 1;
388
 
389
/* Controls whether compiler generates 'type descriptor' that give
390
   run-time type information.  */
391
 
392
int flag_rtti = 1;
393
 
394
/* Nonzero if we want to conserve space in the .o files.  We do this
395
   by putting uninitialized data and runtime initialized data into
396
   .common instead of .data at the expense of not flagging multiple
397
   definitions.  */
398
 
399
int flag_conserve_space;
400
 
401
/* Nonzero if we want to obey access control semantics.  */
402
 
403
int flag_access_control = 1;
404
 
405
/* Nonzero if we want to check the return value of new and avoid calling
406
   constructors if it is a null pointer.  */
407
 
408
int flag_check_new;
409
 
410
/* Nonzero if we want the new ISO rules for pushing a new scope for `for'
411
   initialization variables.
412
   0: Old rules, set by -fno-for-scope.
413
   2: New ISO rules, set by -ffor-scope.
414
   1: Try to implement new ISO rules, but with backup compatibility
415
   (and warnings).  This is the default, for now.  */
416
 
417
int flag_new_for_scope = 1;
418
 
419
/* Nonzero if we want to emit defined symbols with common-like linkage as
420
   weak symbols where possible, in order to conform to C++ semantics.
421
   Otherwise, emit them as local symbols.  */
422
 
423
int flag_weak = 1;
424
 
425
/* 0 means we want the preprocessor to not emit line directives for
426
   the current working directory.  1 means we want it to do it.  -1
427
   means we should decide depending on whether debugging information
428
   is being emitted or not.  */
429
 
430
int flag_working_directory = -1;
431
 
432
/* Nonzero to use __cxa_atexit, rather than atexit, to register
433
   destructors for local statics and global objects.  */
434
 
435
int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
436
 
437
/* Nonzero means make the default pedwarns warnings instead of errors.
438
   The value of this flag is ignored if -pedantic is specified.  */
439
 
440
int flag_permissive;
441
 
442
/* Nonzero means to implement standard semantics for exception
443
   specifications, calling unexpected if an exception is thrown that
444
   doesn't match the specification.  Zero means to treat them as
445
   assertions and optimize accordingly, but not check them.  */
446
 
447
int flag_enforce_eh_specs = 1;
448
 
449
/* Nonzero means to generate thread-safe code for initializing local
450
   statics.  */
451
 
452
int flag_threadsafe_statics = 1;
453
 
454
/* Nonzero means warn about implicit declarations.  */
455
 
456
int warn_implicit = 1;
457
 
458
/* Maximum template instantiation depth.  This limit is rather
459
   arbitrary, but it exists to limit the time it takes to notice
460
   infinite template instantiations.  */
461
 
462
int max_tinst_depth = 500;
463
 
464
 
465
 
466
/* The elements of `ridpointers' are identifier nodes for the reserved
467
   type names and storage classes.  It is indexed by a RID_... value.  */
468
tree *ridpointers;
469
 
470
tree (*make_fname_decl) (tree, int);
471
 
472
/* Nonzero means the expression being parsed will never be evaluated.
473
   This is a count, since unevaluated expressions can nest.  */
474
int skip_evaluation;
475
 
476
/* Information about how a function name is generated.  */
477
struct fname_var_t
478
{
479
  tree *const decl;     /* pointer to the VAR_DECL.  */
480
  const unsigned rid;   /* RID number for the identifier.  */
481
  const int pretty;     /* How pretty is it? */
482
};
483
 
484
/* The three ways of getting then name of the current function.  */
485
 
486
const struct fname_var_t fname_vars[] =
487
{
488
  /* C99 compliant __func__, must be first.  */
489
  {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
490
  /* GCC __FUNCTION__ compliant.  */
491
  {&function_name_decl_node, RID_FUNCTION_NAME, 0},
492
  /* GCC __PRETTY_FUNCTION__ compliant.  */
493
  {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
494
  {NULL, 0, 0},
495
};
496
 
497
static int constant_fits_type_p (tree, tree);
498
static tree check_case_value (tree);
499
static bool check_case_bounds (tree, tree, tree *, tree *);
500
 
501
static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
502
static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
503
static tree handle_common_attribute (tree *, tree, tree, int, bool *);
504
static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
505
static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
506
static tree handle_always_inline_attribute (tree *, tree, tree, int,
507
                                            bool *);
508
static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
509
static tree handle_used_attribute (tree *, tree, tree, int, bool *);
510
static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
511
static tree handle_externally_visible_attribute (tree *, tree, tree, int,
512
                                                 bool *);
513
static tree handle_const_attribute (tree *, tree, tree, int, bool *);
514
static tree handle_transparent_union_attribute (tree *, tree, tree,
515
                                                int, bool *);
516
static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
517
static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
518
static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
519
static tree handle_section_attribute (tree *, tree, tree, int, bool *);
520
static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
521
static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
522
static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
523
static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
524
static tree handle_visibility_attribute (tree *, tree, tree, int,
525
                                         bool *);
526
static tree handle_tls_model_attribute (tree *, tree, tree, int,
527
                                        bool *);
528
static tree handle_no_instrument_function_attribute (tree *, tree,
529
                                                     tree, int, bool *);
530
static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
531
static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
532
static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
533
                                             bool *);
534
static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
535
static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
536
static tree handle_deprecated_attribute (tree *, tree, tree, int,
537
                                         bool *);
538
static tree handle_vector_size_attribute (tree *, tree, tree, int,
539
                                          bool *);
540
static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
541
static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
542
static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
543
static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
544
                                                 bool *);
545
static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
546
 
547
static void check_function_nonnull (tree, tree);
548
static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
549
static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
550
static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
551
static int resort_field_decl_cmp (const void *, const void *);
552
 
553
/* Table of machine-independent attributes common to all C-like languages.  */
554
const struct attribute_spec c_common_attribute_table[] =
555
{
556
  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
557
  { "packed",                 0, 0, false, false, false,
558
                              handle_packed_attribute },
559
  { "nocommon",               0, 0, true,  false, false,
560
                              handle_nocommon_attribute },
561
  { "common",                 0, 0, true,  false, false,
562
                              handle_common_attribute },
563
  /* FIXME: logically, noreturn attributes should be listed as
564
     "false, true, true" and apply to function types.  But implementing this
565
     would require all the places in the compiler that use TREE_THIS_VOLATILE
566
     on a decl to identify non-returning functions to be located and fixed
567
     to check the function type instead.  */
568
  { "noreturn",               0, 0, true,  false, false,
569
                              handle_noreturn_attribute },
570
  { "volatile",               0, 0, true,  false, false,
571
                              handle_noreturn_attribute },
572
  { "noinline",               0, 0, true,  false, false,
573
                              handle_noinline_attribute },
574
  { "always_inline",          0, 0, true,  false, false,
575
                              handle_always_inline_attribute },
576
  { "flatten",                0, 0, true,  false, false,
577
                              handle_flatten_attribute },
578
  { "used",                   0, 0, true,  false, false,
579
                              handle_used_attribute },
580
  { "unused",                 0, 0, false, false, false,
581
                              handle_unused_attribute },
582
  { "externally_visible",     0, 0, true,  false, false,
583
                              handle_externally_visible_attribute },
584
  /* The same comments as for noreturn attributes apply to const ones.  */
585
  { "const",                  0, 0, true,  false, false,
586
                              handle_const_attribute },
587
  { "transparent_union",      0, 0, false, false, false,
588
                              handle_transparent_union_attribute },
589
  { "constructor",            0, 0, true,  false, false,
590
                              handle_constructor_attribute },
591
  { "destructor",             0, 0, true,  false, false,
592
                              handle_destructor_attribute },
593
  { "mode",                   1, 1, false,  true, false,
594
                              handle_mode_attribute },
595
  { "section",                1, 1, true,  false, false,
596
                              handle_section_attribute },
597
  { "aligned",                0, 1, false, false, false,
598
                              handle_aligned_attribute },
599
  { "weak",                   0, 0, true,  false, false,
600
                              handle_weak_attribute },
601
  { "alias",                  1, 1, true,  false, false,
602
                              handle_alias_attribute },
603
  { "weakref",                0, 1, true,  false, false,
604
                              handle_weakref_attribute },
605
  { "no_instrument_function", 0, 0, true,  false, false,
606
                              handle_no_instrument_function_attribute },
607
  { "malloc",                 0, 0, true,  false, false,
608
                              handle_malloc_attribute },
609
  { "returns_twice",          0, 0, true,  false, false,
610
                              handle_returns_twice_attribute },
611
  { "no_stack_limit",         0, 0, true,  false, false,
612
                              handle_no_limit_stack_attribute },
613
  { "pure",                   0, 0, true,  false, false,
614
                              handle_pure_attribute },
615
  /* For internal use (marking of builtins) only.  The name contains space
616
     to prevent its usage in source code.  */
617
  { "no vops",                0, 0, true,  false, false,
618
                              handle_novops_attribute },
619
  { "deprecated",             0, 0, false, false, false,
620
                              handle_deprecated_attribute },
621
  { "vector_size",            1, 1, false, true, false,
622
                              handle_vector_size_attribute },
623
  { "visibility",             1, 1, false, false, false,
624
                              handle_visibility_attribute },
625
  { "tls_model",              1, 1, true,  false, false,
626
                              handle_tls_model_attribute },
627
  { "nonnull",                0, -1, false, true, true,
628
                              handle_nonnull_attribute },
629
  { "nothrow",                0, 0, true,  false, false,
630
                              handle_nothrow_attribute },
631
  { "may_alias",              0, 0, false, true, false, NULL },
632
  { "cleanup",                1, 1, true, false, false,
633
                              handle_cleanup_attribute },
634
  { "warn_unused_result",     0, 0, false, true, true,
635
                              handle_warn_unused_result_attribute },
636
  { "sentinel",               0, 1, false, true, true,
637
                              handle_sentinel_attribute },
638
  { NULL,                     0, 0, false, false, false, NULL }
639
};
640
 
641
/* Give the specifications for the format attributes, used by C and all
642
   descendants.  */
643
 
644
const struct attribute_spec c_common_format_attribute_table[] =
645
{
646
  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
647
  { "format",                 3, 3, false, true,  true,
648
                              handle_format_attribute },
649
  { "format_arg",             1, 1, false, true,  true,
650
                              handle_format_arg_attribute },
651
  { NULL,                     0, 0, false, false, false, NULL }
652
};
653
 
654
/* Push current bindings for the function name VAR_DECLS.  */
655
 
656
void
657
start_fname_decls (void)
658
{
659
  unsigned ix;
660
  tree saved = NULL_TREE;
661
 
662
  for (ix = 0; fname_vars[ix].decl; ix++)
663
    {
664
      tree decl = *fname_vars[ix].decl;
665
 
666
      if (decl)
667
        {
668
          saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
669
          *fname_vars[ix].decl = NULL_TREE;
670
        }
671
    }
672
  if (saved || saved_function_name_decls)
673
    /* Normally they'll have been NULL, so only push if we've got a
674
       stack, or they are non-NULL.  */
675
    saved_function_name_decls = tree_cons (saved, NULL_TREE,
676
                                           saved_function_name_decls);
677
}
678
 
679
/* Finish up the current bindings, adding them into the current function's
680
   statement tree.  This must be done _before_ finish_stmt_tree is called.
681
   If there is no current function, we must be at file scope and no statements
682
   are involved. Pop the previous bindings.  */
683
 
684
void
685
finish_fname_decls (void)
686
{
687
  unsigned ix;
688
  tree stmts = NULL_TREE;
689
  tree stack = saved_function_name_decls;
690
 
691
  for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
692
    append_to_statement_list (TREE_VALUE (stack), &stmts);
693
 
694
  if (stmts)
695
    {
696
      tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
697
 
698
      if (TREE_CODE (*bodyp) == BIND_EXPR)
699
        bodyp = &BIND_EXPR_BODY (*bodyp);
700
 
701
      append_to_statement_list_force (*bodyp, &stmts);
702
      *bodyp = stmts;
703
    }
704
 
705
  for (ix = 0; fname_vars[ix].decl; ix++)
706
    *fname_vars[ix].decl = NULL_TREE;
707
 
708
  if (stack)
709
    {
710
      /* We had saved values, restore them.  */
711
      tree saved;
712
 
713
      for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
714
        {
715
          tree decl = TREE_PURPOSE (saved);
716
          unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
717
 
718
          *fname_vars[ix].decl = decl;
719
        }
720
      stack = TREE_CHAIN (stack);
721
    }
722
  saved_function_name_decls = stack;
723
}
724
 
725
/* Return the text name of the current function, suitably prettified
726
   by PRETTY_P.  Return string must be freed by caller.  */
727
 
728
const char *
729
fname_as_string (int pretty_p)
730
{
731
  const char *name = "top level";
732
  char *namep;
733
  int vrb = 2;
734
 
735
  if (!pretty_p)
736
    {
737
      name = "";
738
      vrb = 0;
739
    }
740
 
741
  if (current_function_decl)
742
    name = lang_hooks.decl_printable_name (current_function_decl, vrb);
743
 
744
  if (c_lex_string_translate)
745
    {
746
      int len = strlen (name) + 3; /* Two for '"'s.  One for NULL.  */
747
      cpp_string cstr = { 0, 0 }, strname;
748
 
749
      namep = XNEWVEC (char, len);
750
      snprintf (namep, len, "\"%s\"", name);
751
      strname.text = (unsigned char *) namep;
752
      strname.len = len - 1;
753
 
754
      if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
755
        {
756
          XDELETEVEC (namep);
757
          return (char *) cstr.text;
758
        }
759
    }
760
  else
761
    namep = xstrdup (name);
762
 
763
  return namep;
764
}
765
 
766
/* Expand DECL if it declares an entity not handled by the
767
   common code.  */
768
 
769
int
770
c_expand_decl (tree decl)
771
{
772
  if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
773
    {
774
      /* Let the back-end know about this variable.  */
775
      if (!anon_aggr_type_p (TREE_TYPE (decl)))
776
        emit_local_var (decl);
777
      else
778
        expand_anon_union_decl (decl, NULL_TREE,
779
                                DECL_ANON_UNION_ELEMS (decl));
780
    }
781
  else
782
    return 0;
783
 
784
  return 1;
785
}
786
 
787
 
788
/* Return the VAR_DECL for a const char array naming the current
789
   function. If the VAR_DECL has not yet been created, create it
790
   now. RID indicates how it should be formatted and IDENTIFIER_NODE
791
   ID is its name (unfortunately C and C++ hold the RID values of
792
   keywords in different places, so we can't derive RID from ID in
793
   this language independent code.  */
794
 
795
tree
796
fname_decl (unsigned int rid, tree id)
797
{
798
  unsigned ix;
799
  tree decl = NULL_TREE;
800
 
801
  for (ix = 0; fname_vars[ix].decl; ix++)
802
    if (fname_vars[ix].rid == rid)
803
      break;
804
 
805
  decl = *fname_vars[ix].decl;
806
  if (!decl)
807
    {
808
      /* If a tree is built here, it would normally have the lineno of
809
         the current statement.  Later this tree will be moved to the
810
         beginning of the function and this line number will be wrong.
811
         To avoid this problem set the lineno to 0 here; that prevents
812
         it from appearing in the RTL.  */
813
      tree stmts;
814
      location_t saved_location = input_location;
815
#ifdef USE_MAPPED_LOCATION
816
      input_location = UNKNOWN_LOCATION;
817
#else
818
      input_line = 0;
819
#endif
820
 
821
      stmts = push_stmt_list ();
822
      decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
823
      stmts = pop_stmt_list (stmts);
824
      if (!IS_EMPTY_STMT (stmts))
825
        saved_function_name_decls
826
          = tree_cons (decl, stmts, saved_function_name_decls);
827
      *fname_vars[ix].decl = decl;
828
      input_location = saved_location;
829
    }
830
  if (!ix && !current_function_decl)
831
    pedwarn ("%qD is not defined outside of function scope", decl);
832
 
833
  return decl;
834
}
835
 
836
/* Given a STRING_CST, give it a suitable array-of-chars data type.  */
837
 
838
tree
839
fix_string_type (tree value)
840
{
841
  const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
842
  const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
843
  const int nchars_max = flag_isoc99 ? 4095 : 509;
844
  int length = TREE_STRING_LENGTH (value);
845
  int nchars;
846
  tree e_type, i_type, a_type;
847
 
848
  /* Compute the number of elements, for the array type.  */
849
  nchars = wide_flag ? length / wchar_bytes : length;
850
 
851
  if (pedantic && nchars - 1 > nchars_max && !c_dialect_cxx ())
852
    pedwarn ("string length %qd is greater than the length %qd ISO C%d compilers are required to support",
853
             nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
854
 
855
  e_type = wide_flag ? wchar_type_node : char_type_node;
856
  /* Create the array type for the string constant.  flag_const_strings
857
     says make the string constant an array of const char so that
858
     copying it to a non-const pointer will get a warning.  For C++,
859
     this is the standard behavior.
860
 
861
     The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
862
     array type being the unqualified version of that type.
863
     Therefore, if we are constructing an array of const char, we must
864
     construct the matching unqualified array type first.  The C front
865
     end does not require this, but it does no harm, so we do it
866
     unconditionally.  */
867
  i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
868
  a_type = build_array_type (e_type, i_type);
869
  if (flag_const_strings)
870
    a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
871
 
872
  TREE_TYPE (value) = a_type;
873
  TREE_CONSTANT (value) = 1;
874
  TREE_INVARIANT (value) = 1;
875
  TREE_READONLY (value) = 1;
876
  TREE_STATIC (value) = 1;
877
  return value;
878
}
879
 
880
/* Print a warning if a constant expression had overflow in folding.
881
   Invoke this function on every expression that the language
882
   requires to be a constant expression.
883
   Note the ANSI C standard says it is erroneous for a
884
   constant expression to overflow.  */
885
 
886
void
887
constant_expression_warning (tree value)
888
{
889
  if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
890
       || TREE_CODE (value) == VECTOR_CST
891
       || TREE_CODE (value) == COMPLEX_CST)
892
      && TREE_CONSTANT_OVERFLOW (value) && pedantic)
893
    pedwarn ("overflow in constant expression");
894
}
895
 
896
/* Print a warning if an expression had overflow in folding.
897
   Invoke this function on every expression that
898
   (1) appears in the source code, and
899
   (2) might be a constant expression that overflowed, and
900
   (3) is not already checked by convert_and_check;
901
   however, do not invoke this function on operands of explicit casts.  */
902
 
903
void
904
overflow_warning (tree value)
905
{
906
  if ((TREE_CODE (value) == INTEGER_CST
907
       || (TREE_CODE (value) == COMPLEX_CST
908
           && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
909
      && TREE_OVERFLOW (value))
910
    {
911
      TREE_OVERFLOW (value) = 0;
912
      if (skip_evaluation == 0)
913
        warning (0, "integer overflow in expression");
914
    }
915
  else if ((TREE_CODE (value) == REAL_CST
916
            || (TREE_CODE (value) == COMPLEX_CST
917
                && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
918
           && TREE_OVERFLOW (value))
919
    {
920
      TREE_OVERFLOW (value) = 0;
921
      if (skip_evaluation == 0)
922
        warning (0, "floating point overflow in expression");
923
    }
924
  else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
925
    {
926
      TREE_OVERFLOW (value) = 0;
927
      if (skip_evaluation == 0)
928
        warning (0, "vector overflow in expression");
929
    }
930
}
931
 
932
/* Print a warning if a large constant is truncated to unsigned,
933
   or if -Wconversion is used and a constant < 0 is converted to unsigned.
934
   Invoke this function on every expression that might be implicitly
935
   converted to an unsigned type.  */
936
 
937
void
938
unsigned_conversion_warning (tree result, tree operand)
939
{
940
  tree type = TREE_TYPE (result);
941
 
942
  if (TREE_CODE (operand) == INTEGER_CST
943
      && TREE_CODE (type) == INTEGER_TYPE
944
      && TYPE_UNSIGNED (type)
945
      && skip_evaluation == 0
946
      && !int_fits_type_p (operand, type))
947
    {
948
      if (!int_fits_type_p (operand, c_common_signed_type (type)))
949
        /* This detects cases like converting -129 or 256 to unsigned char.  */
950
        warning (0, "large integer implicitly truncated to unsigned type");
951
      else
952
        warning (OPT_Wconversion,
953
                 "negative integer implicitly converted to unsigned type");
954
    }
955
}
956
 
957
/* Print a warning about casts that might indicate violation
958
   of strict aliasing rules if -Wstrict-aliasing is used and
959
   strict aliasing mode is in effect. otype is the original
960
   TREE_TYPE of expr, and type the type we're casting to. */
961
 
962
void
963
strict_aliasing_warning(tree otype, tree type, tree expr)
964
{
965
  if (flag_strict_aliasing && warn_strict_aliasing
966
      && POINTER_TYPE_P (type) && POINTER_TYPE_P (otype)
967
      && TREE_CODE (expr) == ADDR_EXPR
968
      && (DECL_P (TREE_OPERAND (expr, 0))
969
          || handled_component_p (TREE_OPERAND (expr, 0)))
970
      && !VOID_TYPE_P (TREE_TYPE (type)))
971
    {
972
      /* Casting the address of an object to non void pointer. Warn
973
         if the cast breaks type based aliasing.  */
974
      if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
975
        warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
976
                 "might break strict-aliasing rules");
977
      else
978
        {
979
          HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
980
          HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
981
 
982
          if (!alias_sets_conflict_p (set1, set2))
983
            warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
984
                     "pointer will break strict-aliasing rules");
985
          else if (warn_strict_aliasing > 1
986
                  && !alias_sets_might_conflict_p (set1, set2))
987
            warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
988
                     "pointer might break strict-aliasing rules");
989
        }
990
    }
991
}
992
 
993
/* Nonzero if constant C has a value that is permissible
994
   for type TYPE (an INTEGER_TYPE).  */
995
 
996
static int
997
constant_fits_type_p (tree c, tree type)
998
{
999
  if (TREE_CODE (c) == INTEGER_CST)
1000
    return int_fits_type_p (c, type);
1001
 
1002
  c = convert (type, c);
1003
  return !TREE_OVERFLOW (c);
1004
}
1005
 
1006
/* Nonzero if vector types T1 and T2 can be converted to each other
1007
   without an explicit cast.  */
1008
int
1009
vector_types_convertible_p (tree t1, tree t2)
1010
{
1011
  return targetm.vector_opaque_p (t1)
1012
         || targetm.vector_opaque_p (t2)
1013
         || (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1014
             && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1015
                 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1016
             && INTEGRAL_TYPE_P (TREE_TYPE (t1))
1017
                == INTEGRAL_TYPE_P (TREE_TYPE (t2)));
1018
}
1019
 
1020
/* Convert EXPR to TYPE, warning about conversion problems with constants.
1021
   Invoke this function on every expression that is converted implicitly,
1022
   i.e. because of language rules and not because of an explicit cast.  */
1023
 
1024
tree
1025
convert_and_check (tree type, tree expr)
1026
{
1027
  tree t = convert (type, expr);
1028
  if (TREE_CODE (t) == INTEGER_CST)
1029
    {
1030
      if (TREE_OVERFLOW (t))
1031
        {
1032
          TREE_OVERFLOW (t) = 0;
1033
 
1034
          /* Do not diagnose overflow in a constant expression merely
1035
             because a conversion overflowed.  */
1036
          TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
1037
 
1038
          /* No warning for converting 0x80000000 to int.  */
1039
          if (!(TYPE_UNSIGNED (type) < TYPE_UNSIGNED (TREE_TYPE (expr))
1040
                && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1041
                && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
1042
            /* If EXPR fits in the unsigned version of TYPE,
1043
               don't warn unless pedantic.  */
1044
            if ((pedantic
1045
                 || TYPE_UNSIGNED (type)
1046
                 || !constant_fits_type_p (expr,
1047
                                           c_common_unsigned_type (type)))
1048
                && skip_evaluation == 0)
1049
              warning (0, "overflow in implicit constant conversion");
1050
        }
1051
      else
1052
        unsigned_conversion_warning (t, expr);
1053
    }
1054
  return t;
1055
}
1056
 
1057
/* A node in a list that describes references to variables (EXPR), which are
1058
   either read accesses if WRITER is zero, or write accesses, in which case
1059
   WRITER is the parent of EXPR.  */
1060
struct tlist
1061
{
1062
  struct tlist *next;
1063
  tree expr, writer;
1064
};
1065
 
1066
/* Used to implement a cache the results of a call to verify_tree.  We only
1067
   use this for SAVE_EXPRs.  */
1068
struct tlist_cache
1069
{
1070
  struct tlist_cache *next;
1071
  struct tlist *cache_before_sp;
1072
  struct tlist *cache_after_sp;
1073
  tree expr;
1074
};
1075
 
1076
/* Obstack to use when allocating tlist structures, and corresponding
1077
   firstobj.  */
1078
static struct obstack tlist_obstack;
1079
static char *tlist_firstobj = 0;
1080
 
1081
/* Keep track of the identifiers we've warned about, so we can avoid duplicate
1082
   warnings.  */
1083
static struct tlist *warned_ids;
1084
/* SAVE_EXPRs need special treatment.  We process them only once and then
1085
   cache the results.  */
1086
static struct tlist_cache *save_expr_cache;
1087
 
1088
static void add_tlist (struct tlist **, struct tlist *, tree, int);
1089
static void merge_tlist (struct tlist **, struct tlist *, int);
1090
static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1091
static int warning_candidate_p (tree);
1092
static void warn_for_collisions (struct tlist *);
1093
static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1094
static struct tlist *new_tlist (struct tlist *, tree, tree);
1095
 
1096
/* Create a new struct tlist and fill in its fields.  */
1097
static struct tlist *
1098
new_tlist (struct tlist *next, tree t, tree writer)
1099
{
1100
  struct tlist *l;
1101
  l = XOBNEW (&tlist_obstack, struct tlist);
1102
  l->next = next;
1103
  l->expr = t;
1104
  l->writer = writer;
1105
  return l;
1106
}
1107
 
1108
/* Add duplicates of the nodes found in ADD to the list *TO.  If EXCLUDE_WRITER
1109
   is nonnull, we ignore any node we find which has a writer equal to it.  */
1110
 
1111
static void
1112
add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1113
{
1114
  while (add)
1115
    {
1116
      struct tlist *next = add->next;
1117
      if (!copy)
1118
        add->next = *to;
1119
      if (!exclude_writer || add->writer != exclude_writer)
1120
        *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1121
      add = next;
1122
    }
1123
}
1124
 
1125
/* Merge the nodes of ADD into TO.  This merging process is done so that for
1126
   each variable that already exists in TO, no new node is added; however if
1127
   there is a write access recorded in ADD, and an occurrence on TO is only
1128
   a read access, then the occurrence in TO will be modified to record the
1129
   write.  */
1130
 
1131
static void
1132
merge_tlist (struct tlist **to, struct tlist *add, int copy)
1133
{
1134
  struct tlist **end = to;
1135
 
1136
  while (*end)
1137
    end = &(*end)->next;
1138
 
1139
  while (add)
1140
    {
1141
      int found = 0;
1142
      struct tlist *tmp2;
1143
      struct tlist *next = add->next;
1144
 
1145
      for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1146
        if (tmp2->expr == add->expr)
1147
          {
1148
            found = 1;
1149
            if (!tmp2->writer)
1150
              tmp2->writer = add->writer;
1151
          }
1152
      if (!found)
1153
        {
1154
          *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1155
          end = &(*end)->next;
1156
          *end = 0;
1157
        }
1158
      add = next;
1159
    }
1160
}
1161
 
1162
/* WRITTEN is a variable, WRITER is its parent.  Warn if any of the variable
1163
   references in list LIST conflict with it, excluding reads if ONLY writers
1164
   is nonzero.  */
1165
 
1166
static void
1167
warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1168
                       int only_writes)
1169
{
1170
  struct tlist *tmp;
1171
 
1172
  /* Avoid duplicate warnings.  */
1173
  for (tmp = warned_ids; tmp; tmp = tmp->next)
1174
    if (tmp->expr == written)
1175
      return;
1176
 
1177
  while (list)
1178
    {
1179
      if (list->expr == written
1180
          && list->writer != writer
1181
          && (!only_writes || list->writer)
1182
          && DECL_NAME (list->expr))
1183
        {
1184
          warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1185
          warning (0, "operation on %qE may be undefined", list->expr);
1186
        }
1187
      list = list->next;
1188
    }
1189
}
1190
 
1191
/* Given a list LIST of references to variables, find whether any of these
1192
   can cause conflicts due to missing sequence points.  */
1193
 
1194
static void
1195
warn_for_collisions (struct tlist *list)
1196
{
1197
  struct tlist *tmp;
1198
 
1199
  for (tmp = list; tmp; tmp = tmp->next)
1200
    {
1201
      if (tmp->writer)
1202
        warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1203
    }
1204
}
1205
 
1206
/* Return nonzero if X is a tree that can be verified by the sequence point
1207
   warnings.  */
1208
static int
1209
warning_candidate_p (tree x)
1210
{
1211
  return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1212
}
1213
 
1214
/* Walk the tree X, and record accesses to variables.  If X is written by the
1215
   parent tree, WRITER is the parent.
1216
   We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP.  If this
1217
   expression or its only operand forces a sequence point, then everything up
1218
   to the sequence point is stored in PBEFORE_SP.  Everything else gets stored
1219
   in PNO_SP.
1220
   Once we return, we will have emitted warnings if any subexpression before
1221
   such a sequence point could be undefined.  On a higher level, however, the
1222
   sequence point may not be relevant, and we'll merge the two lists.
1223
 
1224
   Example: (b++, a) + b;
1225
   The call that processes the COMPOUND_EXPR will store the increment of B
1226
   in PBEFORE_SP, and the use of A in PNO_SP.  The higher-level call that
1227
   processes the PLUS_EXPR will need to merge the two lists so that
1228
   eventually, all accesses end up on the same list (and we'll warn about the
1229
   unordered subexpressions b++ and b.
1230
 
1231
   A note on merging.  If we modify the former example so that our expression
1232
   becomes
1233
     (b++, b) + a
1234
   care must be taken not simply to add all three expressions into the final
1235
   PNO_SP list.  The function merge_tlist takes care of that by merging the
1236
   before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1237
   way, so that no more than one access to B is recorded.  */
1238
 
1239
static void
1240
verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1241
             tree writer)
1242
{
1243
  struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1244
  enum tree_code code;
1245
  enum tree_code_class cl;
1246
 
1247
  /* X may be NULL if it is the operand of an empty statement expression
1248
     ({ }).  */
1249
  if (x == NULL)
1250
    return;
1251
 
1252
 restart:
1253
  code = TREE_CODE (x);
1254
  cl = TREE_CODE_CLASS (code);
1255
 
1256
  if (warning_candidate_p (x))
1257
    {
1258
      *pno_sp = new_tlist (*pno_sp, x, writer);
1259
      return;
1260
    }
1261
 
1262
  switch (code)
1263
    {
1264
    case CONSTRUCTOR:
1265
      return;
1266
 
1267
    case COMPOUND_EXPR:
1268
    case TRUTH_ANDIF_EXPR:
1269
    case TRUTH_ORIF_EXPR:
1270
      tmp_before = tmp_nosp = tmp_list3 = 0;
1271
      verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1272
      warn_for_collisions (tmp_nosp);
1273
      merge_tlist (pbefore_sp, tmp_before, 0);
1274
      merge_tlist (pbefore_sp, tmp_nosp, 0);
1275
      verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1276
      merge_tlist (pbefore_sp, tmp_list3, 0);
1277
      return;
1278
 
1279
    case COND_EXPR:
1280
      tmp_before = tmp_list2 = 0;
1281
      verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1282
      warn_for_collisions (tmp_list2);
1283
      merge_tlist (pbefore_sp, tmp_before, 0);
1284
      merge_tlist (pbefore_sp, tmp_list2, 1);
1285
 
1286
      tmp_list3 = tmp_nosp = 0;
1287
      verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1288
      warn_for_collisions (tmp_nosp);
1289
      merge_tlist (pbefore_sp, tmp_list3, 0);
1290
 
1291
      tmp_list3 = tmp_list2 = 0;
1292
      verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1293
      warn_for_collisions (tmp_list2);
1294
      merge_tlist (pbefore_sp, tmp_list3, 0);
1295
      /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1296
         two first, to avoid warning for (a ? b++ : b++).  */
1297
      merge_tlist (&tmp_nosp, tmp_list2, 0);
1298
      add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1299
      return;
1300
 
1301
    case PREDECREMENT_EXPR:
1302
    case PREINCREMENT_EXPR:
1303
    case POSTDECREMENT_EXPR:
1304
    case POSTINCREMENT_EXPR:
1305
      verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1306
      return;
1307
 
1308
    case MODIFY_EXPR:
1309
      tmp_before = tmp_nosp = tmp_list3 = 0;
1310
      verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1311
      verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1312
      /* Expressions inside the LHS are not ordered wrt. the sequence points
1313
         in the RHS.  Example:
1314
           *a = (a++, 2)
1315
         Despite the fact that the modification of "a" is in the before_sp
1316
         list (tmp_before), it conflicts with the use of "a" in the LHS.
1317
         We can handle this by adding the contents of tmp_list3
1318
         to those of tmp_before, and redoing the collision warnings for that
1319
         list.  */
1320
      add_tlist (&tmp_before, tmp_list3, x, 1);
1321
      warn_for_collisions (tmp_before);
1322
      /* Exclude the LHS itself here; we first have to merge it into the
1323
         tmp_nosp list.  This is done to avoid warning for "a = a"; if we
1324
         didn't exclude the LHS, we'd get it twice, once as a read and once
1325
         as a write.  */
1326
      add_tlist (pno_sp, tmp_list3, x, 0);
1327
      warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1328
 
1329
      merge_tlist (pbefore_sp, tmp_before, 0);
1330
      if (warning_candidate_p (TREE_OPERAND (x, 0)))
1331
        merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1332
      add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1333
      return;
1334
 
1335
    case CALL_EXPR:
1336
      /* We need to warn about conflicts among arguments and conflicts between
1337
         args and the function address.  Side effects of the function address,
1338
         however, are not ordered by the sequence point of the call.  */
1339
      tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1340
      verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1341
      if (TREE_OPERAND (x, 1))
1342
        verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1343
      merge_tlist (&tmp_list3, tmp_list2, 0);
1344
      add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1345
      add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1346
      warn_for_collisions (tmp_before);
1347
      add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1348
      return;
1349
 
1350
    case TREE_LIST:
1351
      /* Scan all the list, e.g. indices of multi dimensional array.  */
1352
      while (x)
1353
        {
1354
          tmp_before = tmp_nosp = 0;
1355
          verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1356
          merge_tlist (&tmp_nosp, tmp_before, 0);
1357
          add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1358
          x = TREE_CHAIN (x);
1359
        }
1360
      return;
1361
 
1362
    case SAVE_EXPR:
1363
      {
1364
        struct tlist_cache *t;
1365
        for (t = save_expr_cache; t; t = t->next)
1366
          if (t->expr == x)
1367
            break;
1368
 
1369
        if (!t)
1370
          {
1371
            t = XOBNEW (&tlist_obstack, struct tlist_cache);
1372
            t->next = save_expr_cache;
1373
            t->expr = x;
1374
            save_expr_cache = t;
1375
 
1376
            tmp_before = tmp_nosp = 0;
1377
            verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1378
            warn_for_collisions (tmp_nosp);
1379
 
1380
            tmp_list3 = 0;
1381
            while (tmp_nosp)
1382
              {
1383
                struct tlist *t = tmp_nosp;
1384
                tmp_nosp = t->next;
1385
                merge_tlist (&tmp_list3, t, 0);
1386
              }
1387
            t->cache_before_sp = tmp_before;
1388
            t->cache_after_sp = tmp_list3;
1389
          }
1390
        merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1391
        add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1392
        return;
1393
      }
1394
 
1395
    default:
1396
      /* For other expressions, simply recurse on their operands.
1397
         Manual tail recursion for unary expressions.
1398
         Other non-expressions need not be processed.  */
1399
      if (cl == tcc_unary)
1400
        {
1401
          x = TREE_OPERAND (x, 0);
1402
          writer = 0;
1403
          goto restart;
1404
        }
1405
      else if (IS_EXPR_CODE_CLASS (cl))
1406
        {
1407
          int lp;
1408
          int max = TREE_CODE_LENGTH (TREE_CODE (x));
1409
          for (lp = 0; lp < max; lp++)
1410
            {
1411
              tmp_before = tmp_nosp = 0;
1412
              verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1413
              merge_tlist (&tmp_nosp, tmp_before, 0);
1414
              add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1415
            }
1416
        }
1417
      return;
1418
    }
1419
}
1420
 
1421
/* Try to warn for undefined behavior in EXPR due to missing sequence
1422
   points.  */
1423
 
1424
void
1425
verify_sequence_points (tree expr)
1426
{
1427
  struct tlist *before_sp = 0, *after_sp = 0;
1428
 
1429
  warned_ids = 0;
1430
  save_expr_cache = 0;
1431
  if (tlist_firstobj == 0)
1432
    {
1433
      gcc_obstack_init (&tlist_obstack);
1434
      tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1435
    }
1436
 
1437
  verify_tree (expr, &before_sp, &after_sp, 0);
1438
  warn_for_collisions (after_sp);
1439
  obstack_free (&tlist_obstack, tlist_firstobj);
1440
}
1441
 
1442
/* Validate the expression after `case' and apply default promotions.  */
1443
 
1444
static tree
1445
check_case_value (tree value)
1446
{
1447
  if (value == NULL_TREE)
1448
    return value;
1449
 
1450
  /* ??? Can we ever get nops here for a valid case value?  We
1451
     shouldn't for C.  */
1452
  STRIP_TYPE_NOPS (value);
1453
  /* In C++, the following is allowed:
1454
 
1455
       const int i = 3;
1456
       switch (...) { case i: ... }
1457
 
1458
     So, we try to reduce the VALUE to a constant that way.  */
1459
  if (c_dialect_cxx ())
1460
    {
1461
      value = decl_constant_value (value);
1462
      STRIP_TYPE_NOPS (value);
1463
      value = fold (value);
1464
    }
1465
 
1466
  if (TREE_CODE (value) == INTEGER_CST)
1467
    /* Promote char or short to int.  */
1468
    value = perform_integral_promotions (value);
1469
  else if (value != error_mark_node)
1470
    {
1471
      error ("case label does not reduce to an integer constant");
1472
      value = error_mark_node;
1473
    }
1474
 
1475
  constant_expression_warning (value);
1476
 
1477
  return value;
1478
}
1479
 
1480
/* See if the case values LOW and HIGH are in the range of the original
1481
   type (i.e. before the default conversion to int) of the switch testing
1482
   expression.
1483
   TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1484
   the type before promoting it.  CASE_LOW_P is a pointer to the lower
1485
   bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1486
   if the case is not a case range.
1487
   The caller has to make sure that we are not called with NULL for
1488
   CASE_LOW_P (i.e. the default case).
1489
   Returns true if the case label is in range of ORIG_TYPE (saturated or
1490
   untouched) or false if the label is out of range.  */
1491
 
1492
static bool
1493
check_case_bounds (tree type, tree orig_type,
1494
                   tree *case_low_p, tree *case_high_p)
1495
{
1496
  tree min_value, max_value;
1497
  tree case_low = *case_low_p;
1498
  tree case_high = case_high_p ? *case_high_p : case_low;
1499
 
1500
  /* If there was a problem with the original type, do nothing.  */
1501
  if (orig_type == error_mark_node)
1502
    return true;
1503
 
1504
  min_value = TYPE_MIN_VALUE (orig_type);
1505
  max_value = TYPE_MAX_VALUE (orig_type);
1506
 
1507
  /* Case label is less than minimum for type.  */
1508
  if (tree_int_cst_compare (case_low, min_value) < 0
1509
      && tree_int_cst_compare (case_high, min_value) < 0)
1510
    {
1511
      warning (0, "case label value is less than minimum value for type");
1512
      return false;
1513
    }
1514
 
1515
  /* Case value is greater than maximum for type.  */
1516
  if (tree_int_cst_compare (case_low, max_value) > 0
1517
      && tree_int_cst_compare (case_high, max_value) > 0)
1518
    {
1519
      warning (0, "case label value exceeds maximum value for type");
1520
      return false;
1521
    }
1522
 
1523
  /* Saturate lower case label value to minimum.  */
1524
  if (tree_int_cst_compare (case_high, min_value) >= 0
1525
      && tree_int_cst_compare (case_low, min_value) < 0)
1526
    {
1527
      warning (0, "lower value in case label range"
1528
               " less than minimum value for type");
1529
      case_low = min_value;
1530
    }
1531
 
1532
  /* Saturate upper case label value to maximum.  */
1533
  if (tree_int_cst_compare (case_low, max_value) <= 0
1534
      && tree_int_cst_compare (case_high, max_value) > 0)
1535
    {
1536
      warning (0, "upper value in case label range"
1537
               " exceeds maximum value for type");
1538
      case_high = max_value;
1539
    }
1540
 
1541
  if (*case_low_p != case_low)
1542
    *case_low_p = convert (type, case_low);
1543
  if (case_high_p && *case_high_p != case_high)
1544
    *case_high_p = convert (type, case_high);
1545
 
1546
  return true;
1547
}
1548
 
1549
/* Return an integer type with BITS bits of precision,
1550
   that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
1551
 
1552
tree
1553
c_common_type_for_size (unsigned int bits, int unsignedp)
1554
{
1555
  if (bits == TYPE_PRECISION (integer_type_node))
1556
    return unsignedp ? unsigned_type_node : integer_type_node;
1557
 
1558
  if (bits == TYPE_PRECISION (signed_char_type_node))
1559
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1560
 
1561
  if (bits == TYPE_PRECISION (short_integer_type_node))
1562
    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1563
 
1564
  if (bits == TYPE_PRECISION (long_integer_type_node))
1565
    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1566
 
1567
  if (bits == TYPE_PRECISION (long_long_integer_type_node))
1568
    return (unsignedp ? long_long_unsigned_type_node
1569
            : long_long_integer_type_node);
1570
 
1571
  if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1572
    return (unsignedp ? widest_unsigned_literal_type_node
1573
            : widest_integer_literal_type_node);
1574
 
1575
  if (bits <= TYPE_PRECISION (intQI_type_node))
1576
    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1577
 
1578
  if (bits <= TYPE_PRECISION (intHI_type_node))
1579
    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1580
 
1581
  if (bits <= TYPE_PRECISION (intSI_type_node))
1582
    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1583
 
1584
  if (bits <= TYPE_PRECISION (intDI_type_node))
1585
    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1586
 
1587
  return 0;
1588
}
1589
 
1590
/* Used for communication between c_common_type_for_mode and
1591
   c_register_builtin_type.  */
1592
static GTY(()) tree registered_builtin_types;
1593
 
1594
/* Return a data type that has machine mode MODE.
1595
   If the mode is an integer,
1596
   then UNSIGNEDP selects between signed and unsigned types.  */
1597
 
1598
tree
1599
c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1600
{
1601
  tree t;
1602
 
1603
  if (mode == TYPE_MODE (integer_type_node))
1604
    return unsignedp ? unsigned_type_node : integer_type_node;
1605
 
1606
  if (mode == TYPE_MODE (signed_char_type_node))
1607
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1608
 
1609
  if (mode == TYPE_MODE (short_integer_type_node))
1610
    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1611
 
1612
  if (mode == TYPE_MODE (long_integer_type_node))
1613
    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1614
 
1615
  if (mode == TYPE_MODE (long_long_integer_type_node))
1616
    return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1617
 
1618
  if (mode == TYPE_MODE (widest_integer_literal_type_node))
1619
    return unsignedp ? widest_unsigned_literal_type_node
1620
                     : widest_integer_literal_type_node;
1621
 
1622
  if (mode == QImode)
1623
    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1624
 
1625
  if (mode == HImode)
1626
    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1627
 
1628
  if (mode == SImode)
1629
    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1630
 
1631
  if (mode == DImode)
1632
    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1633
 
1634
#if HOST_BITS_PER_WIDE_INT >= 64
1635
  if (mode == TYPE_MODE (intTI_type_node))
1636
    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1637
#endif
1638
 
1639
  if (mode == TYPE_MODE (float_type_node))
1640
    return float_type_node;
1641
 
1642
  if (mode == TYPE_MODE (double_type_node))
1643
    return double_type_node;
1644
 
1645
  if (mode == TYPE_MODE (long_double_type_node))
1646
    return long_double_type_node;
1647
 
1648
  if (mode == TYPE_MODE (void_type_node))
1649
    return void_type_node;
1650
 
1651
  if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1652
    return (unsignedp
1653
            ? make_unsigned_type (GET_MODE_PRECISION (mode))
1654
            : make_signed_type (GET_MODE_PRECISION (mode)));
1655
 
1656
  if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1657
    return (unsignedp
1658
            ? make_unsigned_type (GET_MODE_PRECISION (mode))
1659
            : make_signed_type (GET_MODE_PRECISION (mode)));
1660
 
1661
  if (COMPLEX_MODE_P (mode))
1662
    {
1663
      enum machine_mode inner_mode;
1664
      tree inner_type;
1665
 
1666
      if (mode == TYPE_MODE (complex_float_type_node))
1667
        return complex_float_type_node;
1668
      if (mode == TYPE_MODE (complex_double_type_node))
1669
        return complex_double_type_node;
1670
      if (mode == TYPE_MODE (complex_long_double_type_node))
1671
        return complex_long_double_type_node;
1672
 
1673
      if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
1674
        return complex_integer_type_node;
1675
 
1676
      inner_mode = GET_MODE_INNER (mode);
1677
      inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1678
      if (inner_type != NULL_TREE)
1679
        return build_complex_type (inner_type);
1680
    }
1681
  else if (VECTOR_MODE_P (mode))
1682
    {
1683
      enum machine_mode inner_mode = GET_MODE_INNER (mode);
1684
      tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1685
      if (inner_type != NULL_TREE)
1686
        return build_vector_type_for_mode (inner_type, mode);
1687
    }
1688
 
1689
  for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1690
    if (TYPE_MODE (TREE_VALUE (t)) == mode)
1691
      return TREE_VALUE (t);
1692
 
1693
  return 0;
1694
}
1695
 
1696
/* Return an unsigned type the same as TYPE in other respects.  */
1697
tree
1698
c_common_unsigned_type (tree type)
1699
{
1700
  tree type1 = TYPE_MAIN_VARIANT (type);
1701
  if (type1 == signed_char_type_node || type1 == char_type_node)
1702
    return unsigned_char_type_node;
1703
  if (type1 == integer_type_node)
1704
    return unsigned_type_node;
1705
  if (type1 == short_integer_type_node)
1706
    return short_unsigned_type_node;
1707
  if (type1 == long_integer_type_node)
1708
    return long_unsigned_type_node;
1709
  if (type1 == long_long_integer_type_node)
1710
    return long_long_unsigned_type_node;
1711
  if (type1 == widest_integer_literal_type_node)
1712
    return widest_unsigned_literal_type_node;
1713
#if HOST_BITS_PER_WIDE_INT >= 64
1714
  if (type1 == intTI_type_node)
1715
    return unsigned_intTI_type_node;
1716
#endif
1717
  if (type1 == intDI_type_node)
1718
    return unsigned_intDI_type_node;
1719
  if (type1 == intSI_type_node)
1720
    return unsigned_intSI_type_node;
1721
  if (type1 == intHI_type_node)
1722
    return unsigned_intHI_type_node;
1723
  if (type1 == intQI_type_node)
1724
    return unsigned_intQI_type_node;
1725
 
1726
  return c_common_signed_or_unsigned_type (1, type);
1727
}
1728
 
1729
/* Return a signed type the same as TYPE in other respects.  */
1730
 
1731
tree
1732
c_common_signed_type (tree type)
1733
{
1734
  tree type1 = TYPE_MAIN_VARIANT (type);
1735
  if (type1 == unsigned_char_type_node || type1 == char_type_node)
1736
    return signed_char_type_node;
1737
  if (type1 == unsigned_type_node)
1738
    return integer_type_node;
1739
  if (type1 == short_unsigned_type_node)
1740
    return short_integer_type_node;
1741
  if (type1 == long_unsigned_type_node)
1742
    return long_integer_type_node;
1743
  if (type1 == long_long_unsigned_type_node)
1744
    return long_long_integer_type_node;
1745
  if (type1 == widest_unsigned_literal_type_node)
1746
    return widest_integer_literal_type_node;
1747
#if HOST_BITS_PER_WIDE_INT >= 64
1748
  if (type1 == unsigned_intTI_type_node)
1749
    return intTI_type_node;
1750
#endif
1751
  if (type1 == unsigned_intDI_type_node)
1752
    return intDI_type_node;
1753
  if (type1 == unsigned_intSI_type_node)
1754
    return intSI_type_node;
1755
  if (type1 == unsigned_intHI_type_node)
1756
    return intHI_type_node;
1757
  if (type1 == unsigned_intQI_type_node)
1758
    return intQI_type_node;
1759
 
1760
  return c_common_signed_or_unsigned_type (0, type);
1761
}
1762
 
1763
/* Return a type the same as TYPE except unsigned or
1764
   signed according to UNSIGNEDP.  */
1765
 
1766
tree
1767
c_common_signed_or_unsigned_type (int unsignedp, tree type)
1768
{
1769
  if (!INTEGRAL_TYPE_P (type)
1770
      || TYPE_UNSIGNED (type) == unsignedp)
1771
    return type;
1772
 
1773
  /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
1774
     the precision; they have precision set to match their range, but
1775
     may use a wider mode to match an ABI.  If we change modes, we may
1776
     wind up with bad conversions.  For INTEGER_TYPEs in C, must check
1777
     the precision as well, so as to yield correct results for
1778
     bit-field types.  C++ does not have these separate bit-field
1779
     types, and producing a signed or unsigned variant of an
1780
     ENUMERAL_TYPE may cause other problems as well.  */
1781
 
1782
#define TYPE_OK(node)                                                       \
1783
  (TYPE_MODE (type) == TYPE_MODE (node)                                     \
1784
   && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
1785
  if (TYPE_OK (signed_char_type_node))
1786
    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1787
  if (TYPE_OK (integer_type_node))
1788
    return unsignedp ? unsigned_type_node : integer_type_node;
1789
  if (TYPE_OK (short_integer_type_node))
1790
    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1791
  if (TYPE_OK (long_integer_type_node))
1792
    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1793
  if (TYPE_OK (long_long_integer_type_node))
1794
    return (unsignedp ? long_long_unsigned_type_node
1795
            : long_long_integer_type_node);
1796
  if (TYPE_OK (widest_integer_literal_type_node))
1797
    return (unsignedp ? widest_unsigned_literal_type_node
1798
            : widest_integer_literal_type_node);
1799
 
1800
#if HOST_BITS_PER_WIDE_INT >= 64
1801
  if (TYPE_OK (intTI_type_node))
1802
    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1803
#endif
1804
  if (TYPE_OK (intDI_type_node))
1805
    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1806
  if (TYPE_OK (intSI_type_node))
1807
    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1808
  if (TYPE_OK (intHI_type_node))
1809
    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1810
  if (TYPE_OK (intQI_type_node))
1811
    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1812
#undef TYPE_OK
1813
 
1814
  if (c_dialect_cxx ())
1815
    return type;
1816
  else
1817
    return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
1818
}
1819
 
1820
/* The C version of the register_builtin_type langhook.  */
1821
 
1822
void
1823
c_register_builtin_type (tree type, const char* name)
1824
{
1825
  tree decl;
1826
 
1827
  decl = build_decl (TYPE_DECL, get_identifier (name), type);
1828
  DECL_ARTIFICIAL (decl) = 1;
1829
  if (!TYPE_NAME (type))
1830
    TYPE_NAME (type) = decl;
1831
  pushdecl (decl);
1832
 
1833
  registered_builtin_types = tree_cons (0, type, registered_builtin_types);
1834
}
1835
 
1836
 
1837
/* Return the minimum number of bits needed to represent VALUE in a
1838
   signed or unsigned type, UNSIGNEDP says which.  */
1839
 
1840
unsigned int
1841
min_precision (tree value, int unsignedp)
1842
{
1843
  int log;
1844
 
1845
  /* If the value is negative, compute its negative minus 1.  The latter
1846
     adjustment is because the absolute value of the largest negative value
1847
     is one larger than the largest positive value.  This is equivalent to
1848
     a bit-wise negation, so use that operation instead.  */
1849
 
1850
  if (tree_int_cst_sgn (value) < 0)
1851
    value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
1852
 
1853
  /* Return the number of bits needed, taking into account the fact
1854
     that we need one more bit for a signed than unsigned type.  */
1855
 
1856
  if (integer_zerop (value))
1857
    log = 0;
1858
  else
1859
    log = tree_floor_log2 (value);
1860
 
1861
  return log + 1 + !unsignedp;
1862
}
1863
 
1864
/* Print an error message for invalid operands to arith operation
1865
   CODE.  NOP_EXPR is used as a special case (see
1866
   c_common_truthvalue_conversion).  */
1867
 
1868
void
1869
binary_op_error (enum tree_code code)
1870
{
1871
  const char *opname;
1872
 
1873
  switch (code)
1874
    {
1875
    case NOP_EXPR:
1876
      error ("invalid truth-value expression");
1877
      return;
1878
 
1879
    case PLUS_EXPR:
1880
      opname = "+"; break;
1881
    case MINUS_EXPR:
1882
      opname = "-"; break;
1883
    case MULT_EXPR:
1884
      opname = "*"; break;
1885
    case MAX_EXPR:
1886
      opname = "max"; break;
1887
    case MIN_EXPR:
1888
      opname = "min"; break;
1889
    case EQ_EXPR:
1890
      opname = "=="; break;
1891
    case NE_EXPR:
1892
      opname = "!="; break;
1893
    case LE_EXPR:
1894
      opname = "<="; break;
1895
    case GE_EXPR:
1896
      opname = ">="; break;
1897
    case LT_EXPR:
1898
      opname = "<"; break;
1899
    case GT_EXPR:
1900
      opname = ">"; break;
1901
    case LSHIFT_EXPR:
1902
      opname = "<<"; break;
1903
    case RSHIFT_EXPR:
1904
      opname = ">>"; break;
1905
    case TRUNC_MOD_EXPR:
1906
    case FLOOR_MOD_EXPR:
1907
      opname = "%"; break;
1908
    case TRUNC_DIV_EXPR:
1909
    case FLOOR_DIV_EXPR:
1910
      opname = "/"; break;
1911
    case BIT_AND_EXPR:
1912
      opname = "&"; break;
1913
    case BIT_IOR_EXPR:
1914
      opname = "|"; break;
1915
    case TRUTH_ANDIF_EXPR:
1916
      opname = "&&"; break;
1917
    case TRUTH_ORIF_EXPR:
1918
      opname = "||"; break;
1919
    case BIT_XOR_EXPR:
1920
      opname = "^"; break;
1921
    default:
1922
      gcc_unreachable ();
1923
    }
1924
  error ("invalid operands to binary %s", opname);
1925
}
1926
 
1927
/* Subroutine of build_binary_op, used for comparison operations.
1928
   See if the operands have both been converted from subword integer types
1929
   and, if so, perhaps change them both back to their original type.
1930
   This function is also responsible for converting the two operands
1931
   to the proper common type for comparison.
1932
 
1933
   The arguments of this function are all pointers to local variables
1934
   of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1935
   RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1936
 
1937
   If this function returns nonzero, it means that the comparison has
1938
   a constant value.  What this function returns is an expression for
1939
   that value.  */
1940
 
1941
tree
1942
shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
1943
                 enum tree_code *rescode_ptr)
1944
{
1945
  tree type;
1946
  tree op0 = *op0_ptr;
1947
  tree op1 = *op1_ptr;
1948
  int unsignedp0, unsignedp1;
1949
  int real1, real2;
1950
  tree primop0, primop1;
1951
  enum tree_code code = *rescode_ptr;
1952
 
1953
  /* Throw away any conversions to wider types
1954
     already present in the operands.  */
1955
 
1956
  primop0 = get_narrower (op0, &unsignedp0);
1957
  primop1 = get_narrower (op1, &unsignedp1);
1958
 
1959
  /* Handle the case that OP0 does not *contain* a conversion
1960
     but it *requires* conversion to FINAL_TYPE.  */
1961
 
1962
  if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
1963
    unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
1964
  if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
1965
    unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
1966
 
1967
  /* If one of the operands must be floated, we cannot optimize.  */
1968
  real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
1969
  real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
1970
 
1971
  /* If first arg is constant, swap the args (changing operation
1972
     so value is preserved), for canonicalization.  Don't do this if
1973
     the second arg is 0.  */
1974
 
1975
  if (TREE_CONSTANT (primop0)
1976
      && !integer_zerop (primop1) && !real_zerop (primop1))
1977
    {
1978
      tree tem = primop0;
1979
      int temi = unsignedp0;
1980
      primop0 = primop1;
1981
      primop1 = tem;
1982
      tem = op0;
1983
      op0 = op1;
1984
      op1 = tem;
1985
      *op0_ptr = op0;
1986
      *op1_ptr = op1;
1987
      unsignedp0 = unsignedp1;
1988
      unsignedp1 = temi;
1989
      temi = real1;
1990
      real1 = real2;
1991
      real2 = temi;
1992
 
1993
      switch (code)
1994
        {
1995
        case LT_EXPR:
1996
          code = GT_EXPR;
1997
          break;
1998
        case GT_EXPR:
1999
          code = LT_EXPR;
2000
          break;
2001
        case LE_EXPR:
2002
          code = GE_EXPR;
2003
          break;
2004
        case GE_EXPR:
2005
          code = LE_EXPR;
2006
          break;
2007
        default:
2008
          break;
2009
        }
2010
      *rescode_ptr = code;
2011
    }
2012
 
2013
  /* If comparing an integer against a constant more bits wide,
2014
     maybe we can deduce a value of 1 or 0 independent of the data.
2015
     Or else truncate the constant now
2016
     rather than extend the variable at run time.
2017
 
2018
     This is only interesting if the constant is the wider arg.
2019
     Also, it is not safe if the constant is unsigned and the
2020
     variable arg is signed, since in this case the variable
2021
     would be sign-extended and then regarded as unsigned.
2022
     Our technique fails in this case because the lowest/highest
2023
     possible unsigned results don't follow naturally from the
2024
     lowest/highest possible values of the variable operand.
2025
     For just EQ_EXPR and NE_EXPR there is another technique that
2026
     could be used: see if the constant can be faithfully represented
2027
     in the other operand's type, by truncating it and reextending it
2028
     and see if that preserves the constant's value.  */
2029
 
2030
  if (!real1 && !real2
2031
      && TREE_CODE (primop1) == INTEGER_CST
2032
      && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2033
    {
2034
      int min_gt, max_gt, min_lt, max_lt;
2035
      tree maxval, minval;
2036
      /* 1 if comparison is nominally unsigned.  */
2037
      int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2038
      tree val;
2039
 
2040
      type = c_common_signed_or_unsigned_type (unsignedp0,
2041
                                               TREE_TYPE (primop0));
2042
 
2043
      maxval = TYPE_MAX_VALUE (type);
2044
      minval = TYPE_MIN_VALUE (type);
2045
 
2046
      if (unsignedp && !unsignedp0)
2047
        *restype_ptr = c_common_signed_type (*restype_ptr);
2048
 
2049
      if (TREE_TYPE (primop1) != *restype_ptr)
2050
        {
2051
          /* Convert primop1 to target type, but do not introduce
2052
             additional overflow.  We know primop1 is an int_cst.  */
2053
          tree tmp = build_int_cst_wide (*restype_ptr,
2054
                                         TREE_INT_CST_LOW (primop1),
2055
                                         TREE_INT_CST_HIGH (primop1));
2056
 
2057
          primop1 = force_fit_type (tmp, 0, TREE_OVERFLOW (primop1),
2058
                                    TREE_CONSTANT_OVERFLOW (primop1));
2059
        }
2060
      if (type != *restype_ptr)
2061
        {
2062
          minval = convert (*restype_ptr, minval);
2063
          maxval = convert (*restype_ptr, maxval);
2064
        }
2065
 
2066
      if (unsignedp && unsignedp0)
2067
        {
2068
          min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2069
          max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2070
          min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2071
          max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2072
        }
2073
      else
2074
        {
2075
          min_gt = INT_CST_LT (primop1, minval);
2076
          max_gt = INT_CST_LT (primop1, maxval);
2077
          min_lt = INT_CST_LT (minval, primop1);
2078
          max_lt = INT_CST_LT (maxval, primop1);
2079
        }
2080
 
2081
      val = 0;
2082
      /* This used to be a switch, but Genix compiler can't handle that.  */
2083
      if (code == NE_EXPR)
2084
        {
2085
          if (max_lt || min_gt)
2086
            val = truthvalue_true_node;
2087
        }
2088
      else if (code == EQ_EXPR)
2089
        {
2090
          if (max_lt || min_gt)
2091
            val = truthvalue_false_node;
2092
        }
2093
      else if (code == LT_EXPR)
2094
        {
2095
          if (max_lt)
2096
            val = truthvalue_true_node;
2097
          if (!min_lt)
2098
            val = truthvalue_false_node;
2099
        }
2100
      else if (code == GT_EXPR)
2101
        {
2102
          if (min_gt)
2103
            val = truthvalue_true_node;
2104
          if (!max_gt)
2105
            val = truthvalue_false_node;
2106
        }
2107
      else if (code == LE_EXPR)
2108
        {
2109
          if (!max_gt)
2110
            val = truthvalue_true_node;
2111
          if (min_gt)
2112
            val = truthvalue_false_node;
2113
        }
2114
      else if (code == GE_EXPR)
2115
        {
2116
          if (!min_lt)
2117
            val = truthvalue_true_node;
2118
          if (max_lt)
2119
            val = truthvalue_false_node;
2120
        }
2121
 
2122
      /* If primop0 was sign-extended and unsigned comparison specd,
2123
         we did a signed comparison above using the signed type bounds.
2124
         But the comparison we output must be unsigned.
2125
 
2126
         Also, for inequalities, VAL is no good; but if the signed
2127
         comparison had *any* fixed result, it follows that the
2128
         unsigned comparison just tests the sign in reverse
2129
         (positive values are LE, negative ones GE).
2130
         So we can generate an unsigned comparison
2131
         against an extreme value of the signed type.  */
2132
 
2133
      if (unsignedp && !unsignedp0)
2134
        {
2135
          if (val != 0)
2136
            switch (code)
2137
              {
2138
              case LT_EXPR:
2139
              case GE_EXPR:
2140
                primop1 = TYPE_MIN_VALUE (type);
2141
                val = 0;
2142
                break;
2143
 
2144
              case LE_EXPR:
2145
              case GT_EXPR:
2146
                primop1 = TYPE_MAX_VALUE (type);
2147
                val = 0;
2148
                break;
2149
 
2150
              default:
2151
                break;
2152
              }
2153
          type = c_common_unsigned_type (type);
2154
        }
2155
 
2156
      if (TREE_CODE (primop0) != INTEGER_CST)
2157
        {
2158
          if (val == truthvalue_false_node)
2159
            warning (0, "comparison is always false due to limited range of data type");
2160
          if (val == truthvalue_true_node)
2161
            warning (0, "comparison is always true due to limited range of data type");
2162
        }
2163
 
2164
      if (val != 0)
2165
        {
2166
          /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2167
          if (TREE_SIDE_EFFECTS (primop0))
2168
            return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2169
          return val;
2170
        }
2171
 
2172
      /* Value is not predetermined, but do the comparison
2173
         in the type of the operand that is not constant.
2174
         TYPE is already properly set.  */
2175
    }
2176
  else if (real1 && real2
2177
           && (TYPE_PRECISION (TREE_TYPE (primop0))
2178
               == TYPE_PRECISION (TREE_TYPE (primop1))))
2179
    type = TREE_TYPE (primop0);
2180
 
2181
  /* If args' natural types are both narrower than nominal type
2182
     and both extend in the same manner, compare them
2183
     in the type of the wider arg.
2184
     Otherwise must actually extend both to the nominal
2185
     common type lest different ways of extending
2186
     alter the result.
2187
     (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
2188
 
2189
  else if (unsignedp0 == unsignedp1 && real1 == real2
2190
           && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2191
           && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2192
    {
2193
      type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2194
      type = c_common_signed_or_unsigned_type (unsignedp0
2195
                                               || TYPE_UNSIGNED (*restype_ptr),
2196
                                               type);
2197
      /* Make sure shorter operand is extended the right way
2198
         to match the longer operand.  */
2199
      primop0
2200
        = convert (c_common_signed_or_unsigned_type (unsignedp0,
2201
                                                     TREE_TYPE (primop0)),
2202
                   primop0);
2203
      primop1
2204
        = convert (c_common_signed_or_unsigned_type (unsignedp1,
2205
                                                     TREE_TYPE (primop1)),
2206
                   primop1);
2207
    }
2208
  else
2209
    {
2210
      /* Here we must do the comparison on the nominal type
2211
         using the args exactly as we received them.  */
2212
      type = *restype_ptr;
2213
      primop0 = op0;
2214
      primop1 = op1;
2215
 
2216
      if (!real1 && !real2 && integer_zerop (primop1)
2217
          && TYPE_UNSIGNED (*restype_ptr))
2218
        {
2219
          tree value = 0;
2220
          switch (code)
2221
            {
2222
            case GE_EXPR:
2223
              /* All unsigned values are >= 0, so we warn if extra warnings
2224
                 are requested.  However, if OP0 is a constant that is
2225
                 >= 0, the signedness of the comparison isn't an issue,
2226
                 so suppress the warning.  */
2227
              if (extra_warnings && !in_system_header
2228
                  && !(TREE_CODE (primop0) == INTEGER_CST
2229
                       && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2230
                                                   primop0))))
2231
                warning (0, "comparison of unsigned expression >= 0 is always true");
2232
              value = truthvalue_true_node;
2233
              break;
2234
 
2235
            case LT_EXPR:
2236
              if (extra_warnings && !in_system_header
2237
                  && !(TREE_CODE (primop0) == INTEGER_CST
2238
                       && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2239
                                                   primop0))))
2240
                warning (0, "comparison of unsigned expression < 0 is always false");
2241
              value = truthvalue_false_node;
2242
              break;
2243
 
2244
            default:
2245
              break;
2246
            }
2247
 
2248
          if (value != 0)
2249
            {
2250
              /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2251
              if (TREE_SIDE_EFFECTS (primop0))
2252
                return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2253
                               primop0, value);
2254
              return value;
2255
            }
2256
        }
2257
    }
2258
 
2259
  *op0_ptr = convert (type, primop0);
2260
  *op1_ptr = convert (type, primop1);
2261
 
2262
  *restype_ptr = truthvalue_type_node;
2263
 
2264
  return 0;
2265
}
2266
 
2267
/* Return a tree for the sum or difference (RESULTCODE says which)
2268
   of pointer PTROP and integer INTOP.  */
2269
 
2270
tree
2271
pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2272
{
2273
  tree size_exp;
2274
 
2275
  /* The result is a pointer of the same type that is being added.  */
2276
 
2277
  tree result_type = TREE_TYPE (ptrop);
2278
 
2279
  if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2280
    {
2281
      if (pedantic || warn_pointer_arith)
2282
        pedwarn ("pointer of type %<void *%> used in arithmetic");
2283
      size_exp = integer_one_node;
2284
    }
2285
  else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2286
    {
2287
      if (pedantic || warn_pointer_arith)
2288
        pedwarn ("pointer to a function used in arithmetic");
2289
      size_exp = integer_one_node;
2290
    }
2291
  else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2292
    {
2293
      if (pedantic || warn_pointer_arith)
2294
        pedwarn ("pointer to member function used in arithmetic");
2295
      size_exp = integer_one_node;
2296
    }
2297
  else
2298
    size_exp = size_in_bytes (TREE_TYPE (result_type));
2299
 
2300
  /* If what we are about to multiply by the size of the elements
2301
     contains a constant term, apply distributive law
2302
     and multiply that constant term separately.
2303
     This helps produce common subexpressions.  */
2304
 
2305
  if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2306
      && !TREE_CONSTANT (intop)
2307
      && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2308
      && TREE_CONSTANT (size_exp)
2309
      /* If the constant comes from pointer subtraction,
2310
         skip this optimization--it would cause an error.  */
2311
      && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2312
      /* If the constant is unsigned, and smaller than the pointer size,
2313
         then we must skip this optimization.  This is because it could cause
2314
         an overflow error if the constant is negative but INTOP is not.  */
2315
      && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2316
          || (TYPE_PRECISION (TREE_TYPE (intop))
2317
              == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2318
    {
2319
      enum tree_code subcode = resultcode;
2320
      tree int_type = TREE_TYPE (intop);
2321
      if (TREE_CODE (intop) == MINUS_EXPR)
2322
        subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2323
      /* Convert both subexpression types to the type of intop,
2324
         because weird cases involving pointer arithmetic
2325
         can result in a sum or difference with different type args.  */
2326
      ptrop = build_binary_op (subcode, ptrop,
2327
                               convert (int_type, TREE_OPERAND (intop, 1)), 1);
2328
      intop = convert (int_type, TREE_OPERAND (intop, 0));
2329
    }
2330
 
2331
  /* Convert the integer argument to a type the same size as sizetype
2332
     so the multiply won't overflow spuriously.  */
2333
 
2334
  if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2335
      || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2336
    intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2337
                                             TYPE_UNSIGNED (sizetype)), intop);
2338
 
2339
  /* Replace the integer argument with a suitable product by the object size.
2340
     Do this multiplication as signed, then convert to the appropriate
2341
     pointer type (actually unsigned integral).  */
2342
 
2343
  intop = convert (result_type,
2344
                   build_binary_op (MULT_EXPR, intop,
2345
                                    convert (TREE_TYPE (intop), size_exp), 1));
2346
 
2347
  /* Create the sum or difference.  */
2348
  return fold_build2 (resultcode, result_type, ptrop, intop);
2349
}
2350
 
2351
/* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2352
   or for an `if' or `while' statement or ?..: exp.  It should already
2353
   have been validated to be of suitable type; otherwise, a bad
2354
   diagnostic may result.
2355
 
2356
   This preparation consists of taking the ordinary
2357
   representation of an expression expr and producing a valid tree
2358
   boolean expression describing whether expr is nonzero.  We could
2359
   simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2360
   but we optimize comparisons, &&, ||, and !.
2361
 
2362
   The resulting type should always be `truthvalue_type_node'.  */
2363
 
2364
tree
2365
c_common_truthvalue_conversion (tree expr)
2366
{
2367
  switch (TREE_CODE (expr))
2368
    {
2369
    case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
2370
    case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
2371
    case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2372
    case ORDERED_EXPR: case UNORDERED_EXPR:
2373
      if (TREE_TYPE (expr) == truthvalue_type_node)
2374
        return expr;
2375
      return build2 (TREE_CODE (expr), truthvalue_type_node,
2376
                     TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2377
 
2378
    case TRUTH_ANDIF_EXPR:
2379
    case TRUTH_ORIF_EXPR:
2380
    case TRUTH_AND_EXPR:
2381
    case TRUTH_OR_EXPR:
2382
    case TRUTH_XOR_EXPR:
2383
      if (TREE_TYPE (expr) == truthvalue_type_node)
2384
        return expr;
2385
      return build2 (TREE_CODE (expr), truthvalue_type_node,
2386
                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2387
                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2388
 
2389
    case TRUTH_NOT_EXPR:
2390
      if (TREE_TYPE (expr) == truthvalue_type_node)
2391
        return expr;
2392
      return build1 (TREE_CODE (expr), truthvalue_type_node,
2393
                 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2394
 
2395
    case ERROR_MARK:
2396
      return expr;
2397
 
2398
    case INTEGER_CST:
2399
      /* Avoid integer_zerop to ignore TREE_CONSTANT_OVERFLOW.  */
2400
      return (TREE_INT_CST_LOW (expr) != 0 || TREE_INT_CST_HIGH (expr) != 0)
2401
             ? truthvalue_true_node
2402
             : truthvalue_false_node;
2403
 
2404
    case REAL_CST:
2405
      return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2406
             ? truthvalue_true_node
2407
             : truthvalue_false_node;
2408
 
2409
    case FUNCTION_DECL:
2410
      expr = build_unary_op (ADDR_EXPR, expr, 0);
2411
      /* Fall through.  */
2412
 
2413
    case ADDR_EXPR:
2414
      {
2415
        if (TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL
2416
            && !DECL_WEAK (TREE_OPERAND (expr, 0)))
2417
          {
2418
            /* Common Ada/Pascal programmer's mistake.  We always warn
2419
               about this since it is so bad.  */
2420
            warning (0, "the address of %qD, will always evaluate as %<true%>",
2421
                     TREE_OPERAND (expr, 0));
2422
            return truthvalue_true_node;
2423
          }
2424
 
2425
        /* If we are taking the address of an external decl, it might be
2426
           zero if it is weak, so we cannot optimize.  */
2427
        if (DECL_P (TREE_OPERAND (expr, 0))
2428
            && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2429
          break;
2430
 
2431
        if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
2432
          return build2 (COMPOUND_EXPR, truthvalue_type_node,
2433
                         TREE_OPERAND (expr, 0), truthvalue_true_node);
2434
        else
2435
          return truthvalue_true_node;
2436
      }
2437
 
2438
    case COMPLEX_EXPR:
2439
      return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2440
                               ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2441
                c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2442
                c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2443
                              0);
2444
 
2445
    case NEGATE_EXPR:
2446
    case ABS_EXPR:
2447
    case FLOAT_EXPR:
2448
      /* These don't change whether an object is nonzero or zero.  */
2449
      return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2450
 
2451
    case LROTATE_EXPR:
2452
    case RROTATE_EXPR:
2453
      /* These don't change whether an object is zero or nonzero, but
2454
         we can't ignore them if their second arg has side-effects.  */
2455
      if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2456
        return build2 (COMPOUND_EXPR, truthvalue_type_node,
2457
                       TREE_OPERAND (expr, 1),
2458
                       c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2459
      else
2460
        return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2461
 
2462
    case COND_EXPR:
2463
      /* Distribute the conversion into the arms of a COND_EXPR.  */
2464
      return fold_build3 (COND_EXPR, truthvalue_type_node,
2465
                TREE_OPERAND (expr, 0),
2466
                c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2467
                c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
2468
 
2469
    case CONVERT_EXPR:
2470
      /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2471
         since that affects how `default_conversion' will behave.  */
2472
      if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2473
          || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2474
        break;
2475
      /* Fall through....  */
2476
    case NOP_EXPR:
2477
      /* If this is widening the argument, we can ignore it.  */
2478
      if (TYPE_PRECISION (TREE_TYPE (expr))
2479
          >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2480
        return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2481
      break;
2482
 
2483
    case MINUS_EXPR:
2484
      /* Perhaps reduce (x - y) != 0 to (x != y).  The expressions
2485
         aren't guaranteed to the be same for modes that can represent
2486
         infinity, since if x and y are both +infinity, or both
2487
         -infinity, then x - y is not a number.
2488
 
2489
         Note that this transformation is safe when x or y is NaN.
2490
         (x - y) is then NaN, and both (x - y) != 0 and x != y will
2491
         be false.  */
2492
      if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr, 0)))))
2493
        break;
2494
      /* Fall through....  */
2495
    case BIT_XOR_EXPR:
2496
      /* This and MINUS_EXPR can be changed into a comparison of the
2497
         two objects.  */
2498
      if (TREE_TYPE (TREE_OPERAND (expr, 0))
2499
          == TREE_TYPE (TREE_OPERAND (expr, 1)))
2500
        return fold_build2 (NE_EXPR, truthvalue_type_node,
2501
                            TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2502
      return fold_build2 (NE_EXPR, truthvalue_type_node,
2503
                          TREE_OPERAND (expr, 0),
2504
                          fold_convert (TREE_TYPE (TREE_OPERAND (expr, 0)),
2505
                                        TREE_OPERAND (expr, 1)));
2506
 
2507
    case BIT_AND_EXPR:
2508
      if (integer_onep (TREE_OPERAND (expr, 1))
2509
          && TREE_TYPE (expr) != truthvalue_type_node)
2510
        /* Using convert here would cause infinite recursion.  */
2511
        return build1 (NOP_EXPR, truthvalue_type_node, expr);
2512
      break;
2513
 
2514
    case MODIFY_EXPR:
2515
      if (!TREE_NO_WARNING (expr))
2516
        warning (OPT_Wparentheses,
2517
                 "suggest parentheses around assignment used as truth value");
2518
      break;
2519
 
2520
    default:
2521
      break;
2522
    }
2523
 
2524
  if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2525
    {
2526
      tree t = save_expr (expr);
2527
      return (build_binary_op
2528
              ((TREE_SIDE_EFFECTS (expr)
2529
                ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2530
        c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2531
        c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2532
               0));
2533
    }
2534
 
2535
  return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2536
}
2537
 
2538
static void def_builtin_1  (enum built_in_function fncode,
2539
                            const char *name,
2540
                            enum built_in_class fnclass,
2541
                            tree fntype, tree libtype,
2542
                            bool both_p, bool fallback_p, bool nonansi_p,
2543
                            tree fnattrs, bool implicit_p);
2544
 
2545
/* Make a variant type in the proper way for C/C++, propagating qualifiers
2546
   down to the element type of an array.  */
2547
 
2548
tree
2549
c_build_qualified_type (tree type, int type_quals)
2550
{
2551
  if (type == error_mark_node)
2552
    return type;
2553
 
2554
  if (TREE_CODE (type) == ARRAY_TYPE)
2555
    {
2556
      tree t;
2557
      tree element_type = c_build_qualified_type (TREE_TYPE (type),
2558
                                                  type_quals);
2559
 
2560
      /* See if we already have an identically qualified type.  */
2561
      for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2562
        {
2563
          if (TYPE_QUALS (strip_array_types (t)) == type_quals
2564
              && TYPE_NAME (t) == TYPE_NAME (type)
2565
              && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2566
              && attribute_list_equal (TYPE_ATTRIBUTES (t),
2567
                                       TYPE_ATTRIBUTES (type)))
2568
            break;
2569
        }
2570
      if (!t)
2571
        {
2572
          t = build_variant_type_copy (type);
2573
          TREE_TYPE (t) = element_type;
2574
        }
2575
      return t;
2576
    }
2577
 
2578
  /* A restrict-qualified pointer type must be a pointer to object or
2579
     incomplete type.  Note that the use of POINTER_TYPE_P also allows
2580
     REFERENCE_TYPEs, which is appropriate for C++.  */
2581
  if ((type_quals & TYPE_QUAL_RESTRICT)
2582
      && (!POINTER_TYPE_P (type)
2583
          || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2584
    {
2585
      error ("invalid use of %<restrict%>");
2586
      type_quals &= ~TYPE_QUAL_RESTRICT;
2587
    }
2588
 
2589
  return build_qualified_type (type, type_quals);
2590
}
2591
 
2592
/* Apply the TYPE_QUALS to the new DECL.  */
2593
 
2594
void
2595
c_apply_type_quals_to_decl (int type_quals, tree decl)
2596
{
2597
  tree type = TREE_TYPE (decl);
2598
 
2599
  if (type == error_mark_node)
2600
    return;
2601
 
2602
  if (((type_quals & TYPE_QUAL_CONST)
2603
       || (type && TREE_CODE (type) == REFERENCE_TYPE))
2604
      /* An object declared 'const' is only readonly after it is
2605
         initialized.  We don't have any way of expressing this currently,
2606
         so we need to be conservative and unset TREE_READONLY for types
2607
         with constructors.  Otherwise aliasing code will ignore stores in
2608
         an inline constructor.  */
2609
      && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2610
    TREE_READONLY (decl) = 1;
2611
  if (type_quals & TYPE_QUAL_VOLATILE)
2612
    {
2613
      TREE_SIDE_EFFECTS (decl) = 1;
2614
      TREE_THIS_VOLATILE (decl) = 1;
2615
    }
2616
  if (type_quals & TYPE_QUAL_RESTRICT)
2617
    {
2618
      while (type && TREE_CODE (type) == ARRAY_TYPE)
2619
        /* Allow 'restrict' on arrays of pointers.
2620
           FIXME currently we just ignore it.  */
2621
        type = TREE_TYPE (type);
2622
      if (!type
2623
          || !POINTER_TYPE_P (type)
2624
          || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
2625
        error ("invalid use of %<restrict%>");
2626
      else if (flag_strict_aliasing && type == TREE_TYPE (decl))
2627
        /* Indicate we need to make a unique alias set for this pointer.
2628
           We can't do it here because it might be pointing to an
2629
           incomplete type.  */
2630
        DECL_POINTER_ALIAS_SET (decl) = -2;
2631
    }
2632
}
2633
 
2634
/* Hash function for the problem of multiple type definitions in
2635
   different files.  This must hash all types that will compare
2636
   equal via comptypes to the same value.  In practice it hashes
2637
   on some of the simple stuff and leaves the details to comptypes.  */
2638
 
2639
static hashval_t
2640
c_type_hash (const void *p)
2641
{
2642
  int i = 0;
2643
  int shift, size;
2644
  tree t = (tree) p;
2645
  tree t2;
2646
  switch (TREE_CODE (t))
2647
    {
2648
    /* For pointers, hash on pointee type plus some swizzling.  */
2649
    case POINTER_TYPE:
2650
      return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2651
    /* Hash on number of elements and total size.  */
2652
    case ENUMERAL_TYPE:
2653
      shift = 3;
2654
      t2 = TYPE_VALUES (t);
2655
      break;
2656
    case RECORD_TYPE:
2657
      shift = 0;
2658
      t2 = TYPE_FIELDS (t);
2659
      break;
2660
    case QUAL_UNION_TYPE:
2661
      shift = 1;
2662
      t2 = TYPE_FIELDS (t);
2663
      break;
2664
    case UNION_TYPE:
2665
      shift = 2;
2666
      t2 = TYPE_FIELDS (t);
2667
      break;
2668
    default:
2669
      gcc_unreachable ();
2670
    }
2671
  for (; t2; t2 = TREE_CHAIN (t2))
2672
    i++;
2673
  size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2674
  return ((size << 24) | (i << shift));
2675
}
2676
 
2677
static GTY((param_is (union tree_node))) htab_t type_hash_table;
2678
 
2679
/* Return the typed-based alias set for T, which may be an expression
2680
   or a type.  Return -1 if we don't do anything special.  */
2681
 
2682
HOST_WIDE_INT
2683
c_common_get_alias_set (tree t)
2684
{
2685
  tree u;
2686
  PTR *slot;
2687
 
2688
  /* Permit type-punning when accessing a union, provided the access
2689
     is directly through the union.  For example, this code does not
2690
     permit taking the address of a union member and then storing
2691
     through it.  Even the type-punning allowed here is a GCC
2692
     extension, albeit a common and useful one; the C standard says
2693
     that such accesses have implementation-defined behavior.  */
2694
  for (u = t;
2695
       TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2696
       u = TREE_OPERAND (u, 0))
2697
    if (TREE_CODE (u) == COMPONENT_REF
2698
        && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2699
      return 0;
2700
 
2701
  /* That's all the expressions we handle specially.  */
2702
  if (!TYPE_P (t))
2703
    return -1;
2704
 
2705
  /* The C standard guarantees that any object may be accessed via an
2706
     lvalue that has character type.  */
2707
  if (t == char_type_node
2708
      || t == signed_char_type_node
2709
      || t == unsigned_char_type_node)
2710
    return 0;
2711
 
2712
  /* If it has the may_alias attribute, it can alias anything.  */
2713
  if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
2714
    return 0;
2715
 
2716
  /* The C standard specifically allows aliasing between signed and
2717
     unsigned variants of the same type.  We treat the signed
2718
     variant as canonical.  */
2719
  if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
2720
    {
2721
      tree t1 = c_common_signed_type (t);
2722
 
2723
      /* t1 == t can happen for boolean nodes which are always unsigned.  */
2724
      if (t1 != t)
2725
        return get_alias_set (t1);
2726
    }
2727
  else if (POINTER_TYPE_P (t))
2728
    {
2729
      tree t1;
2730
 
2731
      /* Unfortunately, there is no canonical form of a pointer type.
2732
         In particular, if we have `typedef int I', then `int *', and
2733
         `I *' are different types.  So, we have to pick a canonical
2734
         representative.  We do this below.
2735
 
2736
         Technically, this approach is actually more conservative that
2737
         it needs to be.  In particular, `const int *' and `int *'
2738
         should be in different alias sets, according to the C and C++
2739
         standard, since their types are not the same, and so,
2740
         technically, an `int **' and `const int **' cannot point at
2741
         the same thing.
2742
 
2743
         But, the standard is wrong.  In particular, this code is
2744
         legal C++:
2745
 
2746
            int *ip;
2747
            int **ipp = &ip;
2748
            const int* const* cipp = ipp;
2749
 
2750
         And, it doesn't make sense for that to be legal unless you
2751
         can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
2752
         the pointed-to types.  This issue has been reported to the
2753
         C++ committee.  */
2754
      t1 = build_type_no_quals (t);
2755
      if (t1 != t)
2756
        return get_alias_set (t1);
2757
    }
2758
 
2759
  /* Handle the case of multiple type nodes referring to "the same" type,
2760
     which occurs with IMA.  These share an alias set.  FIXME:  Currently only
2761
     C90 is handled.  (In C99 type compatibility is not transitive, which
2762
     complicates things mightily. The alias set splay trees can theoretically
2763
     represent this, but insertion is tricky when you consider all the
2764
     different orders things might arrive in.) */
2765
 
2766
  if (c_language != clk_c || flag_isoc99)
2767
    return -1;
2768
 
2769
  /* Save time if there's only one input file.  */
2770
  if (num_in_fnames == 1)
2771
    return -1;
2772
 
2773
  /* Pointers need special handling if they point to any type that
2774
     needs special handling (below).  */
2775
  if (TREE_CODE (t) == POINTER_TYPE)
2776
    {
2777
      tree t2;
2778
      /* Find bottom type under any nested POINTERs.  */
2779
      for (t2 = TREE_TYPE (t);
2780
     TREE_CODE (t2) == POINTER_TYPE;
2781
     t2 = TREE_TYPE (t2))
2782
  ;
2783
      if (TREE_CODE (t2) != RECORD_TYPE
2784
    && TREE_CODE (t2) != ENUMERAL_TYPE
2785
    && TREE_CODE (t2) != QUAL_UNION_TYPE
2786
    && TREE_CODE (t2) != UNION_TYPE)
2787
  return -1;
2788
      if (TYPE_SIZE (t2) == 0)
2789
  return -1;
2790
    }
2791
  /* These are the only cases that need special handling.  */
2792
  if (TREE_CODE (t) != RECORD_TYPE
2793
      && TREE_CODE (t) != ENUMERAL_TYPE
2794
      && TREE_CODE (t) != QUAL_UNION_TYPE
2795
      && TREE_CODE (t) != UNION_TYPE
2796
      && TREE_CODE (t) != POINTER_TYPE)
2797
    return -1;
2798
  /* Undefined? */
2799
  if (TYPE_SIZE (t) == 0)
2800
    return -1;
2801
 
2802
  /* Look up t in hash table.  Only one of the compatible types within each
2803
     alias set is recorded in the table.  */
2804
  if (!type_hash_table)
2805
    type_hash_table = htab_create_ggc (1021, c_type_hash,
2806
            (htab_eq) lang_hooks.types_compatible_p,
2807
            NULL);
2808
  slot = htab_find_slot (type_hash_table, t, INSERT);
2809
  if (*slot != NULL)
2810
    {
2811
      TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
2812
      return TYPE_ALIAS_SET ((tree)*slot);
2813
    }
2814
  else
2815
    /* Our caller will assign and record (in t) a new alias set; all we need
2816
       to do is remember t in the hash table.  */
2817
    *slot = t;
2818
 
2819
  return -1;
2820
}
2821
 
2822
/* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
2823
   second parameter indicates which OPERATOR is being applied.  The COMPLAIN
2824
   flag controls whether we should diagnose possibly ill-formed
2825
   constructs or not.  */
2826
 
2827
tree
2828
c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
2829
{
2830
  const char *op_name;
2831
  tree value = NULL;
2832
  enum tree_code type_code = TREE_CODE (type);
2833
 
2834
  op_name = is_sizeof ? "sizeof" : "__alignof__";
2835
 
2836
  if (type_code == FUNCTION_TYPE)
2837
    {
2838
      if (is_sizeof)
2839
        {
2840
          if (complain && (pedantic || warn_pointer_arith))
2841
            pedwarn ("invalid application of %<sizeof%> to a function type");
2842
          value = size_one_node;
2843
        }
2844
      else
2845
        value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2846
    }
2847
  else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
2848
    {
2849
      if (type_code == VOID_TYPE
2850
          && complain && (pedantic || warn_pointer_arith))
2851
        pedwarn ("invalid application of %qs to a void type", op_name);
2852
      value = size_one_node;
2853
    }
2854
  else if (!COMPLETE_TYPE_P (type))
2855
    {
2856
      if (complain)
2857
        error ("invalid application of %qs to incomplete type %qT ",
2858
               op_name, type);
2859
      value = size_zero_node;
2860
    }
2861
  else
2862
    {
2863
      if (is_sizeof)
2864
        /* Convert in case a char is more than one unit.  */
2865
        value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
2866
                            size_int (TYPE_PRECISION (char_type_node)
2867
                                      / BITS_PER_UNIT));
2868
      else
2869
        value = size_int (TYPE_ALIGN_UNIT (type));
2870
    }
2871
 
2872
  /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
2873
     TYPE_IS_SIZETYPE means that certain things (like overflow) will
2874
     never happen.  However, this node should really have type
2875
     `size_t', which is just a typedef for an ordinary integer type.  */
2876
  value = fold_build1 (NOP_EXPR, size_type_node, value);
2877
  gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
2878
 
2879
  return value;
2880
}
2881
 
2882
/* Implement the __alignof keyword: Return the minimum required
2883
   alignment of EXPR, measured in bytes.  For VAR_DECL's and
2884
   FIELD_DECL's return DECL_ALIGN (which can be set from an
2885
   "aligned" __attribute__ specification).  */
2886
 
2887
tree
2888
c_alignof_expr (tree expr)
2889
{
2890
  tree t;
2891
 
2892
  if (TREE_CODE (expr) == VAR_DECL)
2893
    t = size_int (DECL_ALIGN_UNIT (expr));
2894
 
2895
  else if (TREE_CODE (expr) == COMPONENT_REF
2896
           && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2897
    {
2898
      error ("%<__alignof%> applied to a bit-field");
2899
      t = size_one_node;
2900
    }
2901
  else if (TREE_CODE (expr) == COMPONENT_REF
2902
           && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2903
    t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
2904
 
2905
  else if (TREE_CODE (expr) == INDIRECT_REF)
2906
    {
2907
      tree t = TREE_OPERAND (expr, 0);
2908
      tree best = t;
2909
      int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2910
 
2911
      while (TREE_CODE (t) == NOP_EXPR
2912
             && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2913
        {
2914
          int thisalign;
2915
 
2916
          t = TREE_OPERAND (t, 0);
2917
          thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2918
          if (thisalign > bestalign)
2919
            best = t, bestalign = thisalign;
2920
        }
2921
      return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2922
    }
2923
  else
2924
    return c_alignof (TREE_TYPE (expr));
2925
 
2926
  return fold_build1 (NOP_EXPR, size_type_node, t);
2927
}
2928
 
2929
/* Handle C and C++ default attributes.  */
2930
 
2931
enum built_in_attribute
2932
{
2933
#define DEF_ATTR_NULL_TREE(ENUM) ENUM,
2934
#define DEF_ATTR_INT(ENUM, VALUE) ENUM,
2935
#define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
2936
#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
2937
#include "builtin-attrs.def"
2938
#undef DEF_ATTR_NULL_TREE
2939
#undef DEF_ATTR_INT
2940
#undef DEF_ATTR_IDENT
2941
#undef DEF_ATTR_TREE_LIST
2942
  ATTR_LAST
2943
};
2944
 
2945
static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
2946
 
2947
static void c_init_attributes (void);
2948
 
2949
/* Build tree nodes and builtin functions common to both C and C++ language
2950
   frontends.  */
2951
 
2952
void
2953
c_common_nodes_and_builtins (void)
2954
{
2955
  enum builtin_type
2956
  {
2957
#define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2958
#define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2959
#define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2960
#define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2961
#define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2962
#define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2963
#define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
2964
#define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
2965
  NAME,
2966
#define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2967
#define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2968
#define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
2969
#define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2970
#define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2971
#define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
2972
  NAME,
2973
#define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2974
#include "builtin-types.def"
2975
#undef DEF_PRIMITIVE_TYPE
2976
#undef DEF_FUNCTION_TYPE_0
2977
#undef DEF_FUNCTION_TYPE_1
2978
#undef DEF_FUNCTION_TYPE_2
2979
#undef DEF_FUNCTION_TYPE_3
2980
#undef DEF_FUNCTION_TYPE_4
2981
#undef DEF_FUNCTION_TYPE_5
2982
#undef DEF_FUNCTION_TYPE_6
2983
#undef DEF_FUNCTION_TYPE_VAR_0
2984
#undef DEF_FUNCTION_TYPE_VAR_1
2985
#undef DEF_FUNCTION_TYPE_VAR_2
2986
#undef DEF_FUNCTION_TYPE_VAR_3
2987
#undef DEF_FUNCTION_TYPE_VAR_4
2988
#undef DEF_FUNCTION_TYPE_VAR_5
2989
#undef DEF_POINTER_TYPE
2990
    BT_LAST
2991
  };
2992
 
2993
  typedef enum builtin_type builtin_type;
2994
 
2995
  tree builtin_types[(int) BT_LAST + 1];
2996
  int wchar_type_size;
2997
  tree array_domain_type;
2998
  tree va_list_ref_type_node;
2999
  tree va_list_arg_type_node;
3000
 
3001
  /* Define `int' and `char' first so that dbx will output them first.  */
3002
  record_builtin_type (RID_INT, NULL, integer_type_node);
3003
  record_builtin_type (RID_CHAR, "char", char_type_node);
3004
 
3005
  /* `signed' is the same as `int'.  FIXME: the declarations of "signed",
3006
     "unsigned long", "long long unsigned" and "unsigned short" were in C++
3007
     but not C.  Are the conditionals here needed?  */
3008
  if (c_dialect_cxx ())
3009
    record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3010
  record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3011
  record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3012
  record_builtin_type (RID_MAX, "long unsigned int",
3013
                       long_unsigned_type_node);
3014
  if (c_dialect_cxx ())
3015
    record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3016
  record_builtin_type (RID_MAX, "long long int",
3017
                       long_long_integer_type_node);
3018
  record_builtin_type (RID_MAX, "long long unsigned int",
3019
                       long_long_unsigned_type_node);
3020
  if (c_dialect_cxx ())
3021
    record_builtin_type (RID_MAX, "long long unsigned",
3022
                         long_long_unsigned_type_node);
3023
  record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3024
  record_builtin_type (RID_MAX, "short unsigned int",
3025
                       short_unsigned_type_node);
3026
  if (c_dialect_cxx ())
3027
    record_builtin_type (RID_MAX, "unsigned short",
3028
                         short_unsigned_type_node);
3029
 
3030
  /* Define both `signed char' and `unsigned char'.  */
3031
  record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3032
  record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3033
 
3034
  /* These are types that c_common_type_for_size and
3035
     c_common_type_for_mode use.  */
3036
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3037
                                         intQI_type_node));
3038
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3039
                                         intHI_type_node));
3040
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3041
                                         intSI_type_node));
3042
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3043
                                         intDI_type_node));
3044
#if HOST_BITS_PER_WIDE_INT >= 64
3045
  if (targetm.scalar_mode_supported_p (TImode))
3046
    lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3047
                                           get_identifier ("__int128_t"),
3048
                                           intTI_type_node));
3049
#endif
3050
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3051
                                         unsigned_intQI_type_node));
3052
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3053
                                         unsigned_intHI_type_node));
3054
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3055
                                         unsigned_intSI_type_node));
3056
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3057
                                         unsigned_intDI_type_node));
3058
#if HOST_BITS_PER_WIDE_INT >= 64
3059
  if (targetm.scalar_mode_supported_p (TImode))
3060
    lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3061
                                           get_identifier ("__uint128_t"),
3062
                                           unsigned_intTI_type_node));
3063
#endif
3064
 
3065
  /* Create the widest literal types.  */
3066
  widest_integer_literal_type_node
3067
    = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3068
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3069
                                         widest_integer_literal_type_node));
3070
 
3071
  widest_unsigned_literal_type_node
3072
    = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3073
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3074
                                         widest_unsigned_literal_type_node));
3075
 
3076
  /* `unsigned long' is the standard type for sizeof.
3077
     Note that stddef.h uses `unsigned long',
3078
     and this must agree, even if long and int are the same size.  */
3079
  size_type_node =
3080
    TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3081
  signed_size_type_node = c_common_signed_type (size_type_node);
3082
  set_sizetype (size_type_node);
3083
 
3084
  pid_type_node =
3085
    TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3086
 
3087
  build_common_tree_nodes_2 (flag_short_double);
3088
 
3089
  record_builtin_type (RID_FLOAT, NULL, float_type_node);
3090
  record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3091
  record_builtin_type (RID_MAX, "long double", long_double_type_node);
3092
 
3093
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3094
                                         get_identifier ("complex int"),
3095
                                         complex_integer_type_node));
3096
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3097
                                         get_identifier ("complex float"),
3098
                                         complex_float_type_node));
3099
  lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3100
                                         get_identifier ("complex double"),
3101
                                         complex_double_type_node));
3102
  lang_hooks.decls.pushdecl
3103
    (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3104
                 complex_long_double_type_node));
3105
 
3106
  if (c_dialect_cxx ())
3107
    /* For C++, make fileptr_type_node a distinct void * type until
3108
       FILE type is defined.  */
3109
    fileptr_type_node = build_variant_type_copy (ptr_type_node);
3110
 
3111
  record_builtin_type (RID_VOID, NULL, void_type_node);
3112
 
3113
  /* This node must not be shared.  */
3114
  void_zero_node = make_node (INTEGER_CST);
3115
  TREE_TYPE (void_zero_node) = void_type_node;
3116
 
3117
  void_list_node = build_void_list_node ();
3118
 
3119
  /* Make a type to be the domain of a few array types
3120
     whose domains don't really matter.
3121
     200 is small enough that it always fits in size_t
3122
     and large enough that it can hold most function names for the
3123
     initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
3124
  array_domain_type = build_index_type (size_int (200));
3125
 
3126
  /* Make a type for arrays of characters.
3127
     With luck nothing will ever really depend on the length of this
3128
     array type.  */
3129
  char_array_type_node
3130
    = build_array_type (char_type_node, array_domain_type);
3131
 
3132
  /* Likewise for arrays of ints.  */
3133
  int_array_type_node
3134
    = build_array_type (integer_type_node, array_domain_type);
3135
 
3136
  string_type_node = build_pointer_type (char_type_node);
3137
  const_string_type_node
3138
    = build_pointer_type (build_qualified_type
3139
                          (char_type_node, TYPE_QUAL_CONST));
3140
 
3141
  /* This is special for C++ so functions can be overloaded.  */
3142
  wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3143
  wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3144
  wchar_type_size = TYPE_PRECISION (wchar_type_node);
3145
  if (c_dialect_cxx ())
3146
    {
3147
      if (TYPE_UNSIGNED (wchar_type_node))
3148
        wchar_type_node = make_unsigned_type (wchar_type_size);
3149
      else
3150
        wchar_type_node = make_signed_type (wchar_type_size);
3151
      record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3152
    }
3153
  else
3154
    {
3155
      signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3156
      unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3157
    }
3158
 
3159
  /* This is for wide string constants.  */
3160
  wchar_array_type_node
3161
    = build_array_type (wchar_type_node, array_domain_type);
3162
 
3163
  wint_type_node =
3164
    TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3165
 
3166
  intmax_type_node =
3167
    TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3168
  uintmax_type_node =
3169
    TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3170
 
3171
  default_function_type = build_function_type (integer_type_node, NULL_TREE);
3172
  ptrdiff_type_node
3173
    = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3174
  unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3175
 
3176
  lang_hooks.decls.pushdecl
3177
    (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3178
                 va_list_type_node));
3179
 
3180
  if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3181
    {
3182
      va_list_arg_type_node = va_list_ref_type_node =
3183
        build_pointer_type (TREE_TYPE (va_list_type_node));
3184
    }
3185
  else
3186
    {
3187
      va_list_arg_type_node = va_list_type_node;
3188
      va_list_ref_type_node = build_reference_type (va_list_type_node);
3189
    }
3190
 
3191
#define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3192
  builtin_types[(int) ENUM] = VALUE;
3193
#define DEF_FUNCTION_TYPE_0(ENUM, RETURN)               \
3194
  builtin_types[(int) ENUM]                             \
3195
    = build_function_type (builtin_types[(int) RETURN], \
3196
                           void_list_node);
3197
#define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1)                         \
3198
  builtin_types[(int) ENUM]                                             \
3199
    = build_function_type (builtin_types[(int) RETURN],                 \
3200
                           tree_cons (NULL_TREE,                        \
3201
                                      builtin_types[(int) ARG1],        \
3202
                                      void_list_node));
3203
#define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2)   \
3204
  builtin_types[(int) ENUM]                             \
3205
    = build_function_type                               \
3206
      (builtin_types[(int) RETURN],                     \
3207
       tree_cons (NULL_TREE,                            \
3208
                  builtin_types[(int) ARG1],            \
3209
                  tree_cons (NULL_TREE,                 \
3210
                             builtin_types[(int) ARG2], \
3211
                             void_list_node)));
3212
#define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3)              \
3213
  builtin_types[(int) ENUM]                                              \
3214
    = build_function_type                                                \
3215
      (builtin_types[(int) RETURN],                                      \
3216
       tree_cons (NULL_TREE,                                             \
3217
                  builtin_types[(int) ARG1],                             \
3218
                  tree_cons (NULL_TREE,                                  \
3219
                             builtin_types[(int) ARG2],                  \
3220
                             tree_cons (NULL_TREE,                       \
3221
                                        builtin_types[(int) ARG3],       \
3222
                                        void_list_node))));
3223
#define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)       \
3224
  builtin_types[(int) ENUM]                                             \
3225
    = build_function_type                                               \
3226
      (builtin_types[(int) RETURN],                                     \
3227
       tree_cons (NULL_TREE,                                            \
3228
                  builtin_types[(int) ARG1],                            \
3229
                  tree_cons (NULL_TREE,                                 \
3230
                             builtin_types[(int) ARG2],                 \
3231
                             tree_cons                                  \
3232
                             (NULL_TREE,                                \
3233
                              builtin_types[(int) ARG3],                \
3234
                              tree_cons (NULL_TREE,                     \
3235
                                         builtin_types[(int) ARG4],     \
3236
                                         void_list_node)))));
3237
#define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3238
  builtin_types[(int) ENUM]                                             \
3239
    = build_function_type                                               \
3240
      (builtin_types[(int) RETURN],                                     \
3241
       tree_cons (NULL_TREE,                                            \
3242
                  builtin_types[(int) ARG1],                            \
3243
                  tree_cons (NULL_TREE,                                 \
3244
                             builtin_types[(int) ARG2],                 \
3245
                             tree_cons                                  \
3246
                             (NULL_TREE,                                \
3247
                              builtin_types[(int) ARG3],                \
3248
                              tree_cons (NULL_TREE,                     \
3249
                                         builtin_types[(int) ARG4],     \
3250
                                         tree_cons (NULL_TREE,          \
3251
                                              builtin_types[(int) ARG5],\
3252
                                              void_list_node))))));
3253
#define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3254
                            ARG6)                                       \
3255
  builtin_types[(int) ENUM]                                             \
3256
    = build_function_type                                               \
3257
      (builtin_types[(int) RETURN],                                     \
3258
       tree_cons (NULL_TREE,                                            \
3259
                  builtin_types[(int) ARG1],                            \
3260
                  tree_cons (NULL_TREE,                                 \
3261
                             builtin_types[(int) ARG2],                 \
3262
                             tree_cons                                  \
3263
                             (NULL_TREE,                                \
3264
                              builtin_types[(int) ARG3],                \
3265
                              tree_cons                                 \
3266
                              (NULL_TREE,                               \
3267
                               builtin_types[(int) ARG4],               \
3268
                               tree_cons (NULL_TREE,                    \
3269
                                         builtin_types[(int) ARG5],     \
3270
                                         tree_cons (NULL_TREE,          \
3271
                                              builtin_types[(int) ARG6],\
3272
                                              void_list_node)))))));
3273
#define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN)                           \
3274
  builtin_types[(int) ENUM]                                             \
3275
    = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3276
#define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1)                      \
3277
   builtin_types[(int) ENUM]                                             \
3278
    = build_function_type (builtin_types[(int) RETURN],          \
3279
                           tree_cons (NULL_TREE,                         \
3280
                                      builtin_types[(int) ARG1],         \
3281
                                      NULL_TREE));
3282
 
3283
#define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2)       \
3284
   builtin_types[(int) ENUM]                                    \
3285
    = build_function_type                                       \
3286
      (builtin_types[(int) RETURN],                             \
3287
       tree_cons (NULL_TREE,                                    \
3288
                  builtin_types[(int) ARG1],                    \
3289
                  tree_cons (NULL_TREE,                         \
3290
                             builtin_types[(int) ARG2],         \
3291
                             NULL_TREE)));
3292
 
3293
#define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3)         \
3294
   builtin_types[(int) ENUM]                                            \
3295
    = build_function_type                                               \
3296
      (builtin_types[(int) RETURN],                                     \
3297
       tree_cons (NULL_TREE,                                            \
3298
                  builtin_types[(int) ARG1],                            \
3299
                  tree_cons (NULL_TREE,                                 \
3300
                             builtin_types[(int) ARG2],                 \
3301
                             tree_cons (NULL_TREE,                      \
3302
                                        builtin_types[(int) ARG3],      \
3303
                                        NULL_TREE))));
3304
 
3305
#define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)   \
3306
   builtin_types[(int) ENUM]                                            \
3307
    = build_function_type                                               \
3308
      (builtin_types[(int) RETURN],                                     \
3309
       tree_cons (NULL_TREE,                                            \
3310
                  builtin_types[(int) ARG1],                            \
3311
                  tree_cons (NULL_TREE,                                 \
3312
                             builtin_types[(int) ARG2],                 \
3313
                             tree_cons (NULL_TREE,                      \
3314
                                        builtin_types[(int) ARG3],      \
3315
                                        tree_cons (NULL_TREE,           \
3316
                                              builtin_types[(int) ARG4],\
3317
                                              NULL_TREE)))));
3318
 
3319
#define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4,   \
3320
                                ARG5)                                   \
3321
   builtin_types[(int) ENUM]                                            \
3322
    = build_function_type                                               \
3323
      (builtin_types[(int) RETURN],                                     \
3324
       tree_cons (NULL_TREE,                                            \
3325
                  builtin_types[(int) ARG1],                            \
3326
                  tree_cons (NULL_TREE,                                 \
3327
                             builtin_types[(int) ARG2],                 \
3328
                             tree_cons                                  \
3329
                             (NULL_TREE,                                \
3330
                              builtin_types[(int) ARG3],                \
3331
                              tree_cons (NULL_TREE,                     \
3332
                                        builtin_types[(int) ARG4],      \
3333
                                        tree_cons (NULL_TREE,           \
3334
                                              builtin_types[(int) ARG5],\
3335
                                              NULL_TREE))))));
3336
 
3337
#define DEF_POINTER_TYPE(ENUM, TYPE)                    \
3338
  builtin_types[(int) ENUM]                             \
3339
    = build_pointer_type (builtin_types[(int) TYPE]);
3340
#include "builtin-types.def"
3341
#undef DEF_PRIMITIVE_TYPE
3342
#undef DEF_FUNCTION_TYPE_1
3343
#undef DEF_FUNCTION_TYPE_2
3344
#undef DEF_FUNCTION_TYPE_3
3345
#undef DEF_FUNCTION_TYPE_4
3346
#undef DEF_FUNCTION_TYPE_5
3347
#undef DEF_FUNCTION_TYPE_6
3348
#undef DEF_FUNCTION_TYPE_VAR_0
3349
#undef DEF_FUNCTION_TYPE_VAR_1
3350
#undef DEF_FUNCTION_TYPE_VAR_2
3351
#undef DEF_FUNCTION_TYPE_VAR_3
3352
#undef DEF_FUNCTION_TYPE_VAR_4
3353
#undef DEF_FUNCTION_TYPE_VAR_5
3354
#undef DEF_POINTER_TYPE
3355
  builtin_types[(int) BT_LAST] = NULL_TREE;
3356
 
3357
  c_init_attributes ();
3358
 
3359
#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3360
                    NONANSI_P, ATTRS, IMPLICIT, COND)                   \
3361
  if (NAME && COND)                                                     \
3362
    def_builtin_1 (ENUM, NAME, CLASS,                                   \
3363
                   builtin_types[(int) TYPE],                           \
3364
                   builtin_types[(int) LIBTYPE],                        \
3365
                   BOTH_P, FALLBACK_P, NONANSI_P,                       \
3366
                   built_in_attributes[(int) ATTRS], IMPLICIT);
3367
#include "builtins.def"
3368
#undef DEF_BUILTIN
3369
 
3370
  build_common_builtin_nodes ();
3371
 
3372
  targetm.init_builtins ();
3373
  if (flag_mudflap)
3374
    mudflap_init ();
3375
 
3376
  main_identifier_node = get_identifier ("main");
3377
 
3378
  /* Create the built-in __null node.  It is important that this is
3379
     not shared.  */
3380
  null_node = make_node (INTEGER_CST);
3381
  TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3382
}
3383
 
3384
/* Look up the function in built_in_decls that corresponds to DECL
3385
   and set ASMSPEC as its user assembler name.  DECL must be a
3386
   function decl that declares a builtin.  */
3387
 
3388
void
3389
set_builtin_user_assembler_name (tree decl, const char *asmspec)
3390
{
3391
  tree builtin;
3392
  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3393
              && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3394
              && asmspec != 0);
3395
 
3396
  builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3397
  set_user_assembler_name (builtin, asmspec);
3398
  if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3399
    init_block_move_fn (asmspec);
3400
  else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3401
    init_block_clear_fn (asmspec);
3402
}
3403
 
3404
/* The number of named compound-literals generated thus far.  */
3405
static GTY(()) int compound_literal_number;
3406
 
3407
/* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal.  */
3408
 
3409
void
3410
set_compound_literal_name (tree decl)
3411
{
3412
  char *name;
3413
  ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3414
                           compound_literal_number);
3415
  compound_literal_number++;
3416
  DECL_NAME (decl) = get_identifier (name);
3417
}
3418
 
3419
tree
3420
build_va_arg (tree expr, tree type)
3421
{
3422
  return build1 (VA_ARG_EXPR, type, expr);
3423
}
3424
 
3425
 
3426
/* Linked list of disabled built-in functions.  */
3427
 
3428
typedef struct disabled_builtin
3429
{
3430
  const char *name;
3431
  struct disabled_builtin *next;
3432
} disabled_builtin;
3433
static disabled_builtin *disabled_builtins = NULL;
3434
 
3435
static bool builtin_function_disabled_p (const char *);
3436
 
3437
/* Disable a built-in function specified by -fno-builtin-NAME.  If NAME
3438
   begins with "__builtin_", give an error.  */
3439
 
3440
void
3441
disable_builtin_function (const char *name)
3442
{
3443
  if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3444
    error ("cannot disable built-in function %qs", name);
3445
  else
3446
    {
3447
      disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3448
      new_disabled_builtin->name = name;
3449
      new_disabled_builtin->next = disabled_builtins;
3450
      disabled_builtins = new_disabled_builtin;
3451
    }
3452
}
3453
 
3454
 
3455
/* Return true if the built-in function NAME has been disabled, false
3456
   otherwise.  */
3457
 
3458
static bool
3459
builtin_function_disabled_p (const char *name)
3460
{
3461
  disabled_builtin *p;
3462
  for (p = disabled_builtins; p != NULL; p = p->next)
3463
    {
3464
      if (strcmp (name, p->name) == 0)
3465
        return true;
3466
    }
3467
  return false;
3468
}
3469
 
3470
 
3471
/* Worker for DEF_BUILTIN.
3472
   Possibly define a builtin function with one or two names.
3473
   Does not declare a non-__builtin_ function if flag_no_builtin, or if
3474
   nonansi_p and flag_no_nonansi_builtin.  */
3475
 
3476
static void
3477
def_builtin_1 (enum built_in_function fncode,
3478
               const char *name,
3479
               enum built_in_class fnclass,
3480
               tree fntype, tree libtype,
3481
               bool both_p, bool fallback_p, bool nonansi_p,
3482
               tree fnattrs, bool implicit_p)
3483
{
3484
  tree decl;
3485
  const char *libname;
3486
 
3487
  gcc_assert ((!both_p && !fallback_p)
3488
              || !strncmp (name, "__builtin_",
3489
                           strlen ("__builtin_")));
3490
 
3491
  libname = name + strlen ("__builtin_");
3492
  decl = lang_hooks.builtin_function (name, fntype, fncode, fnclass,
3493
                                      (fallback_p ? libname : NULL),
3494
                                      fnattrs);
3495
  if (both_p
3496
      && !flag_no_builtin && !builtin_function_disabled_p (libname)
3497
      && !(nonansi_p && flag_no_nonansi_builtin))
3498
    lang_hooks.builtin_function (libname, libtype, fncode, fnclass,
3499
                                 NULL, fnattrs);
3500
 
3501
  built_in_decls[(int) fncode] = decl;
3502
  if (implicit_p)
3503
    implicit_built_in_decls[(int) fncode] = decl;
3504
}
3505
 
3506
/* Nonzero if the type T promotes to int.  This is (nearly) the
3507
   integral promotions defined in ISO C99 6.3.1.1/2.  */
3508
 
3509
bool
3510
c_promoting_integer_type_p (tree t)
3511
{
3512
  switch (TREE_CODE (t))
3513
    {
3514
    case INTEGER_TYPE:
3515
      return (TYPE_MAIN_VARIANT (t) == char_type_node
3516
              || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3517
              || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3518
              || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3519
              || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3520
              || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3521
 
3522
    case ENUMERAL_TYPE:
3523
      /* ??? Technically all enumerations not larger than an int
3524
         promote to an int.  But this is used along code paths
3525
         that only want to notice a size change.  */
3526
      return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3527
 
3528
    case BOOLEAN_TYPE:
3529
      return 1;
3530
 
3531
    default:
3532
      return 0;
3533
    }
3534
}
3535
 
3536
/* Return 1 if PARMS specifies a fixed number of parameters
3537
   and none of their types is affected by default promotions.  */
3538
 
3539
int
3540
self_promoting_args_p (tree parms)
3541
{
3542
  tree t;
3543
  for (t = parms; t; t = TREE_CHAIN (t))
3544
    {
3545
      tree type = TREE_VALUE (t);
3546
 
3547
      if (TREE_CHAIN (t) == 0 && type != void_type_node)
3548
        return 0;
3549
 
3550
      if (type == 0)
3551
        return 0;
3552
 
3553
      if (TYPE_MAIN_VARIANT (type) == float_type_node)
3554
        return 0;
3555
 
3556
      if (c_promoting_integer_type_p (type))
3557
        return 0;
3558
    }
3559
  return 1;
3560
}
3561
 
3562
/* Recursively examines the array elements of TYPE, until a non-array
3563
   element type is found.  */
3564
 
3565
tree
3566
strip_array_types (tree type)
3567
{
3568
  while (TREE_CODE (type) == ARRAY_TYPE)
3569
    type = TREE_TYPE (type);
3570
 
3571
  return type;
3572
}
3573
 
3574
/* Recursively remove any '*' or '&' operator from TYPE.  */
3575
tree
3576
strip_pointer_operator (tree t)
3577
{
3578
  while (POINTER_TYPE_P (t))
3579
    t = TREE_TYPE (t);
3580
  return t;
3581
}
3582
 
3583
/* Used to compare case labels.  K1 and K2 are actually tree nodes
3584
   representing case labels, or NULL_TREE for a `default' label.
3585
   Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3586
   K2, and 0 if K1 and K2 are equal.  */
3587
 
3588
int
3589
case_compare (splay_tree_key k1, splay_tree_key k2)
3590
{
3591
  /* Consider a NULL key (such as arises with a `default' label) to be
3592
     smaller than anything else.  */
3593
  if (!k1)
3594
    return k2 ? -1 : 0;
3595
  else if (!k2)
3596
    return k1 ? 1 : 0;
3597
 
3598
  return tree_int_cst_compare ((tree) k1, (tree) k2);
3599
}
3600
 
3601
/* Process a case label for the range LOW_VALUE ... HIGH_VALUE.  If
3602
   LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3603
   actually a `default' label.  If only HIGH_VALUE is NULL_TREE, then
3604
   case label was declared using the usual C/C++ syntax, rather than
3605
   the GNU case range extension.  CASES is a tree containing all the
3606
   case ranges processed so far; COND is the condition for the
3607
   switch-statement itself.  Returns the CASE_LABEL_EXPR created, or
3608
   ERROR_MARK_NODE if no CASE_LABEL_EXPR is created.  */
3609
 
3610
tree
3611
c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3612
                  tree low_value, tree high_value)
3613
{
3614
  tree type;
3615
  tree label;
3616
  tree case_label;
3617
  splay_tree_node node;
3618
 
3619
  /* Create the LABEL_DECL itself.  */
3620
  label = create_artificial_label ();
3621
 
3622
  /* If there was an error processing the switch condition, bail now
3623
     before we get more confused.  */
3624
  if (!cond || cond == error_mark_node)
3625
    goto error_out;
3626
 
3627
  if ((low_value && TREE_TYPE (low_value)
3628
       && POINTER_TYPE_P (TREE_TYPE (low_value)))
3629
      || (high_value && TREE_TYPE (high_value)
3630
          && POINTER_TYPE_P (TREE_TYPE (high_value))))
3631
    {
3632
      error ("pointers are not permitted as case values");
3633
      goto error_out;
3634
    }
3635
 
3636
  /* Case ranges are a GNU extension.  */
3637
  if (high_value && pedantic)
3638
    pedwarn ("range expressions in switch statements are non-standard");
3639
 
3640
  type = TREE_TYPE (cond);
3641
  if (low_value)
3642
    {
3643
      low_value = check_case_value (low_value);
3644
      low_value = convert_and_check (type, low_value);
3645
      if (low_value == error_mark_node)
3646
        goto error_out;
3647
    }
3648
  if (high_value)
3649
    {
3650
      high_value = check_case_value (high_value);
3651
      high_value = convert_and_check (type, high_value);
3652
      if (high_value == error_mark_node)
3653
        goto error_out;
3654
    }
3655
 
3656
  if (low_value && high_value)
3657
    {
3658
      /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3659
         really a case range, even though it was written that way.
3660
         Remove the HIGH_VALUE to simplify later processing.  */
3661
      if (tree_int_cst_equal (low_value, high_value))
3662
        high_value = NULL_TREE;
3663
      else if (!tree_int_cst_lt (low_value, high_value))
3664
        warning (0, "empty range specified");
3665
    }
3666
 
3667
  /* See if the case is in range of the type of the original testing
3668
     expression.  If both low_value and high_value are out of range,
3669
     don't insert the case label and return NULL_TREE.  */
3670
  if (low_value
3671
      && !check_case_bounds (type, orig_type,
3672
                             &low_value, high_value ? &high_value : NULL))
3673
    return NULL_TREE;
3674
 
3675
  /* Look up the LOW_VALUE in the table of case labels we already
3676
     have.  */
3677
  node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3678
  /* If there was not an exact match, check for overlapping ranges.
3679
     There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3680
     that's a `default' label and the only overlap is an exact match.  */
3681
  if (!node && (low_value || high_value))
3682
    {
3683
      splay_tree_node low_bound;
3684
      splay_tree_node high_bound;
3685
 
3686
      /* Even though there wasn't an exact match, there might be an
3687
         overlap between this case range and another case range.
3688
         Since we've (inductively) not allowed any overlapping case
3689
         ranges, we simply need to find the greatest low case label
3690
         that is smaller that LOW_VALUE, and the smallest low case
3691
         label that is greater than LOW_VALUE.  If there is an overlap
3692
         it will occur in one of these two ranges.  */
3693
      low_bound = splay_tree_predecessor (cases,
3694
                                          (splay_tree_key) low_value);
3695
      high_bound = splay_tree_successor (cases,
3696
                                         (splay_tree_key) low_value);
3697
 
3698
      /* Check to see if the LOW_BOUND overlaps.  It is smaller than
3699
         the LOW_VALUE, so there is no need to check unless the
3700
         LOW_BOUND is in fact itself a case range.  */
3701
      if (low_bound
3702
          && CASE_HIGH ((tree) low_bound->value)
3703
          && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3704
                                    low_value) >= 0)
3705
        node = low_bound;
3706
      /* Check to see if the HIGH_BOUND overlaps.  The low end of that
3707
         range is bigger than the low end of the current range, so we
3708
         are only interested if the current range is a real range, and
3709
         not an ordinary case label.  */
3710
      else if (high_bound
3711
               && high_value
3712
               && (tree_int_cst_compare ((tree) high_bound->key,
3713
                                         high_value)
3714
                   <= 0))
3715
        node = high_bound;
3716
    }
3717
  /* If there was an overlap, issue an error.  */
3718
  if (node)
3719
    {
3720
      tree duplicate = CASE_LABEL ((tree) node->value);
3721
 
3722
      if (high_value)
3723
        {
3724
          error ("duplicate (or overlapping) case value");
3725
          error ("%Jthis is the first entry overlapping that value", duplicate);
3726
        }
3727
      else if (low_value)
3728
        {
3729
          error ("duplicate case value") ;
3730
          error ("%Jpreviously used here", duplicate);
3731
        }
3732
      else
3733
        {
3734
          error ("multiple default labels in one switch");
3735
          error ("%Jthis is the first default label", duplicate);
3736
        }
3737
      goto error_out;
3738
    }
3739
 
3740
  /* Add a CASE_LABEL to the statement-tree.  */
3741
  case_label = add_stmt (build_case_label (low_value, high_value, label));
3742
  /* Register this case label in the splay tree.  */
3743
  splay_tree_insert (cases,
3744
                     (splay_tree_key) low_value,
3745
                     (splay_tree_value) case_label);
3746
 
3747
  return case_label;
3748
 
3749
 error_out:
3750
  /* Add a label so that the back-end doesn't think that the beginning of
3751
     the switch is unreachable.  Note that we do not add a case label, as
3752
     that just leads to duplicates and thence to failure later on.  */
3753
  if (!cases->root)
3754
    {
3755
      tree t = create_artificial_label ();
3756
      add_stmt (build_stmt (LABEL_EXPR, t));
3757
    }
3758
  return error_mark_node;
3759
}
3760
 
3761
/* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
3762
   Used to verify that case values match up with enumerator values.  */
3763
 
3764
static void
3765
match_case_to_enum_1 (tree key, tree type, tree label)
3766
{
3767
  char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
3768
 
3769
  /* ??? Not working too hard to print the double-word value.
3770
     Should perhaps be done with %lwd in the diagnostic routines?  */
3771
  if (TREE_INT_CST_HIGH (key) == 0)
3772
    snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
3773
              TREE_INT_CST_LOW (key));
3774
  else if (!TYPE_UNSIGNED (type)
3775
           && TREE_INT_CST_HIGH (key) == -1
3776
           && TREE_INT_CST_LOW (key) != 0)
3777
    snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
3778
              -TREE_INT_CST_LOW (key));
3779
  else
3780
    snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
3781
              TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
3782
 
3783
  if (TYPE_NAME (type) == 0)
3784
    warning (0, "%Jcase value %qs not in enumerated type",
3785
             CASE_LABEL (label), buf);
3786
  else
3787
    warning (0, "%Jcase value %qs not in enumerated type %qT",
3788
             CASE_LABEL (label), buf, type);
3789
}
3790
 
3791
static int
3792
match_case_to_enum (splay_tree_node node, void *data)
3793
{
3794
  tree label = (tree) node->value;
3795
  tree type = (tree) data;
3796
 
3797
  /* Skip default case.  */
3798
  if (!CASE_LOW (label))
3799
    return 0;
3800
 
3801
  /* If TREE_ADDRESSABLE is not set, that means CASE_LOW did not appear
3802
     when we did our enum->case scan.  Reset our scratch bit after.  */
3803
  if (!TREE_ADDRESSABLE (label))
3804
    match_case_to_enum_1 (CASE_LOW (label), type, label);
3805
  else
3806
    TREE_ADDRESSABLE (label) = 0;
3807
 
3808
  /* If CASE_HIGH is non-null, we have a range.  Here we must search.
3809
     Note that the old code in stmt.c did not check for the values in
3810
     the range either, just the endpoints.  */
3811
  if (CASE_HIGH (label))
3812
    {
3813
      tree chain, key = CASE_HIGH (label);
3814
 
3815
      for (chain = TYPE_VALUES (type);
3816
           chain && !tree_int_cst_equal (key, TREE_VALUE (chain));
3817
           chain = TREE_CHAIN (chain))
3818
        continue;
3819
      if (!chain)
3820
        match_case_to_enum_1 (key, type, label);
3821
    }
3822
 
3823
  return 0;
3824
}
3825
 
3826
/* Handle -Wswitch*.  Called from the front end after parsing the
3827
   switch construct.  */
3828
/* ??? Should probably be somewhere generic, since other languages
3829
   besides C and C++ would want this.  At the moment, however, C/C++
3830
   are the only tree-ssa languages that support enumerations at all,
3831
   so the point is moot.  */
3832
 
3833
void
3834
c_do_switch_warnings (splay_tree cases, location_t switch_location,
3835
                      tree type, tree cond)
3836
{
3837
  splay_tree_node default_node;
3838
 
3839
  if (!warn_switch && !warn_switch_enum && !warn_switch_default)
3840
    return;
3841
 
3842
  default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
3843
  if (!default_node)
3844
    warning (OPT_Wswitch_default, "%Hswitch missing default case",
3845
             &switch_location);
3846
 
3847
  /* If the switch expression was an enumerated type, check that
3848
     exactly all enumeration literals are covered by the cases.
3849
     The check is made when -Wswitch was specified and there is no
3850
     default case, or when -Wswitch-enum was specified.  */
3851
  if (((warn_switch && !default_node) || warn_switch_enum)
3852
      && type && TREE_CODE (type) == ENUMERAL_TYPE
3853
      && TREE_CODE (cond) != INTEGER_CST)
3854
    {
3855
      tree chain;
3856
 
3857
      /* The time complexity here is O(N*lg(N)) worst case, but for the
3858
         common case of monotonically increasing enumerators, it is
3859
         O(N), since the nature of the splay tree will keep the next
3860
         element adjacent to the root at all times.  */
3861
 
3862
      for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
3863
        {
3864
          splay_tree_node node
3865
            = splay_tree_lookup (cases, (splay_tree_key) TREE_VALUE (chain));
3866
          if (!node)
3867
            {
3868
              tree low_value = TREE_VALUE (chain);
3869
              splay_tree_node low_bound;
3870
              splay_tree_node high_bound;
3871
              /* Even though there wasn't an exact match, there might be a
3872
                 case range which includes the enumator's value.  */
3873
              low_bound = splay_tree_predecessor (cases,
3874
                                                  (splay_tree_key) low_value);
3875
              high_bound = splay_tree_successor (cases,
3876
                                                 (splay_tree_key) low_value);
3877
 
3878
              /* It is smaller than the LOW_VALUE, so there is no need to check
3879
                 unless the LOW_BOUND is in fact itself a case range.  */
3880
              if (low_bound
3881
                  && CASE_HIGH ((tree) low_bound->value)
3882
                  && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3883
                                            low_value) >= 0)
3884
                node = low_bound;
3885
              /* The low end of that range is bigger than the current value. */
3886
              else if (high_bound
3887
                       && (tree_int_cst_compare ((tree) high_bound->key,
3888
                                                 low_value)
3889
                           <= 0))
3890
                node = high_bound;
3891
            }
3892
          if (node)
3893
            {
3894
              /* Mark the CASE_LOW part of the case entry as seen, so
3895
                 that we save time later.  Choose TREE_ADDRESSABLE
3896
                 randomly as a bit that won't have been set to-date.  */
3897
              tree label = (tree) node->value;
3898
              TREE_ADDRESSABLE (label) = 1;
3899
            }
3900
          else
3901
            {
3902
              /* Warn if there are enumerators that don't correspond to
3903
                 case expressions.  */
3904
              warning (0, "%Henumeration value %qE not handled in switch",
3905
                       &switch_location, TREE_PURPOSE (chain));
3906
            }
3907
        }
3908
 
3909
      /* Warn if there are case expressions that don't correspond to
3910
         enumerators.  This can occur since C and C++ don't enforce
3911
         type-checking of assignments to enumeration variables.
3912
 
3913
         The time complexity here is O(N**2) worst case, since we've
3914
         not sorted the enumeration values.  However, in the absence
3915
         of case ranges this is O(N), since all single cases that
3916
         corresponded to enumerations have been marked above.  */
3917
 
3918
      splay_tree_foreach (cases, match_case_to_enum, type);
3919
    }
3920
}
3921
 
3922
/* Finish an expression taking the address of LABEL (an
3923
   IDENTIFIER_NODE).  Returns an expression for the address.  */
3924
 
3925
tree
3926
finish_label_address_expr (tree label)
3927
{
3928
  tree result;
3929
 
3930
  if (pedantic)
3931
    pedwarn ("taking the address of a label is non-standard");
3932
 
3933
  if (label == error_mark_node)
3934
    return error_mark_node;
3935
 
3936
  label = lookup_label (label);
3937
  if (label == NULL_TREE)
3938
    result = null_pointer_node;
3939
  else
3940
    {
3941
      TREE_USED (label) = 1;
3942
      result = build1 (ADDR_EXPR, ptr_type_node, label);
3943
      /* The current function in not necessarily uninlinable.
3944
         Computed gotos are incompatible with inlining, but the value
3945
         here could be used only in a diagnostic, for example.  */
3946
    }
3947
 
3948
  return result;
3949
}
3950
 
3951
/* Hook used by expand_expr to expand language-specific tree codes.  */
3952
/* The only things that should go here are bits needed to expand
3953
   constant initializers.  Everything else should be handled by the
3954
   gimplification routines.  */
3955
 
3956
rtx
3957
c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
3958
               int modifier /* Actually enum_modifier.  */,
3959
               rtx *alt_rtl)
3960
{
3961
  switch (TREE_CODE (exp))
3962
    {
3963
    case COMPOUND_LITERAL_EXPR:
3964
      {
3965
        /* Initialize the anonymous variable declared in the compound
3966
           literal, then return the variable.  */
3967
        tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
3968
        emit_local_var (decl);
3969
        return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
3970
      }
3971
 
3972
    default:
3973
      gcc_unreachable ();
3974
    }
3975
}
3976
 
3977
/* Hook used by staticp to handle language-specific tree codes.  */
3978
 
3979
tree
3980
c_staticp (tree exp)
3981
{
3982
  return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
3983
          && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
3984
          ? exp : NULL);
3985
}
3986
 
3987
 
3988
/* Given a boolean expression ARG, return a tree representing an increment
3989
   or decrement (as indicated by CODE) of ARG.  The front end must check for
3990
   invalid cases (e.g., decrement in C++).  */
3991
tree
3992
boolean_increment (enum tree_code code, tree arg)
3993
{
3994
  tree val;
3995
  tree true_res = boolean_true_node;
3996
 
3997
  arg = stabilize_reference (arg);
3998
  switch (code)
3999
    {
4000
    case PREINCREMENT_EXPR:
4001
      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4002
      break;
4003
    case POSTINCREMENT_EXPR:
4004
      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4005
      arg = save_expr (arg);
4006
      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4007
      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4008
      break;
4009
    case PREDECREMENT_EXPR:
4010
      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4011
                    invert_truthvalue (arg));
4012
      break;
4013
    case POSTDECREMENT_EXPR:
4014
      val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4015
                    invert_truthvalue (arg));
4016
      arg = save_expr (arg);
4017
      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4018
      val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4019
      break;
4020
    default:
4021
      gcc_unreachable ();
4022
    }
4023
  TREE_SIDE_EFFECTS (val) = 1;
4024
  return val;
4025
}
4026
 
4027
/* Built-in macros for stddef.h, that require macros defined in this
4028
   file.  */
4029
void
4030
c_stddef_cpp_builtins(void)
4031
{
4032
  builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4033
  builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4034
  builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4035
  builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4036
  builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4037
  builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
4038
}
4039
 
4040
static void
4041
c_init_attributes (void)
4042
{
4043
  /* Fill in the built_in_attributes array.  */
4044
#define DEF_ATTR_NULL_TREE(ENUM)                                \
4045
  built_in_attributes[(int) ENUM] = NULL_TREE;
4046
#define DEF_ATTR_INT(ENUM, VALUE)                               \
4047
  built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4048
#define DEF_ATTR_IDENT(ENUM, STRING)                            \
4049
  built_in_attributes[(int) ENUM] = get_identifier (STRING);
4050
#define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4051
  built_in_attributes[(int) ENUM]                       \
4052
    = tree_cons (built_in_attributes[(int) PURPOSE],    \
4053
                 built_in_attributes[(int) VALUE],      \
4054
                 built_in_attributes[(int) CHAIN]);
4055
#include "builtin-attrs.def"
4056
#undef DEF_ATTR_NULL_TREE
4057
#undef DEF_ATTR_INT
4058
#undef DEF_ATTR_IDENT
4059
#undef DEF_ATTR_TREE_LIST
4060
}
4061
 
4062
/* Attribute handlers common to C front ends.  */
4063
 
4064
/* Handle a "packed" attribute; arguments as in
4065
   struct attribute_spec.handler.  */
4066
 
4067
static tree
4068
handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4069
                         int flags, bool *no_add_attrs)
4070
{
4071
  if (TYPE_P (*node))
4072
    {
4073
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4074
        *node = build_variant_type_copy (*node);
4075
      TYPE_PACKED (*node) = 1;
4076
      if (TYPE_MAIN_VARIANT (*node) == *node)
4077
        {
4078
          /* If it is the main variant, then pack the other variants
4079
             too. This happens in,
4080
 
4081
             struct Foo {
4082
               struct Foo const *ptr; // creates a variant w/o packed flag
4083
             } __ attribute__((packed)); // packs it now.
4084
           */
4085
          tree probe;
4086
 
4087
          for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe))
4088
            TYPE_PACKED (probe) = 1;
4089
        }
4090
    }
4091
  else if (TREE_CODE (*node) == FIELD_DECL)
4092
    {
4093
      if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4094
        warning (OPT_Wattributes,
4095
                 "%qE attribute ignored for field of type %qT",
4096
                 name, TREE_TYPE (*node));
4097
      else
4098
        DECL_PACKED (*node) = 1;
4099
    }
4100
  /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4101
     used for DECL_REGISTER.  It wouldn't mean anything anyway.
4102
     We can't set DECL_PACKED on the type of a TYPE_DECL, because
4103
     that changes what the typedef is typing.  */
4104
  else
4105
    {
4106
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4107
      *no_add_attrs = true;
4108
    }
4109
 
4110
  return NULL_TREE;
4111
}
4112
 
4113
/* Handle a "nocommon" attribute; arguments as in
4114
   struct attribute_spec.handler.  */
4115
 
4116
static tree
4117
handle_nocommon_attribute (tree *node, tree name,
4118
                           tree ARG_UNUSED (args),
4119
                           int ARG_UNUSED (flags), bool *no_add_attrs)
4120
{
4121
  if (TREE_CODE (*node) == VAR_DECL)
4122
    DECL_COMMON (*node) = 0;
4123
  else
4124
    {
4125
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4126
      *no_add_attrs = true;
4127
    }
4128
 
4129
  return NULL_TREE;
4130
}
4131
 
4132
/* Handle a "common" attribute; arguments as in
4133
   struct attribute_spec.handler.  */
4134
 
4135
static tree
4136
handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4137
                         int ARG_UNUSED (flags), bool *no_add_attrs)
4138
{
4139
  if (TREE_CODE (*node) == VAR_DECL)
4140
    DECL_COMMON (*node) = 1;
4141
  else
4142
    {
4143
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4144
      *no_add_attrs = true;
4145
    }
4146
 
4147
  return NULL_TREE;
4148
}
4149
 
4150
/* Handle a "noreturn" attribute; arguments as in
4151
   struct attribute_spec.handler.  */
4152
 
4153
static tree
4154
handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4155
                           int ARG_UNUSED (flags), bool *no_add_attrs)
4156
{
4157
  tree type = TREE_TYPE (*node);
4158
 
4159
  /* See FIXME comment in c_common_attribute_table.  */
4160
  if (TREE_CODE (*node) == FUNCTION_DECL)
4161
    TREE_THIS_VOLATILE (*node) = 1;
4162
  else if (TREE_CODE (type) == POINTER_TYPE
4163
           && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4164
    TREE_TYPE (*node)
4165
      = build_pointer_type
4166
        (build_type_variant (TREE_TYPE (type),
4167
                             TYPE_READONLY (TREE_TYPE (type)), 1));
4168
  else
4169
    {
4170
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4171
      *no_add_attrs = true;
4172
    }
4173
 
4174
  return NULL_TREE;
4175
}
4176
 
4177
/* Handle a "noinline" attribute; arguments as in
4178
   struct attribute_spec.handler.  */
4179
 
4180
static tree
4181
handle_noinline_attribute (tree *node, tree name,
4182
                           tree ARG_UNUSED (args),
4183
                           int ARG_UNUSED (flags), bool *no_add_attrs)
4184
{
4185
  if (TREE_CODE (*node) == FUNCTION_DECL)
4186
    DECL_UNINLINABLE (*node) = 1;
4187
  else
4188
    {
4189
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4190
      *no_add_attrs = true;
4191
    }
4192
 
4193
  return NULL_TREE;
4194
}
4195
 
4196
/* Handle a "always_inline" attribute; arguments as in
4197
   struct attribute_spec.handler.  */
4198
 
4199
static tree
4200
handle_always_inline_attribute (tree *node, tree name,
4201
                                tree ARG_UNUSED (args),
4202
                                int ARG_UNUSED (flags),
4203
                                bool *no_add_attrs)
4204
{
4205
  if (TREE_CODE (*node) == FUNCTION_DECL)
4206
    {
4207
      /* Do nothing else, just set the attribute.  We'll get at
4208
         it later with lookup_attribute.  */
4209
    }
4210
  else
4211
    {
4212
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4213
      *no_add_attrs = true;
4214
    }
4215
 
4216
  return NULL_TREE;
4217
}
4218
 
4219
/* Handle a "flatten" attribute; arguments as in
4220
   struct attribute_spec.handler.  */
4221
 
4222
static tree
4223
handle_flatten_attribute (tree *node, tree name,
4224
                          tree args ATTRIBUTE_UNUSED,
4225
                          int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4226
{
4227
  if (TREE_CODE (*node) == FUNCTION_DECL)
4228
    /* Do nothing else, just set the attribute.  We'll get at
4229
       it later with lookup_attribute.  */
4230
    ;
4231
  else
4232
    {
4233
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4234
      *no_add_attrs = true;
4235
    }
4236
 
4237
  return NULL_TREE;
4238
}
4239
 
4240
 
4241
/* Handle a "used" attribute; arguments as in
4242
   struct attribute_spec.handler.  */
4243
 
4244
static tree
4245
handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4246
                       int ARG_UNUSED (flags), bool *no_add_attrs)
4247
{
4248
  tree node = *pnode;
4249
 
4250
  if (TREE_CODE (node) == FUNCTION_DECL
4251
      || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4252
    {
4253
      TREE_USED (node) = 1;
4254
      DECL_PRESERVE_P (node) = 1;
4255
    }
4256
  else
4257
    {
4258
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4259
      *no_add_attrs = true;
4260
    }
4261
 
4262
  return NULL_TREE;
4263
}
4264
 
4265
/* Handle a "unused" attribute; arguments as in
4266
   struct attribute_spec.handler.  */
4267
 
4268
static tree
4269
handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4270
                         int flags, bool *no_add_attrs)
4271
{
4272
  if (DECL_P (*node))
4273
    {
4274
      tree decl = *node;
4275
 
4276
      if (TREE_CODE (decl) == PARM_DECL
4277
          || TREE_CODE (decl) == VAR_DECL
4278
          || TREE_CODE (decl) == FUNCTION_DECL
4279
          || TREE_CODE (decl) == LABEL_DECL
4280
          || TREE_CODE (decl) == TYPE_DECL)
4281
        TREE_USED (decl) = 1;
4282
      else
4283
        {
4284
          warning (OPT_Wattributes, "%qE attribute ignored", name);
4285
          *no_add_attrs = true;
4286
        }
4287
    }
4288
  else
4289
    {
4290
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4291
        *node = build_variant_type_copy (*node);
4292
      TREE_USED (*node) = 1;
4293
    }
4294
 
4295
  return NULL_TREE;
4296
}
4297
 
4298
/* Handle a "externally_visible" attribute; arguments as in
4299
   struct attribute_spec.handler.  */
4300
 
4301
static tree
4302
handle_externally_visible_attribute (tree *pnode, tree name,
4303
                                     tree ARG_UNUSED (args),
4304
                                     int ARG_UNUSED (flags),
4305
                                     bool *no_add_attrs)
4306
{
4307
  tree node = *pnode;
4308
 
4309
  if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL)
4310
      || !TREE_PUBLIC (node))
4311
    {
4312
      warning (OPT_Wattributes,
4313
               "%qE attribute have effect only on public objects", name);
4314
      *no_add_attrs = true;
4315
    }
4316
  else if (TREE_CODE (node) == FUNCTION_DECL)
4317
    {
4318
      struct cgraph_node *n = cgraph_node (node);
4319
      n->local.externally_visible = true;
4320
      if (n->local.finalized)
4321
        cgraph_mark_needed_node (n);
4322
    }
4323
  else if (TREE_CODE (node) == VAR_DECL)
4324
    {
4325
      struct cgraph_varpool_node *n = cgraph_varpool_node (node);
4326
      n->externally_visible = true;
4327
      if (n->finalized)
4328
        cgraph_varpool_mark_needed_node (n);
4329
    }
4330
  else
4331
    {
4332
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4333
      *no_add_attrs = true;
4334
    }
4335
 
4336
  return NULL_TREE;
4337
}
4338
 
4339
/* Handle a "const" attribute; arguments as in
4340
   struct attribute_spec.handler.  */
4341
 
4342
static tree
4343
handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4344
                        int ARG_UNUSED (flags), bool *no_add_attrs)
4345
{
4346
  tree type = TREE_TYPE (*node);
4347
 
4348
  /* See FIXME comment on noreturn in c_common_attribute_table.  */
4349
  if (TREE_CODE (*node) == FUNCTION_DECL)
4350
    TREE_READONLY (*node) = 1;
4351
  else if (TREE_CODE (type) == POINTER_TYPE
4352
           && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4353
    TREE_TYPE (*node)
4354
      = build_pointer_type
4355
        (build_type_variant (TREE_TYPE (type), 1,
4356
                             TREE_THIS_VOLATILE (TREE_TYPE (type))));
4357
  else
4358
    {
4359
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4360
      *no_add_attrs = true;
4361
    }
4362
 
4363
  return NULL_TREE;
4364
}
4365
 
4366
/* Handle a "transparent_union" attribute; arguments as in
4367
   struct attribute_spec.handler.  */
4368
 
4369
static tree
4370
handle_transparent_union_attribute (tree *node, tree name,
4371
                                    tree ARG_UNUSED (args), int flags,
4372
                                    bool *no_add_attrs)
4373
{
4374
  tree type = NULL;
4375
 
4376
  *no_add_attrs = true;
4377
 
4378
  if (DECL_P (*node))
4379
    {
4380
      if (TREE_CODE (*node) != TYPE_DECL)
4381
        goto ignored;
4382
      node = &TREE_TYPE (*node);
4383
      type = *node;
4384
    }
4385
  else if (TYPE_P (*node))
4386
    type = *node;
4387
  else
4388
    goto ignored;
4389
 
4390
  if (TREE_CODE (type) == UNION_TYPE)
4391
    {
4392
      /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4393
         the code in finish_struct.  */
4394
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4395
        {
4396
          if (TYPE_FIELDS (type) == NULL_TREE
4397
              || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
4398
            goto ignored;
4399
 
4400
          /* A type variant isn't good enough, since we don't a cast
4401
             to such a type removed as a no-op.  */
4402
          *node = type = build_duplicate_type (type);
4403
        }
4404
 
4405
      TYPE_TRANSPARENT_UNION (type) = 1;
4406
      return NULL_TREE;
4407
    }
4408
 
4409
 ignored:
4410
  warning (OPT_Wattributes, "%qE attribute ignored", name);
4411
  return NULL_TREE;
4412
}
4413
 
4414
/* Handle a "constructor" attribute; arguments as in
4415
   struct attribute_spec.handler.  */
4416
 
4417
static tree
4418
handle_constructor_attribute (tree *node, tree name,
4419
                              tree ARG_UNUSED (args),
4420
                              int ARG_UNUSED (flags),
4421
                              bool *no_add_attrs)
4422
{
4423
  tree decl = *node;
4424
  tree type = TREE_TYPE (decl);
4425
 
4426
  if (TREE_CODE (decl) == FUNCTION_DECL
4427
      && TREE_CODE (type) == FUNCTION_TYPE
4428
      && decl_function_context (decl) == 0)
4429
    {
4430
      DECL_STATIC_CONSTRUCTOR (decl) = 1;
4431
      TREE_USED (decl) = 1;
4432
    }
4433
  else
4434
    {
4435
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4436
      *no_add_attrs = true;
4437
    }
4438
 
4439
  return NULL_TREE;
4440
}
4441
 
4442
/* Handle a "destructor" attribute; arguments as in
4443
   struct attribute_spec.handler.  */
4444
 
4445
static tree
4446
handle_destructor_attribute (tree *node, tree name,
4447
                             tree ARG_UNUSED (args),
4448
                             int ARG_UNUSED (flags),
4449
                             bool *no_add_attrs)
4450
{
4451
  tree decl = *node;
4452
  tree type = TREE_TYPE (decl);
4453
 
4454
  if (TREE_CODE (decl) == FUNCTION_DECL
4455
      && TREE_CODE (type) == FUNCTION_TYPE
4456
      && decl_function_context (decl) == 0)
4457
    {
4458
      DECL_STATIC_DESTRUCTOR (decl) = 1;
4459
      TREE_USED (decl) = 1;
4460
    }
4461
  else
4462
    {
4463
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4464
      *no_add_attrs = true;
4465
    }
4466
 
4467
  return NULL_TREE;
4468
}
4469
 
4470
/* Handle a "mode" attribute; arguments as in
4471
   struct attribute_spec.handler.  */
4472
 
4473
static tree
4474
handle_mode_attribute (tree *node, tree name, tree args,
4475
                       int ARG_UNUSED (flags), bool *no_add_attrs)
4476
{
4477
  tree type = *node;
4478
 
4479
  *no_add_attrs = true;
4480
 
4481
  if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4482
    warning (OPT_Wattributes, "%qE attribute ignored", name);
4483
  else
4484
    {
4485
      int j;
4486
      const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4487
      int len = strlen (p);
4488
      enum machine_mode mode = VOIDmode;
4489
      tree typefm;
4490
      bool valid_mode;
4491
 
4492
      if (len > 4 && p[0] == '_' && p[1] == '_'
4493
          && p[len - 1] == '_' && p[len - 2] == '_')
4494
        {
4495
          char *newp = (char *) alloca (len - 1);
4496
 
4497
          strcpy (newp, &p[2]);
4498
          newp[len - 4] = '\0';
4499
          p = newp;
4500
        }
4501
 
4502
      /* Change this type to have a type with the specified mode.
4503
         First check for the special modes.  */
4504
      if (!strcmp (p, "byte"))
4505
        mode = byte_mode;
4506
      else if (!strcmp (p, "word"))
4507
        mode = word_mode;
4508
      else if (!strcmp (p, "pointer"))
4509
        mode = ptr_mode;
4510
      else
4511
        for (j = 0; j < NUM_MACHINE_MODES; j++)
4512
          if (!strcmp (p, GET_MODE_NAME (j)))
4513
            {
4514
              mode = (enum machine_mode) j;
4515
              break;
4516
            }
4517
 
4518
      if (mode == VOIDmode)
4519
        {
4520
          error ("unknown machine mode %qs", p);
4521
          return NULL_TREE;
4522
        }
4523
 
4524
      valid_mode = false;
4525
      switch (GET_MODE_CLASS (mode))
4526
        {
4527
        case MODE_INT:
4528
        case MODE_PARTIAL_INT:
4529
        case MODE_FLOAT:
4530
          valid_mode = targetm.scalar_mode_supported_p (mode);
4531
          break;
4532
 
4533
        case MODE_COMPLEX_INT:
4534
        case MODE_COMPLEX_FLOAT:
4535
          valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4536
          break;
4537
 
4538
        case MODE_VECTOR_INT:
4539
        case MODE_VECTOR_FLOAT:
4540
          warning (OPT_Wattributes, "specifying vector types with "
4541
                   "__attribute__ ((mode)) is deprecated");
4542
          warning (OPT_Wattributes,
4543
                   "use __attribute__ ((vector_size)) instead");
4544
          valid_mode = vector_mode_valid_p (mode);
4545
          break;
4546
 
4547
        default:
4548
          break;
4549
        }
4550
      if (!valid_mode)
4551
        {
4552
          error ("unable to emulate %qs", p);
4553
          return NULL_TREE;
4554
        }
4555
 
4556
      if (POINTER_TYPE_P (type))
4557
        {
4558
          tree (*fn)(tree, enum machine_mode, bool);
4559
 
4560
          if (!targetm.valid_pointer_mode (mode))
4561
            {
4562
              error ("invalid pointer mode %qs", p);
4563
              return NULL_TREE;
4564
            }
4565
 
4566
          if (TREE_CODE (type) == POINTER_TYPE)
4567
            fn = build_pointer_type_for_mode;
4568
          else
4569
            fn = build_reference_type_for_mode;
4570
          typefm = fn (TREE_TYPE (type), mode, false);
4571
        }
4572
      else
4573
        typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
4574
 
4575
      if (typefm == NULL_TREE)
4576
        {
4577
          error ("no data type for mode %qs", p);
4578
          return NULL_TREE;
4579
        }
4580
      else if (TREE_CODE (type) == ENUMERAL_TYPE)
4581
        {
4582
          /* For enumeral types, copy the precision from the integer
4583
             type returned above.  If not an INTEGER_TYPE, we can't use
4584
             this mode for this type.  */
4585
          if (TREE_CODE (typefm) != INTEGER_TYPE)
4586
            {
4587
              error ("cannot use mode %qs for enumeral types", p);
4588
              return NULL_TREE;
4589
            }
4590
 
4591
          if (flags & ATTR_FLAG_TYPE_IN_PLACE)
4592
            {
4593
              TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
4594
              typefm = type;
4595
            }
4596
          else
4597
            {
4598
              /* We cannot build a type variant, as there's code that assumes
4599
                 that TYPE_MAIN_VARIANT has the same mode.  This includes the
4600
                 debug generators.  Instead, create a subrange type.  This
4601
                 results in all of the enumeral values being emitted only once
4602
                 in the original, and the subtype gets them by reference.  */
4603
              if (TYPE_UNSIGNED (type))
4604
                typefm = make_unsigned_type (TYPE_PRECISION (typefm));
4605
              else
4606
                typefm = make_signed_type (TYPE_PRECISION (typefm));
4607
              TREE_TYPE (typefm) = type;
4608
            }
4609
        }
4610
      else if (VECTOR_MODE_P (mode)
4611
               ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
4612
               : TREE_CODE (type) != TREE_CODE (typefm))
4613
        {
4614
          error ("mode %qs applied to inappropriate type", p);
4615
          return NULL_TREE;
4616
        }
4617
 
4618
      *node = typefm;
4619
    }
4620
 
4621
  return NULL_TREE;
4622
}
4623
 
4624
/* Handle a "section" attribute; arguments as in
4625
   struct attribute_spec.handler.  */
4626
 
4627
static tree
4628
handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4629
                          int ARG_UNUSED (flags), bool *no_add_attrs)
4630
{
4631
  tree decl = *node;
4632
 
4633
  if (targetm.have_named_sections)
4634
    {
4635
      user_defined_section_attribute = true;
4636
 
4637
      if ((TREE_CODE (decl) == FUNCTION_DECL
4638
           || TREE_CODE (decl) == VAR_DECL)
4639
          && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
4640
        {
4641
          if (TREE_CODE (decl) == VAR_DECL
4642
              && current_function_decl != NULL_TREE
4643
              && !TREE_STATIC (decl))
4644
            {
4645
              error ("%Jsection attribute cannot be specified for "
4646
                     "local variables", decl);
4647
              *no_add_attrs = true;
4648
            }
4649
 
4650
          /* The decl may have already been given a section attribute
4651
             from a previous declaration.  Ensure they match.  */
4652
          else if (DECL_SECTION_NAME (decl) != NULL_TREE
4653
                   && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
4654
                              TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
4655
            {
4656
              error ("section of %q+D conflicts with previous declaration",
4657
                     *node);
4658
              *no_add_attrs = true;
4659
            }
4660
          else
4661
            DECL_SECTION_NAME (decl) = TREE_VALUE (args);
4662
        }
4663
      else
4664
        {
4665
          error ("section attribute not allowed for %q+D", *node);
4666
          *no_add_attrs = true;
4667
        }
4668
    }
4669
  else
4670
    {
4671
      error ("%Jsection attributes are not supported for this target", *node);
4672
      *no_add_attrs = true;
4673
    }
4674
 
4675
  return NULL_TREE;
4676
}
4677
 
4678
/* Handle a "aligned" attribute; arguments as in
4679
   struct attribute_spec.handler.  */
4680
 
4681
static tree
4682
handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4683
                          int flags, bool *no_add_attrs)
4684
{
4685
  tree decl = NULL_TREE;
4686
  tree *type = NULL;
4687
  int is_type = 0;
4688
  tree align_expr = (args ? TREE_VALUE (args)
4689
                     : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
4690
  int i;
4691
 
4692
  if (DECL_P (*node))
4693
    {
4694
      decl = *node;
4695
      type = &TREE_TYPE (decl);
4696
      is_type = TREE_CODE (*node) == TYPE_DECL;
4697
    }
4698
  else if (TYPE_P (*node))
4699
    type = node, is_type = 1;
4700
 
4701
  if (TREE_CODE (align_expr) != INTEGER_CST)
4702
    {
4703
      error ("requested alignment is not a constant");
4704
      *no_add_attrs = true;
4705
    }
4706
  else if ((i = tree_log2 (align_expr)) == -1)
4707
    {
4708
      error ("requested alignment is not a power of 2");
4709
      *no_add_attrs = true;
4710
    }
4711
  else if (i > HOST_BITS_PER_INT - 2)
4712
    {
4713
      error ("requested alignment is too large");
4714
      *no_add_attrs = true;
4715
    }
4716
  else if (is_type)
4717
    {
4718
      /* If we have a TYPE_DECL, then copy the type, so that we
4719
         don't accidentally modify a builtin type.  See pushdecl.  */
4720
      if (decl && TREE_TYPE (decl) != error_mark_node
4721
          && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
4722
        {
4723
          tree tt = TREE_TYPE (decl);
4724
          *type = build_variant_type_copy (*type);
4725
          DECL_ORIGINAL_TYPE (decl) = tt;
4726
          TYPE_NAME (*type) = decl;
4727
          TREE_USED (*type) = TREE_USED (decl);
4728
          TREE_TYPE (decl) = *type;
4729
        }
4730
      else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4731
        *type = build_variant_type_copy (*type);
4732
 
4733
      TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
4734
      TYPE_USER_ALIGN (*type) = 1;
4735
    }
4736
  else if (TREE_CODE (decl) != VAR_DECL
4737
           && TREE_CODE (decl) != FIELD_DECL)
4738
    {
4739
      error ("alignment may not be specified for %q+D", decl);
4740
      *no_add_attrs = true;
4741
    }
4742
  else
4743
    {
4744
      DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
4745
      DECL_USER_ALIGN (decl) = 1;
4746
    }
4747
 
4748
  return NULL_TREE;
4749
}
4750
 
4751
/* Handle a "weak" attribute; arguments as in
4752
   struct attribute_spec.handler.  */
4753
 
4754
static tree
4755
handle_weak_attribute (tree *node, tree ARG_UNUSED (name),
4756
                       tree ARG_UNUSED (args),
4757
                       int ARG_UNUSED (flags),
4758
                       bool * ARG_UNUSED (no_add_attrs))
4759
{
4760
  declare_weak (*node);
4761
 
4762
  return NULL_TREE;
4763
}
4764
 
4765
/* Handle an "alias" attribute; arguments as in
4766
   struct attribute_spec.handler.  */
4767
 
4768
static tree
4769
handle_alias_attribute (tree *node, tree name, tree args,
4770
                        int ARG_UNUSED (flags), bool *no_add_attrs)
4771
{
4772
  tree decl = *node;
4773
 
4774
  if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
4775
      || (TREE_CODE (decl) != FUNCTION_DECL && !DECL_EXTERNAL (decl)))
4776
    {
4777
      error ("%q+D defined both normally and as an alias", decl);
4778
      *no_add_attrs = true;
4779
    }
4780
 
4781
  /* Note that the very first time we process a nested declaration,
4782
     decl_function_context will not be set.  Indeed, *would* never
4783
     be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
4784
     we do below.  After such frobbery, pushdecl would set the context.
4785
     In any case, this is never what we want.  */
4786
  else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
4787
    {
4788
      tree id;
4789
 
4790
      id = TREE_VALUE (args);
4791
      if (TREE_CODE (id) != STRING_CST)
4792
        {
4793
          error ("alias argument not a string");
4794
          *no_add_attrs = true;
4795
          return NULL_TREE;
4796
        }
4797
      id = get_identifier (TREE_STRING_POINTER (id));
4798
      /* This counts as a use of the object pointed to.  */
4799
      TREE_USED (id) = 1;
4800
 
4801
      if (TREE_CODE (decl) == FUNCTION_DECL)
4802
        DECL_INITIAL (decl) = error_mark_node;
4803
      else
4804
        {
4805
          if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
4806
            DECL_EXTERNAL (decl) = 1;
4807
          else
4808
            DECL_EXTERNAL (decl) = 0;
4809
          TREE_STATIC (decl) = 1;
4810
        }
4811
    }
4812
  else
4813
    {
4814
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4815
      *no_add_attrs = true;
4816
    }
4817
 
4818
  return NULL_TREE;
4819
}
4820
 
4821
/* Handle a "weakref" attribute; arguments as in struct
4822
   attribute_spec.handler.  */
4823
 
4824
static tree
4825
handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4826
                          int flags, bool *no_add_attrs)
4827
{
4828
  tree attr = NULL_TREE;
4829
 
4830
  /* The idea here is that `weakref("name")' mutates into `weakref,
4831
     alias("name")', and weakref without arguments, in turn,
4832
     implicitly adds weak. */
4833
 
4834
  if (args)
4835
    {
4836
      attr = tree_cons (get_identifier ("alias"), args, attr);
4837
      attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
4838
 
4839
      *no_add_attrs = true;
4840
    }
4841
  else
4842
    {
4843
      if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
4844
        error ("%Jweakref attribute must appear before alias attribute",
4845
               *node);
4846
 
4847
      attr = tree_cons (get_identifier ("weak"), NULL_TREE, attr);
4848
    }
4849
 
4850
  decl_attributes (node, attr, flags);
4851
 
4852
  return NULL_TREE;
4853
}
4854
 
4855
/* Handle an "visibility" attribute; arguments as in
4856
   struct attribute_spec.handler.  */
4857
 
4858
static tree
4859
handle_visibility_attribute (tree *node, tree name, tree args,
4860
                             int ARG_UNUSED (flags),
4861
                             bool *no_add_attrs)
4862
{
4863
  tree decl = *node;
4864
  tree id = TREE_VALUE (args);
4865
 
4866
  *no_add_attrs = true;
4867
 
4868
  if (TYPE_P (*node))
4869
    {
4870
      if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
4871
       {
4872
         warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
4873
                  name);
4874
         return NULL_TREE;
4875
       }
4876
    }
4877
  else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
4878
    {
4879
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4880
      return NULL_TREE;
4881
    }
4882
 
4883
  if (TREE_CODE (id) != STRING_CST)
4884
    {
4885
      error ("visibility argument not a string");
4886
      return NULL_TREE;
4887
    }
4888
 
4889
  /*  If this is a type, set the visibility on the type decl.  */
4890
  if (TYPE_P (decl))
4891
    {
4892
      decl = TYPE_NAME (decl);
4893
      if (!decl)
4894
        return NULL_TREE;
4895
      if (TREE_CODE (decl) == IDENTIFIER_NODE)
4896
        {
4897
           warning (OPT_Wattributes, "%qE attribute ignored on types",
4898
                    name);
4899
           return NULL_TREE;
4900
        }
4901
    }
4902
 
4903
  if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
4904
    DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4905
  else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
4906
    DECL_VISIBILITY (decl) = VISIBILITY_INTERNAL;
4907
  else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
4908
    DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
4909
  else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
4910
    DECL_VISIBILITY (decl) = VISIBILITY_PROTECTED;
4911
  else
4912
    error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
4913
  DECL_VISIBILITY_SPECIFIED (decl) = 1;
4914
 
4915
  /* For decls only, go ahead and attach the attribute to the node as well.
4916
     This is needed so we can determine whether we have VISIBILITY_DEFAULT
4917
     because the visibility was not specified, or because it was explicitly
4918
     overridden from the class visibility.  */
4919
  if (DECL_P (*node))
4920
    *no_add_attrs = false;
4921
 
4922
  return NULL_TREE;
4923
}
4924
 
4925
/* Determine the ELF symbol visibility for DECL, which is either a
4926
   variable or a function.  It is an error to use this function if a
4927
   definition of DECL is not available in this translation unit.
4928
   Returns true if the final visibility has been determined by this
4929
   function; false if the caller is free to make additional
4930
   modifications.  */
4931
 
4932
bool
4933
c_determine_visibility (tree decl)
4934
{
4935
  gcc_assert (TREE_CODE (decl) == VAR_DECL
4936
              || TREE_CODE (decl) == FUNCTION_DECL);
4937
 
4938
  /* If the user explicitly specified the visibility with an
4939
     attribute, honor that.  DECL_VISIBILITY will have been set during
4940
     the processing of the attribute.  We check for an explicit
4941
     attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
4942
     to distinguish the use of an attribute from the use of a "#pragma
4943
     GCC visibility push(...)"; in the latter case we still want other
4944
     considerations to be able to overrule the #pragma.  */
4945
  if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
4946
    return true;
4947
 
4948
  /* Anything that is exported must have default visibility.  */
4949
  if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
4950
      && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
4951
    {
4952
      DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4953
      DECL_VISIBILITY_SPECIFIED (decl) = 1;
4954
      return true;
4955
    }
4956
 
4957
  return false;
4958
}
4959
 
4960
/* Handle an "tls_model" attribute; arguments as in
4961
   struct attribute_spec.handler.  */
4962
 
4963
static tree
4964
handle_tls_model_attribute (tree *node, tree name, tree args,
4965
                            int ARG_UNUSED (flags), bool *no_add_attrs)
4966
{
4967
  tree id;
4968
  tree decl = *node;
4969
  enum tls_model kind;
4970
 
4971
  *no_add_attrs = true;
4972
 
4973
  if (!DECL_THREAD_LOCAL_P (decl))
4974
    {
4975
      warning (OPT_Wattributes, "%qE attribute ignored", name);
4976
      return NULL_TREE;
4977
    }
4978
 
4979
  kind = DECL_TLS_MODEL (decl);
4980
  id = TREE_VALUE (args);
4981
  if (TREE_CODE (id) != STRING_CST)
4982
    {
4983
      error ("tls_model argument not a string");
4984
      return NULL_TREE;
4985
    }
4986
 
4987
  if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
4988
    kind = TLS_MODEL_LOCAL_EXEC;
4989
  else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
4990
    kind = TLS_MODEL_INITIAL_EXEC;
4991
  else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
4992
    kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
4993
  else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
4994
    kind = TLS_MODEL_GLOBAL_DYNAMIC;
4995
  else
4996
    error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
4997
 
4998
  DECL_TLS_MODEL (decl) = kind;
4999
  return NULL_TREE;
5000
}
5001
 
5002
/* Handle a "no_instrument_function" attribute; arguments as in
5003
   struct attribute_spec.handler.  */
5004
 
5005
static tree
5006
handle_no_instrument_function_attribute (tree *node, tree name,
5007
                                         tree ARG_UNUSED (args),
5008
                                         int ARG_UNUSED (flags),
5009
                                         bool *no_add_attrs)
5010
{
5011
  tree decl = *node;
5012
 
5013
  if (TREE_CODE (decl) != FUNCTION_DECL)
5014
    {
5015
      error ("%J%qE attribute applies only to functions", decl, name);
5016
      *no_add_attrs = true;
5017
    }
5018
  else if (DECL_INITIAL (decl))
5019
    {
5020
      error ("%Jcan%'t set %qE attribute after definition", decl, name);
5021
      *no_add_attrs = true;
5022
    }
5023
  else
5024
    DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5025
 
5026
  return NULL_TREE;
5027
}
5028
 
5029
/* Handle a "malloc" attribute; arguments as in
5030
   struct attribute_spec.handler.  */
5031
 
5032
static tree
5033
handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5034
                         int ARG_UNUSED (flags), bool *no_add_attrs)
5035
{
5036
  if (TREE_CODE (*node) == FUNCTION_DECL
5037
      && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
5038
    DECL_IS_MALLOC (*node) = 1;
5039
  else
5040
    {
5041
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5042
      *no_add_attrs = true;
5043
    }
5044
 
5045
  return NULL_TREE;
5046
}
5047
 
5048
/* Handle a "returns_twice" attribute; arguments as in
5049
   struct attribute_spec.handler.  */
5050
 
5051
static tree
5052
handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5053
                         int ARG_UNUSED (flags), bool *no_add_attrs)
5054
{
5055
  if (TREE_CODE (*node) == FUNCTION_DECL)
5056
    DECL_IS_RETURNS_TWICE (*node) = 1;
5057
  else
5058
    {
5059
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5060
      *no_add_attrs = true;
5061
    }
5062
 
5063
  return NULL_TREE;
5064
}
5065
 
5066
/* Handle a "no_limit_stack" attribute; arguments as in
5067
   struct attribute_spec.handler.  */
5068
 
5069
static tree
5070
handle_no_limit_stack_attribute (tree *node, tree name,
5071
                                 tree ARG_UNUSED (args),
5072
                                 int ARG_UNUSED (flags),
5073
                                 bool *no_add_attrs)
5074
{
5075
  tree decl = *node;
5076
 
5077
  if (TREE_CODE (decl) != FUNCTION_DECL)
5078
    {
5079
      error ("%J%qE attribute applies only to functions", decl, name);
5080
      *no_add_attrs = true;
5081
    }
5082
  else if (DECL_INITIAL (decl))
5083
    {
5084
      error ("%Jcan%'t set %qE attribute after definition", decl, name);
5085
      *no_add_attrs = true;
5086
    }
5087
  else
5088
    DECL_NO_LIMIT_STACK (decl) = 1;
5089
 
5090
  return NULL_TREE;
5091
}
5092
 
5093
/* Handle a "pure" attribute; arguments as in
5094
   struct attribute_spec.handler.  */
5095
 
5096
static tree
5097
handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5098
                       int ARG_UNUSED (flags), bool *no_add_attrs)
5099
{
5100
  if (TREE_CODE (*node) == FUNCTION_DECL)
5101
    DECL_IS_PURE (*node) = 1;
5102
  /* ??? TODO: Support types.  */
5103
  else
5104
    {
5105
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5106
      *no_add_attrs = true;
5107
    }
5108
 
5109
  return NULL_TREE;
5110
}
5111
 
5112
/* Handle a "no vops" attribute; arguments as in
5113
   struct attribute_spec.handler.  */
5114
 
5115
static tree
5116
handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5117
                         tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5118
                         bool *ARG_UNUSED (no_add_attrs))
5119
{
5120
  gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5121
  DECL_IS_NOVOPS (*node) = 1;
5122
  return NULL_TREE;
5123
}
5124
 
5125
/* Handle a "deprecated" attribute; arguments as in
5126
   struct attribute_spec.handler.  */
5127
 
5128
static tree
5129
handle_deprecated_attribute (tree *node, tree name,
5130
                             tree ARG_UNUSED (args), int flags,
5131
                             bool *no_add_attrs)
5132
{
5133
  tree type = NULL_TREE;
5134
  int warn = 0;
5135
  tree what = NULL_TREE;
5136
 
5137
  if (DECL_P (*node))
5138
    {
5139
      tree decl = *node;
5140
      type = TREE_TYPE (decl);
5141
 
5142
      if (TREE_CODE (decl) == TYPE_DECL
5143
          || TREE_CODE (decl) == PARM_DECL
5144
          || TREE_CODE (decl) == VAR_DECL
5145
          || TREE_CODE (decl) == FUNCTION_DECL
5146
          || TREE_CODE (decl) == FIELD_DECL)
5147
        TREE_DEPRECATED (decl) = 1;
5148
      else
5149
        warn = 1;
5150
    }
5151
  else if (TYPE_P (*node))
5152
    {
5153
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5154
        *node = build_variant_type_copy (*node);
5155
      TREE_DEPRECATED (*node) = 1;
5156
      type = *node;
5157
    }
5158
  else
5159
    warn = 1;
5160
 
5161
  if (warn)
5162
    {
5163
      *no_add_attrs = true;
5164
      if (type && TYPE_NAME (type))
5165
        {
5166
          if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5167
            what = TYPE_NAME (*node);
5168
          else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5169
                   && DECL_NAME (TYPE_NAME (type)))
5170
            what = DECL_NAME (TYPE_NAME (type));
5171
        }
5172
      if (what)
5173
        warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
5174
      else
5175
        warning (OPT_Wattributes, "%qE attribute ignored", name);
5176
    }
5177
 
5178
  return NULL_TREE;
5179
}
5180
 
5181
/* Handle a "vector_size" attribute; arguments as in
5182
   struct attribute_spec.handler.  */
5183
 
5184
static tree
5185
handle_vector_size_attribute (tree *node, tree name, tree args,
5186
                              int ARG_UNUSED (flags),
5187
                              bool *no_add_attrs)
5188
{
5189
  unsigned HOST_WIDE_INT vecsize, nunits;
5190
  enum machine_mode orig_mode;
5191
  tree type = *node, new_type, size;
5192
 
5193
  *no_add_attrs = true;
5194
 
5195
  size = TREE_VALUE (args);
5196
 
5197
  if (!host_integerp (size, 1))
5198
    {
5199
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5200
      return NULL_TREE;
5201
    }
5202
 
5203
  /* Get the vector size (in bytes).  */
5204
  vecsize = tree_low_cst (size, 1);
5205
 
5206
  /* We need to provide for vector pointers, vector arrays, and
5207
     functions returning vectors.  For example:
5208
 
5209
       __attribute__((vector_size(16))) short *foo;
5210
 
5211
     In this case, the mode is SI, but the type being modified is
5212
     HI, so we need to look further.  */
5213
 
5214
  while (POINTER_TYPE_P (type)
5215
         || TREE_CODE (type) == FUNCTION_TYPE
5216
         || TREE_CODE (type) == METHOD_TYPE
5217
         || TREE_CODE (type) == ARRAY_TYPE)
5218
    type = TREE_TYPE (type);
5219
 
5220
  /* Get the mode of the type being modified.  */
5221
  orig_mode = TYPE_MODE (type);
5222
 
5223
  if (TREE_CODE (type) == RECORD_TYPE
5224
      || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT
5225
          && GET_MODE_CLASS (orig_mode) != MODE_INT)
5226
      || !host_integerp (TYPE_SIZE_UNIT (type), 1))
5227
    {
5228
      error ("invalid vector type for attribute %qE", name);
5229
      return NULL_TREE;
5230
    }
5231
 
5232
  if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
5233
    {
5234
      error ("vector size not an integral multiple of component size");
5235
      return NULL;
5236
    }
5237
 
5238
  if (vecsize == 0)
5239
    {
5240
      error ("zero vector size");
5241
      return NULL;
5242
    }
5243
 
5244
  /* Calculate how many units fit in the vector.  */
5245
  nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5246
  if (nunits & (nunits - 1))
5247
    {
5248
      error ("number of components of the vector not a power of two");
5249
      return NULL_TREE;
5250
    }
5251
 
5252
  new_type = build_vector_type (type, nunits);
5253
 
5254
  /* Build back pointers if needed.  */
5255
  *node = reconstruct_complex_type (*node, new_type);
5256
 
5257
  return NULL_TREE;
5258
}
5259
 
5260
/* Handle the "nonnull" attribute.  */
5261
static tree
5262
handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
5263
                          tree args, int ARG_UNUSED (flags),
5264
                          bool *no_add_attrs)
5265
{
5266
  tree type = *node;
5267
  unsigned HOST_WIDE_INT attr_arg_num;
5268
 
5269
  /* If no arguments are specified, all pointer arguments should be
5270
     non-null.  Verify a full prototype is given so that the arguments
5271
     will have the correct types when we actually check them later.  */
5272
  if (!args)
5273
    {
5274
      if (!TYPE_ARG_TYPES (type))
5275
        {
5276
          error ("nonnull attribute without arguments on a non-prototype");
5277
          *no_add_attrs = true;
5278
        }
5279
      return NULL_TREE;
5280
    }
5281
 
5282
  /* Argument list specified.  Verify that each argument number references
5283
     a pointer argument.  */
5284
  for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5285
    {
5286
      tree argument;
5287
      unsigned HOST_WIDE_INT arg_num = 0, ck_num;
5288
 
5289
      if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
5290
        {
5291
          error ("nonnull argument has invalid operand number (argument %lu)",
5292
                 (unsigned long) attr_arg_num);
5293
          *no_add_attrs = true;
5294
          return NULL_TREE;
5295
        }
5296
 
5297
      argument = TYPE_ARG_TYPES (type);
5298
      if (argument)
5299
        {
5300
          for (ck_num = 1; ; ck_num++)
5301
            {
5302
              if (!argument || ck_num == arg_num)
5303
                break;
5304
              argument = TREE_CHAIN (argument);
5305
            }
5306
 
5307
          if (!argument
5308
              || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5309
            {
5310
              error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5311
                     (unsigned long) attr_arg_num, (unsigned long) arg_num);
5312
              *no_add_attrs = true;
5313
              return NULL_TREE;
5314
            }
5315
 
5316
          if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5317
            {
5318
              error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5319
                   (unsigned long) attr_arg_num, (unsigned long) arg_num);
5320
              *no_add_attrs = true;
5321
              return NULL_TREE;
5322
            }
5323
        }
5324
    }
5325
 
5326
  return NULL_TREE;
5327
}
5328
 
5329
/* Check the argument list of a function call for null in argument slots
5330
   that are marked as requiring a non-null pointer argument.  */
5331
 
5332
static void
5333
check_function_nonnull (tree attrs, tree params)
5334
{
5335
  tree a, args, param;
5336
  int param_num;
5337
 
5338
  for (a = attrs; a; a = TREE_CHAIN (a))
5339
    {
5340
      if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5341
        {
5342
          args = TREE_VALUE (a);
5343
 
5344
          /* Walk the argument list.  If we encounter an argument number we
5345
             should check for non-null, do it.  If the attribute has no args,
5346
             then every pointer argument is checked (in which case the check
5347
             for pointer type is done in check_nonnull_arg).  */
5348
          for (param = params, param_num = 1; ;
5349
               param_num++, param = TREE_CHAIN (param))
5350
            {
5351
              if (!param)
5352
        break;
5353
              if (!args || nonnull_check_p (args, param_num))
5354
        check_function_arguments_recurse (check_nonnull_arg, NULL,
5355
                                          TREE_VALUE (param),
5356
                                          param_num);
5357
            }
5358
        }
5359
    }
5360
}
5361
 
5362
/* Check that the Nth argument of a function call (counting backwards
5363
   from the end) is a (pointer)0.  */
5364
 
5365
static void
5366
check_function_sentinel (tree attrs, tree params, tree typelist)
5367
{
5368
  tree attr = lookup_attribute ("sentinel", attrs);
5369
 
5370
  if (attr)
5371
    {
5372
      /* Skip over the named arguments.  */
5373
      while (typelist && params)
5374
      {
5375
        typelist = TREE_CHAIN (typelist);
5376
        params = TREE_CHAIN (params);
5377
      }
5378
 
5379
      if (typelist || !params)
5380
        warning (OPT_Wformat,
5381
                 "not enough variable arguments to fit a sentinel");
5382
      else
5383
        {
5384
          tree sentinel, end;
5385
          unsigned pos = 0;
5386
 
5387
          if (TREE_VALUE (attr))
5388
            {
5389
              tree p = TREE_VALUE (TREE_VALUE (attr));
5390
              pos = TREE_INT_CST_LOW (p);
5391
            }
5392
 
5393
          sentinel = end = params;
5394
 
5395
          /* Advance `end' ahead of `sentinel' by `pos' positions.  */
5396
          while (pos > 0 && TREE_CHAIN (end))
5397
            {
5398
              pos--;
5399
              end = TREE_CHAIN (end);
5400
            }
5401
          if (pos > 0)
5402
            {
5403
              warning (OPT_Wformat,
5404
                       "not enough variable arguments to fit a sentinel");
5405
              return;
5406
            }
5407
 
5408
          /* Now advance both until we find the last parameter.  */
5409
          while (TREE_CHAIN (end))
5410
            {
5411
              end = TREE_CHAIN (end);
5412
              sentinel = TREE_CHAIN (sentinel);
5413
            }
5414
 
5415
          /* Validate the sentinel.  */
5416
          if ((!POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (sentinel)))
5417
               || !integer_zerop (TREE_VALUE (sentinel)))
5418
              /* Although __null (in C++) is only an integer we allow it
5419
                 nevertheless, as we are guaranteed that it's exactly
5420
                 as wide as a pointer, and we don't want to force
5421
                 users to cast the NULL they have written there.
5422
                 We warn with -Wstrict-null-sentinel, though.  */
5423
              && (warn_strict_null_sentinel
5424
                  || null_node != TREE_VALUE (sentinel)))
5425
            warning (OPT_Wformat, "missing sentinel in function call");
5426
        }
5427
    }
5428
}
5429
 
5430
/* Helper for check_function_nonnull; given a list of operands which
5431
   must be non-null in ARGS, determine if operand PARAM_NUM should be
5432
   checked.  */
5433
 
5434
static bool
5435
nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5436
{
5437
  unsigned HOST_WIDE_INT arg_num = 0;
5438
 
5439
  for (; args; args = TREE_CHAIN (args))
5440
    {
5441
      bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5442
 
5443
      gcc_assert (found);
5444
 
5445
      if (arg_num == param_num)
5446
        return true;
5447
    }
5448
  return false;
5449
}
5450
 
5451
/* Check that the function argument PARAM (which is operand number
5452
   PARAM_NUM) is non-null.  This is called by check_function_nonnull
5453
   via check_function_arguments_recurse.  */
5454
 
5455
static void
5456
check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
5457
                   unsigned HOST_WIDE_INT param_num)
5458
{
5459
  /* Just skip checking the argument if it's not a pointer.  This can
5460
     happen if the "nonnull" attribute was given without an operand
5461
     list (which means to check every pointer argument).  */
5462
 
5463
  if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5464
    return;
5465
 
5466
  if (integer_zerop (param))
5467
    warning (OPT_Wnonnull, "null argument where non-null required "
5468
             "(argument %lu)", (unsigned long) param_num);
5469
}
5470
 
5471
/* Helper for nonnull attribute handling; fetch the operand number
5472
   from the attribute argument list.  */
5473
 
5474
static bool
5475
get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5476
{
5477
  /* Verify the arg number is a constant.  */
5478
  if (TREE_CODE (arg_num_expr) != INTEGER_CST
5479
      || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5480
    return false;
5481
 
5482
  *valp = TREE_INT_CST_LOW (arg_num_expr);
5483
  return true;
5484
}
5485
 
5486
/* Handle a "nothrow" attribute; arguments as in
5487
   struct attribute_spec.handler.  */
5488
 
5489
static tree
5490
handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5491
                          int ARG_UNUSED (flags), bool *no_add_attrs)
5492
{
5493
  if (TREE_CODE (*node) == FUNCTION_DECL)
5494
    TREE_NOTHROW (*node) = 1;
5495
  /* ??? TODO: Support types.  */
5496
  else
5497
    {
5498
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5499
      *no_add_attrs = true;
5500
    }
5501
 
5502
  return NULL_TREE;
5503
}
5504
 
5505
/* Handle a "cleanup" attribute; arguments as in
5506
   struct attribute_spec.handler.  */
5507
 
5508
static tree
5509
handle_cleanup_attribute (tree *node, tree name, tree args,
5510
                          int ARG_UNUSED (flags), bool *no_add_attrs)
5511
{
5512
  tree decl = *node;
5513
  tree cleanup_id, cleanup_decl;
5514
 
5515
  /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5516
     for global destructors in C++.  This requires infrastructure that
5517
     we don't have generically at the moment.  It's also not a feature
5518
     we'd be missing too much, since we do have attribute constructor.  */
5519
  if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5520
    {
5521
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5522
      *no_add_attrs = true;
5523
      return NULL_TREE;
5524
    }
5525
 
5526
  /* Verify that the argument is a function in scope.  */
5527
  /* ??? We could support pointers to functions here as well, if
5528
     that was considered desirable.  */
5529
  cleanup_id = TREE_VALUE (args);
5530
  if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5531
    {
5532
      error ("cleanup argument not an identifier");
5533
      *no_add_attrs = true;
5534
      return NULL_TREE;
5535
    }
5536
  cleanup_decl = lang_hooks.decls.lookup_name (cleanup_id);
5537
  if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5538
    {
5539
      error ("cleanup argument not a function");
5540
      *no_add_attrs = true;
5541
      return NULL_TREE;
5542
    }
5543
 
5544
  /* That the function has proper type is checked with the
5545
     eventual call to build_function_call.  */
5546
 
5547
  return NULL_TREE;
5548
}
5549
 
5550
/* Handle a "warn_unused_result" attribute.  No special handling.  */
5551
 
5552
static tree
5553
handle_warn_unused_result_attribute (tree *node, tree name,
5554
                               tree ARG_UNUSED (args),
5555
                               int ARG_UNUSED (flags), bool *no_add_attrs)
5556
{
5557
  /* Ignore the attribute for functions not returning any value.  */
5558
  if (VOID_TYPE_P (TREE_TYPE (*node)))
5559
    {
5560
      warning (OPT_Wattributes, "%qE attribute ignored", name);
5561
      *no_add_attrs = true;
5562
    }
5563
 
5564
  return NULL_TREE;
5565
}
5566
 
5567
/* Handle a "sentinel" attribute.  */
5568
 
5569
static tree
5570
handle_sentinel_attribute (tree *node, tree name, tree args,
5571
                           int ARG_UNUSED (flags), bool *no_add_attrs)
5572
{
5573
  tree params = TYPE_ARG_TYPES (*node);
5574
 
5575
  if (!params)
5576
    {
5577
      warning (OPT_Wattributes,
5578
               "%qE attribute requires prototypes with named arguments", name);
5579
      *no_add_attrs = true;
5580
    }
5581
  else
5582
    {
5583
      while (TREE_CHAIN (params))
5584
        params = TREE_CHAIN (params);
5585
 
5586
      if (VOID_TYPE_P (TREE_VALUE (params)))
5587
        {
5588
          warning (OPT_Wattributes,
5589
                   "%qE attribute only applies to variadic functions", name);
5590
          *no_add_attrs = true;
5591
        }
5592
    }
5593
 
5594
  if (args)
5595
    {
5596
      tree position = TREE_VALUE (args);
5597
 
5598
      if (TREE_CODE (position) != INTEGER_CST)
5599
        {
5600
          warning (0, "requested position is not an integer constant");
5601
          *no_add_attrs = true;
5602
        }
5603
      else
5604
        {
5605
          if (tree_int_cst_lt (position, integer_zero_node))
5606
            {
5607
              warning (0, "requested position is less than zero");
5608
              *no_add_attrs = true;
5609
            }
5610
        }
5611
    }
5612
 
5613
  return NULL_TREE;
5614
}
5615
 
5616
/* Check for valid arguments being passed to a function.  */
5617
void
5618
check_function_arguments (tree attrs, tree params, tree typelist)
5619
{
5620
  /* Check for null being passed in a pointer argument that must be
5621
     non-null.  We also need to do this if format checking is enabled.  */
5622
 
5623
  if (warn_nonnull)
5624
    check_function_nonnull (attrs, params);
5625
 
5626
  /* Check for errors in format strings.  */
5627
 
5628
  if (warn_format || warn_missing_format_attribute)
5629
      check_function_format (attrs, params);
5630
 
5631
  if (warn_format)
5632
    check_function_sentinel (attrs, params, typelist);
5633
}
5634
 
5635
/* Generic argument checking recursion routine.  PARAM is the argument to
5636
   be checked.  PARAM_NUM is the number of the argument.  CALLBACK is invoked
5637
   once the argument is resolved.  CTX is context for the callback.  */
5638
void
5639
check_function_arguments_recurse (void (*callback)
5640
                                  (void *, tree, unsigned HOST_WIDE_INT),
5641
                                  void *ctx, tree param,
5642
                                  unsigned HOST_WIDE_INT param_num)
5643
{
5644
  if (TREE_CODE (param) == NOP_EXPR)
5645
    {
5646
      /* Strip coercion.  */
5647
      check_function_arguments_recurse (callback, ctx,
5648
                                        TREE_OPERAND (param, 0), param_num);
5649
      return;
5650
    }
5651
 
5652
  if (TREE_CODE (param) == CALL_EXPR)
5653
    {
5654
      tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
5655
      tree attrs;
5656
      bool found_format_arg = false;
5657
 
5658
      /* See if this is a call to a known internationalization function
5659
         that modifies a format arg.  Such a function may have multiple
5660
         format_arg attributes (for example, ngettext).  */
5661
 
5662
      for (attrs = TYPE_ATTRIBUTES (type);
5663
           attrs;
5664
           attrs = TREE_CHAIN (attrs))
5665
        if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
5666
          {
5667
            tree inner_args;
5668
            tree format_num_expr;
5669
            int format_num;
5670
            int i;
5671
 
5672
            /* Extract the argument number, which was previously checked
5673
               to be valid.  */
5674
            format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
5675
 
5676
            gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
5677
                        && !TREE_INT_CST_HIGH (format_num_expr));
5678
 
5679
            format_num = TREE_INT_CST_LOW (format_num_expr);
5680
 
5681
            for (inner_args = TREE_OPERAND (param, 1), i = 1;
5682
                 inner_args != 0;
5683
                 inner_args = TREE_CHAIN (inner_args), i++)
5684
              if (i == format_num)
5685
                {
5686
                  check_function_arguments_recurse (callback, ctx,
5687
                                                    TREE_VALUE (inner_args),
5688
                                                    param_num);
5689
                  found_format_arg = true;
5690
                  break;
5691
                }
5692
          }
5693
 
5694
      /* If we found a format_arg attribute and did a recursive check,
5695
         we are done with checking this argument.  Otherwise, we continue
5696
         and this will be considered a non-literal.  */
5697
      if (found_format_arg)
5698
        return;
5699
    }
5700
 
5701
  if (TREE_CODE (param) == COND_EXPR)
5702
    {
5703
      /* Check both halves of the conditional expression.  */
5704
      check_function_arguments_recurse (callback, ctx,
5705
                                        TREE_OPERAND (param, 1), param_num);
5706
      check_function_arguments_recurse (callback, ctx,
5707
                                        TREE_OPERAND (param, 2), param_num);
5708
      return;
5709
    }
5710
 
5711
  (*callback) (ctx, param, param_num);
5712
}
5713
 
5714
/* Function to help qsort sort FIELD_DECLs by name order.  */
5715
 
5716
int
5717
field_decl_cmp (const void *x_p, const void *y_p)
5718
{
5719
  const tree *const x = (const tree *const) x_p;
5720
  const tree *const y = (const tree *const) y_p;
5721
 
5722
  if (DECL_NAME (*x) == DECL_NAME (*y))
5723
    /* A nontype is "greater" than a type.  */
5724
    return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5725
  if (DECL_NAME (*x) == NULL_TREE)
5726
    return -1;
5727
  if (DECL_NAME (*y) == NULL_TREE)
5728
    return 1;
5729
  if (DECL_NAME (*x) < DECL_NAME (*y))
5730
    return -1;
5731
  return 1;
5732
}
5733
 
5734
static struct {
5735
  gt_pointer_operator new_value;
5736
  void *cookie;
5737
} resort_data;
5738
 
5739
/* This routine compares two fields like field_decl_cmp but using the
5740
pointer operator in resort_data.  */
5741
 
5742
static int
5743
resort_field_decl_cmp (const void *x_p, const void *y_p)
5744
{
5745
  const tree *const x = (const tree *const) x_p;
5746
  const tree *const y = (const tree *const) y_p;
5747
 
5748
  if (DECL_NAME (*x) == DECL_NAME (*y))
5749
    /* A nontype is "greater" than a type.  */
5750
    return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5751
  if (DECL_NAME (*x) == NULL_TREE)
5752
    return -1;
5753
  if (DECL_NAME (*y) == NULL_TREE)
5754
    return 1;
5755
  {
5756
    tree d1 = DECL_NAME (*x);
5757
    tree d2 = DECL_NAME (*y);
5758
    resort_data.new_value (&d1, resort_data.cookie);
5759
    resort_data.new_value (&d2, resort_data.cookie);
5760
    if (d1 < d2)
5761
      return -1;
5762
  }
5763
  return 1;
5764
}
5765
 
5766
/* Resort DECL_SORTED_FIELDS because pointers have been reordered.  */
5767
 
5768
void
5769
resort_sorted_fields (void *obj,
5770
                      void * ARG_UNUSED (orig_obj),
5771
                      gt_pointer_operator new_value,
5772
                      void *cookie)
5773
{
5774
  struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
5775
  resort_data.new_value = new_value;
5776
  resort_data.cookie = cookie;
5777
  qsort (&sf->elts[0], sf->len, sizeof (tree),
5778
         resort_field_decl_cmp);
5779
}
5780
 
5781
/* Subroutine of c_parse_error.
5782
   Return the result of concatenating LHS and RHS. RHS is really
5783
   a string literal, its first character is indicated by RHS_START and
5784
   RHS_SIZE is its length (including the terminating NUL character).
5785
 
5786
   The caller is responsible for deleting the returned pointer.  */
5787
 
5788
static char *
5789
catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
5790
{
5791
  const int lhs_size = strlen (lhs);
5792
  char *result = XNEWVEC (char, lhs_size + rhs_size);
5793
  strncpy (result, lhs, lhs_size);
5794
  strncpy (result + lhs_size, rhs_start, rhs_size);
5795
  return result;
5796
}
5797
 
5798
/* Issue the error given by GMSGID, indicating that it occurred before
5799
   TOKEN, which had the associated VALUE.  */
5800
 
5801
void
5802
c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
5803
{
5804
#define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
5805
 
5806
  char *message = NULL;
5807
 
5808
  if (token == CPP_EOF)
5809
    message = catenate_messages (gmsgid, " at end of input");
5810
  else if (token == CPP_CHAR || token == CPP_WCHAR)
5811
    {
5812
      unsigned int val = TREE_INT_CST_LOW (value);
5813
      const char *const ell = (token == CPP_CHAR) ? "" : "L";
5814
      if (val <= UCHAR_MAX && ISGRAPH (val))
5815
        message = catenate_messages (gmsgid, " before %s'%c'");
5816
      else
5817
        message = catenate_messages (gmsgid, " before %s'\\x%x'");
5818
 
5819
      error (message, ell, val);
5820
      free (message);
5821
      message = NULL;
5822
    }
5823
  else if (token == CPP_STRING || token == CPP_WSTRING)
5824
    message = catenate_messages (gmsgid, " before string constant");
5825
  else if (token == CPP_NUMBER)
5826
    message = catenate_messages (gmsgid, " before numeric constant");
5827
  else if (token == CPP_NAME)
5828
    {
5829
      message = catenate_messages (gmsgid, " before %qE");
5830
      error (message, value);
5831
      free (message);
5832
      message = NULL;
5833
    }
5834
  else if (token < N_TTYPES)
5835
    {
5836
      message = catenate_messages (gmsgid, " before %qs token");
5837
      error (message, cpp_type2name (token));
5838
      free (message);
5839
      message = NULL;
5840
    }
5841
  else
5842
    error (gmsgid);
5843
 
5844
  if (message)
5845
    {
5846
      error (message);
5847
      free (message);
5848
    }
5849
#undef catenate_messages  
5850
}
5851
 
5852
/* Walk a gimplified function and warn for functions whose return value is
5853
   ignored and attribute((warn_unused_result)) is set.  This is done before
5854
   inlining, so we don't have to worry about that.  */
5855
 
5856
void
5857
c_warn_unused_result (tree *top_p)
5858
{
5859
  tree t = *top_p;
5860
  tree_stmt_iterator i;
5861
  tree fdecl, ftype;
5862
 
5863
  switch (TREE_CODE (t))
5864
    {
5865
    case STATEMENT_LIST:
5866
      for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
5867
        c_warn_unused_result (tsi_stmt_ptr (i));
5868
      break;
5869
 
5870
    case COND_EXPR:
5871
      c_warn_unused_result (&COND_EXPR_THEN (t));
5872
      c_warn_unused_result (&COND_EXPR_ELSE (t));
5873
      break;
5874
    case BIND_EXPR:
5875
      c_warn_unused_result (&BIND_EXPR_BODY (t));
5876
      break;
5877
    case TRY_FINALLY_EXPR:
5878
    case TRY_CATCH_EXPR:
5879
      c_warn_unused_result (&TREE_OPERAND (t, 0));
5880
      c_warn_unused_result (&TREE_OPERAND (t, 1));
5881
      break;
5882
    case CATCH_EXPR:
5883
      c_warn_unused_result (&CATCH_BODY (t));
5884
      break;
5885
    case EH_FILTER_EXPR:
5886
      c_warn_unused_result (&EH_FILTER_FAILURE (t));
5887
      break;
5888
 
5889
    case CALL_EXPR:
5890
      if (TREE_USED (t))
5891
        break;
5892
 
5893
      /* This is a naked call, as opposed to a CALL_EXPR nested inside
5894
         a MODIFY_EXPR.  All calls whose value is ignored should be
5895
         represented like this.  Look for the attribute.  */
5896
      fdecl = get_callee_fndecl (t);
5897
      if (fdecl)
5898
        ftype = TREE_TYPE (fdecl);
5899
      else
5900
        {
5901
          ftype = TREE_TYPE (TREE_OPERAND (t, 0));
5902
          /* Look past pointer-to-function to the function type itself.  */
5903
          ftype = TREE_TYPE (ftype);
5904
        }
5905
 
5906
      if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
5907
        {
5908
          if (fdecl)
5909
            warning (0, "%Hignoring return value of %qD, "
5910
                     "declared with attribute warn_unused_result",
5911
                     EXPR_LOCUS (t), fdecl);
5912
          else
5913
            warning (0, "%Hignoring return value of function "
5914
                     "declared with attribute warn_unused_result",
5915
                     EXPR_LOCUS (t));
5916
        }
5917
      break;
5918
 
5919
    default:
5920
      /* Not a container, not a call, or a call whose value is used.  */
5921
      break;
5922
    }
5923
}
5924
 
5925
/* Convert a character from the host to the target execution character
5926
   set.  cpplib handles this, mostly.  */
5927
 
5928
HOST_WIDE_INT
5929
c_common_to_target_charset (HOST_WIDE_INT c)
5930
{
5931
  /* Character constants in GCC proper are sign-extended under -fsigned-char,
5932
     zero-extended under -fno-signed-char.  cpplib insists that characters
5933
     and character constants are always unsigned.  Hence we must convert
5934
     back and forth.  */
5935
  cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
5936
 
5937
  uc = cpp_host_to_exec_charset (parse_in, uc);
5938
 
5939
  if (flag_signed_char)
5940
    return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
5941
                               >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
5942
  else
5943
    return uc;
5944
}
5945
 
5946
/* Build the result of __builtin_offsetof.  EXPR is a nested sequence of
5947
   component references, with an INDIRECT_REF at the bottom; much like
5948
   the traditional rendering of offsetof as a macro.  Returns the folded
5949
   and properly cast result.  */
5950
 
5951
static tree
5952
fold_offsetof_1 (tree expr)
5953
{
5954
  enum tree_code code = PLUS_EXPR;
5955
  tree base, off, t;
5956
 
5957
  switch (TREE_CODE (expr))
5958
    {
5959
    case ERROR_MARK:
5960
      return expr;
5961
 
5962
    case INDIRECT_REF:
5963
      return size_zero_node;
5964
 
5965
    case COMPONENT_REF:
5966
      base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5967
      if (base == error_mark_node)
5968
        return base;
5969
 
5970
      t = TREE_OPERAND (expr, 1);
5971
      if (DECL_C_BIT_FIELD (t))
5972
        {
5973
          error ("attempt to take address of bit-field structure "
5974
                 "member %qD", t);
5975
          return error_mark_node;
5976
        }
5977
      off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
5978
                        size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
5979
                                  / BITS_PER_UNIT));
5980
      break;
5981
 
5982
    case ARRAY_REF:
5983
      base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5984
      if (base == error_mark_node)
5985
        return base;
5986
 
5987
      t = TREE_OPERAND (expr, 1);
5988
      if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
5989
        {
5990
          code = MINUS_EXPR;
5991
          t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
5992
        }
5993
      t = convert (sizetype, t);
5994
      off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
5995
      break;
5996
 
5997
    default:
5998
      gcc_unreachable ();
5999
    }
6000
 
6001
  return size_binop (code, base, off);
6002
}
6003
 
6004
tree
6005
fold_offsetof (tree expr)
6006
{
6007
  /* Convert back from the internal sizetype to size_t.  */
6008
  return convert (size_type_node, fold_offsetof_1 (expr));
6009
}
6010
 
6011
/* Print an error message for an invalid lvalue.  USE says
6012
   how the lvalue is being used and so selects the error message.  */
6013
 
6014
void
6015
lvalue_error (enum lvalue_use use)
6016
{
6017
  switch (use)
6018
    {
6019
    case lv_assign:
6020
      error ("invalid lvalue in assignment");
6021
      break;
6022
    case lv_increment:
6023
      error ("invalid lvalue in increment");
6024
      break;
6025
    case lv_decrement:
6026
      error ("invalid lvalue in decrement");
6027
      break;
6028
    case lv_addressof:
6029
      error ("invalid lvalue in unary %<&%>");
6030
      break;
6031
    case lv_asm:
6032
      error ("invalid lvalue in asm statement");
6033
      break;
6034
    default:
6035
      gcc_unreachable ();
6036
    }
6037
}
6038
 
6039
/* *PTYPE is an incomplete array.  Complete it with a domain based on
6040
   INITIAL_VALUE.  If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6041
   is true.  Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6042
   2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty.  */
6043
 
6044
int
6045
complete_array_type (tree *ptype, tree initial_value, bool do_default)
6046
{
6047
  tree maxindex, type, main_type, elt, unqual_elt;
6048
  int failure = 0, quals;
6049
 
6050
  maxindex = size_zero_node;
6051
  if (initial_value)
6052
    {
6053
      if (TREE_CODE (initial_value) == STRING_CST)
6054
        {
6055
          int eltsize
6056
            = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6057
          maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6058
        }
6059
      else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6060
        {
6061
          VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6062
 
6063
          if (VEC_empty (constructor_elt, v))
6064
            {
6065
              if (pedantic)
6066
                failure = 3;
6067
              maxindex = integer_minus_one_node;
6068
            }
6069
          else
6070
            {
6071
              tree curindex;
6072
              unsigned HOST_WIDE_INT cnt;
6073
              constructor_elt *ce;
6074
 
6075
              if (VEC_index (constructor_elt, v, 0)->index)
6076
                maxindex = fold_convert (sizetype,
6077
                                         VEC_index (constructor_elt,
6078
                                                    v, 0)->index);
6079
              curindex = maxindex;
6080
 
6081
              for (cnt = 1;
6082
                   VEC_iterate (constructor_elt, v, cnt, ce);
6083
                   cnt++)
6084
                {
6085
                  if (ce->index)
6086
                    curindex = fold_convert (sizetype, ce->index);
6087
                  else
6088
                    curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6089
 
6090
                  if (tree_int_cst_lt (maxindex, curindex))
6091
                    maxindex = curindex;
6092
                }
6093
            }
6094
        }
6095
      else
6096
        {
6097
          /* Make an error message unless that happened already.  */
6098
          if (initial_value != error_mark_node)
6099
            failure = 1;
6100
        }
6101
    }
6102
  else
6103
    {
6104
      failure = 2;
6105
      if (!do_default)
6106
        return failure;
6107
    }
6108
 
6109
  type = *ptype;
6110
  elt = TREE_TYPE (type);
6111
  quals = TYPE_QUALS (strip_array_types (elt));
6112
  if (quals == 0)
6113
    unqual_elt = elt;
6114
  else
6115
    unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6116
 
6117
  /* Using build_distinct_type_copy and modifying things afterward instead
6118
     of using build_array_type to create a new type preserves all of the
6119
     TYPE_LANG_FLAG_? bits that the front end may have set.  */
6120
  main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6121
  TREE_TYPE (main_type) = unqual_elt;
6122
  TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6123
  layout_type (main_type);
6124
 
6125
  if (quals == 0)
6126
    type = main_type;
6127
  else
6128
    type = c_build_qualified_type (main_type, quals);
6129
 
6130
  *ptype = type;
6131
  return failure;
6132
}
6133
 
6134
 
6135
/* Used to help initialize the builtin-types.def table.  When a type of
6136
   the correct size doesn't exist, use error_mark_node instead of NULL.
6137
   The later results in segfaults even when a decl using the type doesn't
6138
   get invoked.  */
6139
 
6140
tree
6141
builtin_type_for_size (int size, bool unsignedp)
6142
{
6143
  tree type = lang_hooks.types.type_for_size (size, unsignedp);
6144
  return type ? type : error_mark_node;
6145
}
6146
 
6147
/* A helper function for resolve_overloaded_builtin in resolving the
6148
   overloaded __sync_ builtins.  Returns a positive power of 2 if the
6149
   first operand of PARAMS is a pointer to a supported data type.
6150
   Returns 0 if an error is encountered.  */
6151
 
6152
static int
6153
sync_resolve_size (tree function, tree params)
6154
{
6155
  tree type;
6156
  int size;
6157
 
6158
  if (params == NULL)
6159
    {
6160
      error ("too few arguments to function %qE", function);
6161
      return 0;
6162
    }
6163
 
6164
  type = TREE_TYPE (TREE_VALUE (params));
6165
  if (TREE_CODE (type) != POINTER_TYPE)
6166
    goto incompatible;
6167
 
6168
  type = TREE_TYPE (type);
6169
  if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
6170
    goto incompatible;
6171
 
6172
  size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6173
  if (size == 1 || size == 2 || size == 4 || size == 8)
6174
    return size;
6175
 
6176
 incompatible:
6177
  error ("incompatible type for argument %d of %qE", 1, function);
6178
  return 0;
6179
}
6180
 
6181
/* A helper function for resolve_overloaded_builtin.  Adds casts to
6182
   PARAMS to make arguments match up with those of FUNCTION.  Drops
6183
   the variadic arguments at the end.  Returns false if some error
6184
   was encountered; true on success.  */
6185
 
6186
static bool
6187
sync_resolve_params (tree orig_function, tree function, tree params)
6188
{
6189
  tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
6190
  tree ptype;
6191
  int number;
6192
 
6193
  /* We've declared the implementation functions to use "volatile void *"
6194
     as the pointer parameter, so we shouldn't get any complaints from the
6195
     call to check_function_arguments what ever type the user used.  */
6196
  arg_types = TREE_CHAIN (arg_types);
6197
  ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6198
  number = 2;
6199
 
6200
  /* For the rest of the values, we need to cast these to FTYPE, so that we
6201
     don't get warnings for passing pointer types, etc.  */
6202
  while (arg_types != void_list_node)
6203
    {
6204
      tree val;
6205
 
6206
      params = TREE_CHAIN (params);
6207
      if (params == NULL)
6208
        {
6209
          error ("too few arguments to function %qE", orig_function);
6210
          return false;
6211
        }
6212
 
6213
      /* ??? Ideally for the first conversion we'd use convert_for_assignment
6214
         so that we get warnings for anything that doesn't match the pointer
6215
         type.  This isn't portable across the C and C++ front ends atm.  */
6216
      val = TREE_VALUE (params);
6217
      val = convert (ptype, val);
6218
      val = convert (TREE_VALUE (arg_types), val);
6219
      TREE_VALUE (params) = val;
6220
 
6221
      arg_types = TREE_CHAIN (arg_types);
6222
      number++;
6223
    }
6224
 
6225
  /* The definition of these primitives is variadic, with the remaining
6226
     being "an optional list of variables protected by the memory barrier".
6227
     No clue what that's supposed to mean, precisely, but we consider all
6228
     call-clobbered variables to be protected so we're safe.  */
6229
  TREE_CHAIN (params) = NULL;
6230
 
6231
  return true;
6232
}
6233
 
6234
/* A helper function for resolve_overloaded_builtin.  Adds a cast to
6235
   RESULT to make it match the type of the first pointer argument in
6236
   PARAMS.  */
6237
 
6238
static tree
6239
sync_resolve_return (tree params, tree result)
6240
{
6241
  tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6242
  ptype = TYPE_MAIN_VARIANT (ptype);
6243
  return convert (ptype, result);
6244
}
6245
 
6246
/* Some builtin functions are placeholders for other expressions.  This
6247
   function should be called immediately after parsing the call expression
6248
   before surrounding code has committed to the type of the expression.
6249
 
6250
   FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6251
   PARAMS is the argument list for the call.  The return value is non-null
6252
   when expansion is complete, and null if normal processing should
6253
   continue.  */
6254
 
6255
tree
6256
resolve_overloaded_builtin (tree function, tree params)
6257
{
6258
  enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
6259
  switch (DECL_BUILT_IN_CLASS (function))
6260
    {
6261
    case BUILT_IN_NORMAL:
6262
      break;
6263
    case BUILT_IN_MD:
6264
      if (targetm.resolve_overloaded_builtin)
6265
        return targetm.resolve_overloaded_builtin (function, params);
6266
      else
6267
        return NULL_TREE;
6268
    default:
6269
      return NULL_TREE;
6270
    }
6271
 
6272
  /* Handle BUILT_IN_NORMAL here.  */
6273
  switch (orig_code)
6274
    {
6275
    case BUILT_IN_FETCH_AND_ADD_N:
6276
    case BUILT_IN_FETCH_AND_SUB_N:
6277
    case BUILT_IN_FETCH_AND_OR_N:
6278
    case BUILT_IN_FETCH_AND_AND_N:
6279
    case BUILT_IN_FETCH_AND_XOR_N:
6280
    case BUILT_IN_FETCH_AND_NAND_N:
6281
    case BUILT_IN_ADD_AND_FETCH_N:
6282
    case BUILT_IN_SUB_AND_FETCH_N:
6283
    case BUILT_IN_OR_AND_FETCH_N:
6284
    case BUILT_IN_AND_AND_FETCH_N:
6285
    case BUILT_IN_XOR_AND_FETCH_N:
6286
    case BUILT_IN_NAND_AND_FETCH_N:
6287
    case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6288
    case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6289
    case BUILT_IN_LOCK_TEST_AND_SET_N:
6290
    case BUILT_IN_LOCK_RELEASE_N:
6291
      {
6292
        int n = sync_resolve_size (function, params);
6293
        tree new_function, result;
6294
 
6295
        if (n == 0)
6296
          return error_mark_node;
6297
 
6298
        new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6299
        if (!sync_resolve_params (function, new_function, params))
6300
          return error_mark_node;
6301
 
6302
        result = build_function_call (new_function, params);
6303
        if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6304
            && orig_code != BUILT_IN_LOCK_RELEASE_N)
6305
          result = sync_resolve_return (params, result);
6306
 
6307
        return result;
6308
      }
6309
 
6310
    default:
6311
      return NULL_TREE;
6312
    }
6313
}
6314
 
6315
/* Ignoring their sign, return true if two scalar types are the same.  */
6316
bool
6317
same_scalar_type_ignoring_signedness (tree t1, tree t2)
6318
{
6319
  enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
6320
 
6321
  gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE)
6322
              && (c2 == INTEGER_TYPE || c2 == REAL_TYPE));
6323
 
6324
  /* Equality works here because c_common_signed_type uses
6325
     TYPE_MAIN_VARIANT.  */
6326
  return lang_hooks.types.signed_type (t1)
6327
    == lang_hooks.types.signed_type (t2);
6328
}
6329
 
6330
/* Check for missing format attributes on function pointers.  LTYPE is
6331
   the new type or left-hand side type.  RTYPE is the old type or
6332
   right-hand side type.  Returns TRUE if LTYPE is missing the desired
6333
   attribute.  */
6334
 
6335
bool
6336
check_missing_format_attribute (tree ltype, tree rtype)
6337
{
6338
  tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
6339
  tree ra;
6340
 
6341
  for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
6342
    if (is_attribute_p ("format", TREE_PURPOSE (ra)))
6343
      break;
6344
  if (ra)
6345
    {
6346
      tree la;
6347
      for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
6348
        if (is_attribute_p ("format", TREE_PURPOSE (la)))
6349
          break;
6350
      return !la;
6351
    }
6352
  else
6353
    return false;
6354
}
6355
 
6356
#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.