1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
5 This file is part of GCC.
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
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
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
24 #include "coretypes.h"
36 #include "diagnostic.h"
41 #include "langhooks.h"
42 #include "tree-inline.h"
45 #include "tree-iterator.h"
47 #include "tree-mudflap.h"
52 cpp_reader *parse_in; /* Declared in c-pragma.h. */
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. */
61 #define SIZE_TYPE "long unsigned int"
65 #define PID_TYPE "int"
69 #define WCHAR_TYPE "int"
72 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
73 #define MODIFIED_WCHAR_TYPE \
74 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
77 #define PTRDIFF_TYPE "long int"
81 #define WINT_TYPE "unsigned int"
85 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
87 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
93 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
95 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
96 ? "long unsigned int" \
97 : "long long unsigned int"))
100 /* The following symbols are subsumed in the c_global_trees array, and
101 listed here individually for documentation purposes.
103 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
105 tree short_integer_type_node;
106 tree long_integer_type_node;
107 tree long_long_integer_type_node;
109 tree short_unsigned_type_node;
110 tree long_unsigned_type_node;
111 tree long_long_unsigned_type_node;
113 tree truthvalue_type_node;
114 tree truthvalue_false_node;
115 tree truthvalue_true_node;
117 tree ptrdiff_type_node;
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;
125 tree float_type_node;
126 tree double_type_node;
127 tree long_double_type_node;
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;
134 tree dfloat32_type_node;
135 tree dfloat64_type_node;
136 tree_dfloat128_type_node;
138 tree intQI_type_node;
139 tree intHI_type_node;
140 tree intSI_type_node;
141 tree intDI_type_node;
142 tree intTI_type_node;
144 tree unsigned_intQI_type_node;
145 tree unsigned_intHI_type_node;
146 tree unsigned_intSI_type_node;
147 tree unsigned_intDI_type_node;
148 tree unsigned_intTI_type_node;
150 tree widest_integer_literal_type_node;
151 tree widest_unsigned_literal_type_node;
153 Nodes for types `void *' and `const void *'.
155 tree ptr_type_node, const_ptr_type_node;
157 Nodes for types `char *' and `const char *'.
159 tree string_type_node, const_string_type_node;
161 Type `char[SOMENUMBER]'.
162 Used when an array of char is needed and the size is irrelevant.
164 tree char_array_type_node;
166 Type `int[SOMENUMBER]' or something like it.
167 Used when an array of int needed and the size is irrelevant.
169 tree int_array_type_node;
171 Type `wchar_t[SOMENUMBER]' or something like it.
172 Used when a wide string literal is created.
174 tree wchar_array_type_node;
176 Type `int ()' -- used for implicit declaration of functions.
178 tree default_function_type;
180 A VOID_TYPE node, packaged in a TREE_LIST.
184 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
185 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
186 VAR_DECLS, but C++ does.)
188 tree function_name_decl_node;
189 tree pretty_function_name_decl_node;
190 tree c99_function_name_decl_node;
192 Stack of nested function name VAR_DECLs.
194 tree saved_function_name_decls;
198 tree c_global_trees[CTI_MAX];
200 /* Switches common to the C front ends. */
202 /* Nonzero if prepreprocessing only. */
204 int flag_preprocess_only;
206 /* Nonzero means don't output line number information. */
208 char flag_no_line_commands;
210 /* Nonzero causes -E output not to be done, but directives such as
211 #define that have side effects are still obeyed. */
215 /* Nonzero means dump macros in some fashion. */
217 char flag_dump_macros;
219 /* Nonzero means pass #include lines through to the output. */
221 char flag_dump_includes;
223 /* Nonzero means process PCH files while preprocessing. */
225 bool flag_pch_preprocess;
227 /* The file name to which we should write a precompiled header, or
228 NULL if no header will be written in this compile. */
230 const char *pch_file;
232 /* Nonzero if an ISO standard was selected. It rejects macros in the
236 /* Nonzero if -undef was given. It suppresses target built-in macros
240 /* Nonzero means don't recognize the non-ANSI builtin functions. */
244 /* Nonzero means don't recognize the non-ANSI builtin functions.
247 int flag_no_nonansi_builtin;
249 /* Nonzero means give `double' the same size as `float'. */
251 int flag_short_double;
253 /* Nonzero means give `wchar_t' the same size as `short'. */
255 int flag_short_wchar;
257 /* Nonzero means allow Microsoft extensions without warnings or errors. */
258 int flag_ms_extensions;
260 /* Nonzero means don't recognize the keyword `asm'. */
264 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
266 int flag_signed_bitfields = 1;
268 /* Warn about #pragma directives that are not recognized. */
270 int warn_unknown_pragmas; /* Tri state variable. */
272 /* Warn about format/argument anomalies in calls to formatted I/O functions
273 (*printf, *scanf, strftime, strfmon, etc.). */
277 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
278 with GCC this doesn't matter as __null is guaranteed to have the right
281 int warn_strict_null_sentinel;
283 /* Zero means that faster, ...NonNil variants of objc_msgSend...
284 calls will be used in ObjC; passing nil receivers to such calls
285 will most likely result in crashes. */
286 int flag_nil_receivers = 1;
288 /* Nonzero means that code generation will be altered to support
289 "zero-link" execution. This currently affects ObjC only, but may
290 affect other languages in the future. */
291 int flag_zero_link = 0;
293 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
294 unit. It will inform the ObjC runtime that class definition(s) herein
295 contained are to replace one(s) previously loaded. */
296 int flag_replace_objc_classes = 0;
298 /* C/ObjC language option variables. */
301 /* Nonzero means allow type mismatches in conditional expressions;
302 just make their values `void'. */
304 int flag_cond_mismatch;
306 /* Nonzero means enable C89 Amendment 1 features. */
310 /* Nonzero means use the ISO C99 dialect of C. */
314 /* Nonzero means that we have builtin functions, and main is an int. */
318 /* Warn if main is suspicious. */
323 /* ObjC language option variables. */
326 /* Open and close the file for outputting class declarations, if
329 int flag_gen_declaration;
331 /* Tells the compiler that this is a special run. Do not perform any
332 compiling, instead we are to test some platform dependent features
333 and output a C header file with appropriate definitions. */
335 int print_struct_values;
337 /* Tells the compiler what is the constant string class for Objc. */
339 const char *constant_string_class_name;
342 /* C++ language option variables. */
345 /* Nonzero means don't recognize any extension keywords. */
347 int flag_no_gnu_keywords;
349 /* Nonzero means do emit exported implementations of functions even if
350 they can be inlined. */
352 int flag_implement_inlines = 1;
354 /* Nonzero means that implicit instantiations will be emitted if needed. */
356 int flag_implicit_templates = 1;
358 /* Nonzero means that implicit instantiations of inline templates will be
359 emitted if needed, even if instantiations of non-inline templates
362 int flag_implicit_inline_templates = 1;
364 /* Nonzero means generate separate instantiation control files and
365 juggle them at link time. */
367 int flag_use_repository;
369 /* Nonzero if we want to issue diagnostics that the standard says are not
372 int flag_optional_diags = 1;
374 /* Nonzero means we should attempt to elide constructors when possible. */
376 int flag_elide_constructors = 1;
378 /* Nonzero means that member functions defined in class scope are
379 inline by default. */
381 int flag_default_inline = 1;
383 /* Controls whether compiler generates 'type descriptor' that give
384 run-time type information. */
388 /* Nonzero if we want to conserve space in the .o files. We do this
389 by putting uninitialized data and runtime initialized data into
390 .common instead of .data at the expense of not flagging multiple
393 int flag_conserve_space;
395 /* Nonzero if we want to obey access control semantics. */
397 int flag_access_control = 1;
399 /* Nonzero if we want to check the return value of new and avoid calling
400 constructors if it is a null pointer. */
404 /* Nonzero if we want to allow the use of experimental features that
405 are likely to become part of C++0x. */
409 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
410 initialization variables.
411 0: Old rules, set by -fno-for-scope.
412 2: New ISO rules, set by -ffor-scope.
413 1: Try to implement new ISO rules, but with backup compatibility
414 (and warnings). This is the default, for now. */
416 int flag_new_for_scope = 1;
418 /* Nonzero if we want to emit defined symbols with common-like linkage as
419 weak symbols where possible, in order to conform to C++ semantics.
420 Otherwise, emit them as local symbols. */
424 /* 0 means we want the preprocessor to not emit line directives for
425 the current working directory. 1 means we want it to do it. -1
426 means we should decide depending on whether debugging information
427 is being emitted or not. */
429 int flag_working_directory = -1;
431 /* Nonzero to use __cxa_atexit, rather than atexit, to register
432 destructors for local statics and global objects. '2' means it has been
433 set nonzero as a default, not by a command-line flag. */
435 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
437 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
438 code. '2' means it has not been set explicitly on the command line. */
440 int flag_use_cxa_get_exception_ptr = 2;
442 /* Nonzero means make the default pedwarns warnings instead of errors.
443 The value of this flag is ignored if -pedantic is specified. */
447 /* Nonzero means to implement standard semantics for exception
448 specifications, calling unexpected if an exception is thrown that
449 doesn't match the specification. Zero means to treat them as
450 assertions and optimize accordingly, but not check them. */
452 int flag_enforce_eh_specs = 1;
454 /* Nonzero means to generate thread-safe code for initializing local
457 int flag_threadsafe_statics = 1;
459 /* Nonzero means warn about implicit declarations. */
461 int warn_implicit = 1;
463 /* Maximum template instantiation depth. This limit is rather
464 arbitrary, but it exists to limit the time it takes to notice
465 infinite template instantiations. */
467 int max_tinst_depth = 500;
471 /* The elements of `ridpointers' are identifier nodes for the reserved
472 type names and storage classes. It is indexed by a RID_... value. */
475 tree (*make_fname_decl) (tree, int);
477 /* Nonzero means the expression being parsed will never be evaluated.
478 This is a count, since unevaluated expressions can nest. */
481 /* Information about how a function name is generated. */
484 tree *const decl; /* pointer to the VAR_DECL. */
485 const unsigned rid; /* RID number for the identifier. */
486 const int pretty; /* How pretty is it? */
489 /* The three ways of getting then name of the current function. */
491 const struct fname_var_t fname_vars[] =
493 /* C99 compliant __func__, must be first. */
494 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
495 /* GCC __FUNCTION__ compliant. */
496 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
497 /* GCC __PRETTY_FUNCTION__ compliant. */
498 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
502 static tree check_case_value (tree);
503 static bool check_case_bounds (tree, tree, tree *, tree *);
505 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
506 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
507 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
508 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
509 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
510 static tree handle_always_inline_attribute (tree *, tree, tree, int,
512 static tree handle_gnu_inline_attribute (tree *, tree, tree, int,
514 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
515 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
516 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
517 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
519 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
520 static tree handle_transparent_union_attribute (tree *, tree, tree,
522 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
523 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
524 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
525 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
526 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
527 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
528 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
529 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
530 static tree handle_visibility_attribute (tree *, tree, tree, int,
532 static tree handle_tls_model_attribute (tree *, tree, tree, int,
534 static tree handle_no_instrument_function_attribute (tree *, tree,
536 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
537 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
538 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
540 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
541 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
542 static tree handle_deprecated_attribute (tree *, tree, tree, int,
544 static tree handle_vector_size_attribute (tree *, tree, tree, int,
546 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
547 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
548 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
549 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
551 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
553 static void check_function_nonnull (tree, tree);
554 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
555 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
556 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
557 static int resort_field_decl_cmp (const void *, const void *);
559 /* Table of machine-independent attributes common to all C-like languages. */
560 const struct attribute_spec c_common_attribute_table[] =
562 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
563 { "packed", 0, 0, false, false, false,
564 handle_packed_attribute },
565 { "nocommon", 0, 0, true, false, false,
566 handle_nocommon_attribute },
567 { "common", 0, 0, true, false, false,
568 handle_common_attribute },
569 /* FIXME: logically, noreturn attributes should be listed as
570 "false, true, true" and apply to function types. But implementing this
571 would require all the places in the compiler that use TREE_THIS_VOLATILE
572 on a decl to identify non-returning functions to be located and fixed
573 to check the function type instead. */
574 { "noreturn", 0, 0, true, false, false,
575 handle_noreturn_attribute },
576 { "volatile", 0, 0, true, false, false,
577 handle_noreturn_attribute },
578 { "noinline", 0, 0, true, false, false,
579 handle_noinline_attribute },
580 { "always_inline", 0, 0, true, false, false,
581 handle_always_inline_attribute },
582 { "gnu_inline", 0, 0, true, false, false,
583 handle_gnu_inline_attribute },
584 { "flatten", 0, 0, true, false, false,
585 handle_flatten_attribute },
586 { "used", 0, 0, true, false, false,
587 handle_used_attribute },
588 { "unused", 0, 0, false, false, false,
589 handle_unused_attribute },
590 { "externally_visible", 0, 0, true, false, false,
591 handle_externally_visible_attribute },
592 /* The same comments as for noreturn attributes apply to const ones. */
593 { "const", 0, 0, true, false, false,
594 handle_const_attribute },
595 { "transparent_union", 0, 0, false, false, false,
596 handle_transparent_union_attribute },
597 { "constructor", 0, 0, true, false, false,
598 handle_constructor_attribute },
599 { "destructor", 0, 0, true, false, false,
600 handle_destructor_attribute },
601 { "mode", 1, 1, false, true, false,
602 handle_mode_attribute },
603 { "section", 1, 1, true, false, false,
604 handle_section_attribute },
605 { "aligned", 0, 1, false, false, false,
606 handle_aligned_attribute },
607 { "weak", 0, 0, true, false, false,
608 handle_weak_attribute },
609 { "alias", 1, 1, true, false, false,
610 handle_alias_attribute },
611 { "weakref", 0, 1, true, false, false,
612 handle_weakref_attribute },
613 { "no_instrument_function", 0, 0, true, false, false,
614 handle_no_instrument_function_attribute },
615 { "malloc", 0, 0, true, false, false,
616 handle_malloc_attribute },
617 { "returns_twice", 0, 0, true, false, false,
618 handle_returns_twice_attribute },
619 { "no_stack_limit", 0, 0, true, false, false,
620 handle_no_limit_stack_attribute },
621 { "pure", 0, 0, true, false, false,
622 handle_pure_attribute },
623 /* For internal use (marking of builtins) only. The name contains space
624 to prevent its usage in source code. */
625 { "no vops", 0, 0, true, false, false,
626 handle_novops_attribute },
627 { "deprecated", 0, 0, false, false, false,
628 handle_deprecated_attribute },
629 { "vector_size", 1, 1, false, true, false,
630 handle_vector_size_attribute },
631 { "visibility", 1, 1, false, false, false,
632 handle_visibility_attribute },
633 { "tls_model", 1, 1, true, false, false,
634 handle_tls_model_attribute },
635 { "nonnull", 0, -1, false, true, true,
636 handle_nonnull_attribute },
637 { "nothrow", 0, 0, true, false, false,
638 handle_nothrow_attribute },
639 { "may_alias", 0, 0, false, true, false, NULL },
640 { "cleanup", 1, 1, true, false, false,
641 handle_cleanup_attribute },
642 { "warn_unused_result", 0, 0, false, true, true,
643 handle_warn_unused_result_attribute },
644 { "sentinel", 0, 1, false, true, true,
645 handle_sentinel_attribute },
646 { NULL, 0, 0, false, false, false, NULL }
649 /* Give the specifications for the format attributes, used by C and all
652 const struct attribute_spec c_common_format_attribute_table[] =
654 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
655 { "format", 3, 3, false, true, true,
656 handle_format_attribute },
657 { "format_arg", 1, 1, false, true, true,
658 handle_format_arg_attribute },
659 { NULL, 0, 0, false, false, false, NULL }
662 /* Push current bindings for the function name VAR_DECLS. */
665 start_fname_decls (void)
668 tree saved = NULL_TREE;
670 for (ix = 0; fname_vars[ix].decl; ix++)
672 tree decl = *fname_vars[ix].decl;
676 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
677 *fname_vars[ix].decl = NULL_TREE;
680 if (saved || saved_function_name_decls)
681 /* Normally they'll have been NULL, so only push if we've got a
682 stack, or they are non-NULL. */
683 saved_function_name_decls = tree_cons (saved, NULL_TREE,
684 saved_function_name_decls);
687 /* Finish up the current bindings, adding them into the current function's
688 statement tree. This must be done _before_ finish_stmt_tree is called.
689 If there is no current function, we must be at file scope and no statements
690 are involved. Pop the previous bindings. */
693 finish_fname_decls (void)
696 tree stmts = NULL_TREE;
697 tree stack = saved_function_name_decls;
699 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
700 append_to_statement_list (TREE_VALUE (stack), &stmts);
704 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
706 if (TREE_CODE (*bodyp) == BIND_EXPR)
707 bodyp = &BIND_EXPR_BODY (*bodyp);
709 append_to_statement_list_force (*bodyp, &stmts);
713 for (ix = 0; fname_vars[ix].decl; ix++)
714 *fname_vars[ix].decl = NULL_TREE;
718 /* We had saved values, restore them. */
721 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
723 tree decl = TREE_PURPOSE (saved);
724 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
726 *fname_vars[ix].decl = decl;
728 stack = TREE_CHAIN (stack);
730 saved_function_name_decls = stack;
733 /* Return the text name of the current function, suitably prettified
734 by PRETTY_P. Return string must be freed by caller. */
737 fname_as_string (int pretty_p)
739 const char *name = "top level";
749 if (current_function_decl)
750 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
752 if (c_lex_string_translate)
754 int len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
755 cpp_string cstr = { 0, 0 }, strname;
757 namep = XNEWVEC (char, len);
758 snprintf (namep, len, "\"%s\"", name);
759 strname.text = (unsigned char *) namep;
760 strname.len = len - 1;
762 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
765 return (char *) cstr.text;
769 namep = xstrdup (name);
774 /* Expand DECL if it declares an entity not handled by the
778 c_expand_decl (tree decl)
780 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
782 /* Let the back-end know about this variable. */
783 if (!anon_aggr_type_p (TREE_TYPE (decl)))
784 emit_local_var (decl);
786 expand_anon_union_decl (decl, NULL_TREE,
787 DECL_ANON_UNION_ELEMS (decl));
796 /* Return the VAR_DECL for a const char array naming the current
797 function. If the VAR_DECL has not yet been created, create it
798 now. RID indicates how it should be formatted and IDENTIFIER_NODE
799 ID is its name (unfortunately C and C++ hold the RID values of
800 keywords in different places, so we can't derive RID from ID in
801 this language independent code. */
804 fname_decl (unsigned int rid, tree id)
807 tree decl = NULL_TREE;
809 for (ix = 0; fname_vars[ix].decl; ix++)
810 if (fname_vars[ix].rid == rid)
813 decl = *fname_vars[ix].decl;
816 /* If a tree is built here, it would normally have the lineno of
817 the current statement. Later this tree will be moved to the
818 beginning of the function and this line number will be wrong.
819 To avoid this problem set the lineno to 0 here; that prevents
820 it from appearing in the RTL. */
822 location_t saved_location = input_location;
823 #ifdef USE_MAPPED_LOCATION
824 input_location = UNKNOWN_LOCATION;
829 stmts = push_stmt_list ();
830 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
831 stmts = pop_stmt_list (stmts);
832 if (!IS_EMPTY_STMT (stmts))
833 saved_function_name_decls
834 = tree_cons (decl, stmts, saved_function_name_decls);
835 *fname_vars[ix].decl = decl;
836 input_location = saved_location;
838 if (!ix && !current_function_decl)
839 pedwarn ("%qD is not defined outside of function scope", decl);
844 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
847 fix_string_type (tree value)
849 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
850 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
851 int length = TREE_STRING_LENGTH (value);
853 tree e_type, i_type, a_type;
855 /* Compute the number of elements, for the array type. */
856 nchars = wide_flag ? length / wchar_bytes : length;
858 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
859 limit in C++98 Annex B is very large (65536) and is not normative,
860 so we do not diagnose it (warn_overlength_strings is forced off
861 in c_common_post_options). */
862 if (warn_overlength_strings)
864 const int nchars_max = flag_isoc99 ? 4095 : 509;
865 const int relevant_std = flag_isoc99 ? 99 : 90;
866 if (nchars - 1 > nchars_max)
867 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
868 separate the %d from the 'C'. 'ISO' should not be
869 translated, but it may be moved after 'C%d' in languages
870 where modifiers follow nouns. */
871 pedwarn ("string length %qd is greater than the length %qd "
872 "ISO C%d compilers are required to support",
873 nchars - 1, nchars_max, relevant_std);
876 /* Create the array type for the string constant. The ISO C++
877 standard says that a string literal has type `const char[N]' or
878 `const wchar_t[N]'. We use the same logic when invoked as a C
879 front-end with -Wwrite-strings.
880 ??? We should change the type of an expression depending on the
881 state of a warning flag. We should just be warning -- see how
882 this is handled in the C++ front-end for the deprecated implicit
883 conversion from string literals to `char*' or `wchar_t*'.
885 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
886 array type being the unqualified version of that type.
887 Therefore, if we are constructing an array of const char, we must
888 construct the matching unqualified array type first. The C front
889 end does not require this, but it does no harm, so we do it
891 e_type = wide_flag ? wchar_type_node : char_type_node;
892 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
893 a_type = build_array_type (e_type, i_type);
894 if (c_dialect_cxx() || warn_write_strings)
895 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
897 TREE_TYPE (value) = a_type;
898 TREE_CONSTANT (value) = 1;
899 TREE_INVARIANT (value) = 1;
900 TREE_READONLY (value) = 1;
901 TREE_STATIC (value) = 1;
905 /* Print a warning if a constant expression had overflow in folding.
906 Invoke this function on every expression that the language
907 requires to be a constant expression.
908 Note the ANSI C standard says it is erroneous for a
909 constant expression to overflow. */
912 constant_expression_warning (tree value)
914 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
915 || TREE_CODE (value) == VECTOR_CST
916 || TREE_CODE (value) == COMPLEX_CST)
917 && TREE_CONSTANT_OVERFLOW (value)
920 pedwarn ("overflow in constant expression");
923 /* Print a warning if an expression had overflow in folding.
924 Invoke this function on every expression that
925 (1) appears in the source code, and
926 (2) might be a constant expression that overflowed, and
927 (3) is not already checked by convert_and_check;
928 however, do not invoke this function on operands of explicit casts. */
931 overflow_warning (tree value)
933 if ((TREE_CODE (value) == INTEGER_CST
934 || (TREE_CODE (value) == COMPLEX_CST
935 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
936 && TREE_OVERFLOW (value))
938 TREE_OVERFLOW (value) = 0;
939 if (skip_evaluation == 0)
940 warning (OPT_Woverflow, "integer overflow in expression");
942 else if ((TREE_CODE (value) == REAL_CST
943 || (TREE_CODE (value) == COMPLEX_CST
944 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
945 && TREE_OVERFLOW (value))
947 TREE_OVERFLOW (value) = 0;
948 if (skip_evaluation == 0)
949 warning (OPT_Woverflow, "floating point overflow in expression");
951 else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
953 TREE_OVERFLOW (value) = 0;
954 if (skip_evaluation == 0)
955 warning (OPT_Woverflow, "vector overflow in expression");
959 /* Print a warning about casts that might indicate violation
960 of strict aliasing rules if -Wstrict-aliasing is used and
961 strict aliasing mode is in effect. OTYPE is the original
962 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
965 strict_aliasing_warning (tree otype, tree type, tree expr)
967 if (flag_strict_aliasing && warn_strict_aliasing
968 && POINTER_TYPE_P (type) && POINTER_TYPE_P (otype)
969 && TREE_CODE (expr) == ADDR_EXPR
970 && (DECL_P (TREE_OPERAND (expr, 0))
971 || handled_component_p (TREE_OPERAND (expr, 0)))
972 && !VOID_TYPE_P (TREE_TYPE (type)))
974 /* Casting the address of an object to non void pointer. Warn
975 if the cast breaks type based aliasing. */
976 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
977 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
978 "might break strict-aliasing rules");
981 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
982 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
984 if (!alias_sets_conflict_p (set1, set2))
985 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
986 "pointer will break strict-aliasing rules");
987 else if (warn_strict_aliasing > 1
988 && !alias_sets_might_conflict_p (set1, set2))
989 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
990 "pointer might break strict-aliasing rules");
995 /* Print a warning about if (); or if () .. else; constructs
996 via the special empty statement node that we create. INNER_THEN
997 and INNER_ELSE are the statement lists of the if and the else
1001 empty_body_warning (tree inner_then, tree inner_else)
1003 if (warn_empty_body)
1005 if (TREE_CODE (inner_then) == STATEMENT_LIST
1006 && STATEMENT_LIST_TAIL (inner_then))
1007 inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1009 if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1010 && STATEMENT_LIST_TAIL (inner_else))
1011 inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1013 if (IS_EMPTY_STMT (inner_then) && !inner_else)
1014 warning (OPT_Wempty_body, "%Hempty body in an if-statement",
1015 EXPR_LOCUS (inner_then));
1017 if (inner_else && IS_EMPTY_STMT (inner_else))
1018 warning (OPT_Wempty_body, "%Hempty body in an else-statement",
1019 EXPR_LOCUS (inner_else));
1023 /* Warn for unlikely, improbable, or stupid DECL declarations
1027 check_main_parameter_types (tree decl)
1032 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1033 args = TREE_CHAIN (args))
1035 tree type = args ? TREE_VALUE (args) : 0;
1037 if (type == void_type_node || type == error_mark_node )
1044 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1045 pedwarn ("first argument of %q+D should be %<int%>", decl);
1049 if (TREE_CODE (type) != POINTER_TYPE
1050 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1051 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1053 pedwarn ("second argument of %q+D should be %<char **%>",
1058 if (TREE_CODE (type) != POINTER_TYPE
1059 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1060 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1062 pedwarn ("third argument of %q+D should probably be "
1063 "%<char **%>", decl);
1068 /* It is intentional that this message does not mention the third
1069 argument because it's only mentioned in an appendix of the
1071 if (argct > 0 && (argct < 2 || argct > 3))
1072 pedwarn ("%q+D takes only zero or two arguments", decl);
1076 /* Nonzero if vector types T1 and T2 can be converted to each other
1077 without an explicit cast. */
1079 vector_types_convertible_p (tree t1, tree t2)
1081 return targetm.vector_opaque_p (t1)
1082 || targetm.vector_opaque_p (t2)
1083 || (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1084 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1085 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1086 && INTEGRAL_TYPE_P (TREE_TYPE (t1))
1087 == INTEGRAL_TYPE_P (TREE_TYPE (t2)));
1090 /* Warns if the conversion of EXPR to TYPE may alter a value.
1091 This function is called from convert_and_check. */
1094 conversion_warning (tree type, tree expr)
1096 bool give_warning = false;
1098 unsigned int formal_prec = TYPE_PRECISION (type);
1100 if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1102 /* Warn for real constant that is not an exact integer converted
1104 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1105 && TREE_CODE (type) == INTEGER_TYPE)
1107 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1108 give_warning = true;
1110 /* Warn for an integer constant that does not fit into integer type. */
1111 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1112 && TREE_CODE (type) == INTEGER_TYPE
1113 && !int_fits_type_p (expr, type))
1115 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1116 warning (OPT_Wconversion,
1117 "negative integer implicitly converted to unsigned type");
1119 give_warning = true;
1121 else if (TREE_CODE (type) == REAL_TYPE)
1123 /* Warn for an integer constant that does not fit into real type. */
1124 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1126 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1127 if (!exact_real_truncate (TYPE_MODE (type), &a))
1128 give_warning = true;
1130 /* Warn for a real constant that does not fit into a smaller
1132 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1133 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1135 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1136 if (!exact_real_truncate (TYPE_MODE (type), &a))
1137 give_warning = true;
1142 warning (OPT_Wconversion,
1143 "conversion to %qT alters %qT constant value",
1144 type, TREE_TYPE (expr));
1146 else /* 'expr' is not a constant. */
1148 /* Warn for real types converted to integer types. */
1149 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1150 && TREE_CODE (type) == INTEGER_TYPE)
1151 give_warning = true;
1153 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1154 && TREE_CODE (type) == INTEGER_TYPE)
1156 /* Warn for integer types converted to smaller integer types. */
1157 if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr))
1158 /* When they are the same width but different signedness,
1159 then the value may change. */
1160 || (formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1161 && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1162 /* Even when converted to a bigger type, if the type is
1163 unsigned but expr is signed, then negative values
1165 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1166 give_warning = true;
1169 /* Warn for integer types converted to real types if and only if
1170 all the range of values of the integer type cannot be
1171 represented by the real type. */
1172 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1173 && TREE_CODE (type) == REAL_TYPE)
1175 tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1176 tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1177 REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1178 REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1180 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1181 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1182 give_warning = true;
1185 /* Warn for real types converted to smaller real types. */
1186 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1187 && TREE_CODE (type) == REAL_TYPE
1188 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1189 give_warning = true;
1193 warning (OPT_Wconversion,
1194 "conversion to %qT from %qT may alter its value",
1195 type, TREE_TYPE (expr));
1199 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1200 Invoke this function on every expression that is converted implicitly,
1201 i.e. because of language rules and not because of an explicit cast. */
1204 convert_and_check (tree type, tree expr)
1208 if (TREE_TYPE (expr) == type)
1211 result = convert (type, expr);
1213 if (skip_evaluation)
1217 if (TREE_CODE (expr) == INTEGER_CST
1218 && (TREE_CODE (type) == INTEGER_TYPE
1219 || TREE_CODE (type) == ENUMERAL_TYPE)
1220 && !int_fits_type_p (expr, type))
1222 /* Do not diagnose overflow in a constant expression merely
1223 because a conversion overflowed. */
1224 if (TREE_OVERFLOW (result))
1226 TREE_CONSTANT_OVERFLOW (result) = TREE_CONSTANT_OVERFLOW (expr);
1227 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1230 if (TYPE_UNSIGNED (type))
1232 /* This detects cases like converting -129 or 256 to
1234 if (!int_fits_type_p (expr, c_common_signed_type (type)))
1235 warning (OPT_Woverflow,
1236 "large integer implicitly truncated to unsigned type");
1237 else if (warn_conversion)
1238 conversion_warning (type, expr);
1242 if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
1243 warning (OPT_Woverflow,
1244 "overflow in implicit constant conversion");
1245 /* No warning for converting 0x80000000 to int. */
1247 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1248 || TYPE_PRECISION (TREE_TYPE (expr))
1249 != TYPE_PRECISION (type)))
1250 warning (OPT_Woverflow,
1251 "overflow in implicit constant conversion");
1252 else if (warn_conversion)
1253 conversion_warning (type, expr);
1256 else if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
1257 warning (OPT_Woverflow,
1258 "overflow in implicit constant conversion");
1259 else if (warn_conversion)
1260 conversion_warning (type, expr);
1265 /* A node in a list that describes references to variables (EXPR), which are
1266 either read accesses if WRITER is zero, or write accesses, in which case
1267 WRITER is the parent of EXPR. */
1274 /* Used to implement a cache the results of a call to verify_tree. We only
1275 use this for SAVE_EXPRs. */
1278 struct tlist_cache *next;
1279 struct tlist *cache_before_sp;
1280 struct tlist *cache_after_sp;
1284 /* Obstack to use when allocating tlist structures, and corresponding
1286 static struct obstack tlist_obstack;
1287 static char *tlist_firstobj = 0;
1289 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1291 static struct tlist *warned_ids;
1292 /* SAVE_EXPRs need special treatment. We process them only once and then
1293 cache the results. */
1294 static struct tlist_cache *save_expr_cache;
1296 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1297 static void merge_tlist (struct tlist **, struct tlist *, int);
1298 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1299 static int warning_candidate_p (tree);
1300 static void warn_for_collisions (struct tlist *);
1301 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1302 static struct tlist *new_tlist (struct tlist *, tree, tree);
1304 /* Create a new struct tlist and fill in its fields. */
1305 static struct tlist *
1306 new_tlist (struct tlist *next, tree t, tree writer)
1309 l = XOBNEW (&tlist_obstack, struct tlist);
1316 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1317 is nonnull, we ignore any node we find which has a writer equal to it. */
1320 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1324 struct tlist *next = add->next;
1327 if (!exclude_writer || add->writer != exclude_writer)
1328 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1333 /* Merge the nodes of ADD into TO. This merging process is done so that for
1334 each variable that already exists in TO, no new node is added; however if
1335 there is a write access recorded in ADD, and an occurrence on TO is only
1336 a read access, then the occurrence in TO will be modified to record the
1340 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1342 struct tlist **end = to;
1345 end = &(*end)->next;
1351 struct tlist *next = add->next;
1353 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1354 if (tmp2->expr == add->expr)
1358 tmp2->writer = add->writer;
1362 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1363 end = &(*end)->next;
1370 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1371 references in list LIST conflict with it, excluding reads if ONLY writers
1375 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1380 /* Avoid duplicate warnings. */
1381 for (tmp = warned_ids; tmp; tmp = tmp->next)
1382 if (tmp->expr == written)
1387 if (list->expr == written
1388 && list->writer != writer
1389 && (!only_writes || list->writer)
1390 && DECL_NAME (list->expr))
1392 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1393 warning (0, "operation on %qE may be undefined", list->expr);
1399 /* Given a list LIST of references to variables, find whether any of these
1400 can cause conflicts due to missing sequence points. */
1403 warn_for_collisions (struct tlist *list)
1407 for (tmp = list; tmp; tmp = tmp->next)
1410 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1414 /* Return nonzero if X is a tree that can be verified by the sequence point
1417 warning_candidate_p (tree x)
1419 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1422 /* Walk the tree X, and record accesses to variables. If X is written by the
1423 parent tree, WRITER is the parent.
1424 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1425 expression or its only operand forces a sequence point, then everything up
1426 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1428 Once we return, we will have emitted warnings if any subexpression before
1429 such a sequence point could be undefined. On a higher level, however, the
1430 sequence point may not be relevant, and we'll merge the two lists.
1432 Example: (b++, a) + b;
1433 The call that processes the COMPOUND_EXPR will store the increment of B
1434 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1435 processes the PLUS_EXPR will need to merge the two lists so that
1436 eventually, all accesses end up on the same list (and we'll warn about the
1437 unordered subexpressions b++ and b.
1439 A note on merging. If we modify the former example so that our expression
1442 care must be taken not simply to add all three expressions into the final
1443 PNO_SP list. The function merge_tlist takes care of that by merging the
1444 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1445 way, so that no more than one access to B is recorded. */
1448 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1451 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1452 enum tree_code code;
1453 enum tree_code_class cl;
1455 /* X may be NULL if it is the operand of an empty statement expression
1461 code = TREE_CODE (x);
1462 cl = TREE_CODE_CLASS (code);
1464 if (warning_candidate_p (x))
1466 *pno_sp = new_tlist (*pno_sp, x, writer);
1476 case TRUTH_ANDIF_EXPR:
1477 case TRUTH_ORIF_EXPR:
1478 tmp_before = tmp_nosp = tmp_list3 = 0;
1479 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1480 warn_for_collisions (tmp_nosp);
1481 merge_tlist (pbefore_sp, tmp_before, 0);
1482 merge_tlist (pbefore_sp, tmp_nosp, 0);
1483 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1484 merge_tlist (pbefore_sp, tmp_list3, 0);
1488 tmp_before = tmp_list2 = 0;
1489 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1490 warn_for_collisions (tmp_list2);
1491 merge_tlist (pbefore_sp, tmp_before, 0);
1492 merge_tlist (pbefore_sp, tmp_list2, 1);
1494 tmp_list3 = tmp_nosp = 0;
1495 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1496 warn_for_collisions (tmp_nosp);
1497 merge_tlist (pbefore_sp, tmp_list3, 0);
1499 tmp_list3 = tmp_list2 = 0;
1500 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1501 warn_for_collisions (tmp_list2);
1502 merge_tlist (pbefore_sp, tmp_list3, 0);
1503 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1504 two first, to avoid warning for (a ? b++ : b++). */
1505 merge_tlist (&tmp_nosp, tmp_list2, 0);
1506 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1509 case PREDECREMENT_EXPR:
1510 case PREINCREMENT_EXPR:
1511 case POSTDECREMENT_EXPR:
1512 case POSTINCREMENT_EXPR:
1513 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1517 tmp_before = tmp_nosp = tmp_list3 = 0;
1518 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1519 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1520 /* Expressions inside the LHS are not ordered wrt. the sequence points
1521 in the RHS. Example:
1523 Despite the fact that the modification of "a" is in the before_sp
1524 list (tmp_before), it conflicts with the use of "a" in the LHS.
1525 We can handle this by adding the contents of tmp_list3
1526 to those of tmp_before, and redoing the collision warnings for that
1528 add_tlist (&tmp_before, tmp_list3, x, 1);
1529 warn_for_collisions (tmp_before);
1530 /* Exclude the LHS itself here; we first have to merge it into the
1531 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1532 didn't exclude the LHS, we'd get it twice, once as a read and once
1534 add_tlist (pno_sp, tmp_list3, x, 0);
1535 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1537 merge_tlist (pbefore_sp, tmp_before, 0);
1538 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1539 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1540 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1544 /* We need to warn about conflicts among arguments and conflicts between
1545 args and the function address. Side effects of the function address,
1546 however, are not ordered by the sequence point of the call. */
1547 tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1548 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1549 if (TREE_OPERAND (x, 1))
1550 verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1551 merge_tlist (&tmp_list3, tmp_list2, 0);
1552 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1553 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1554 warn_for_collisions (tmp_before);
1555 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1559 /* Scan all the list, e.g. indices of multi dimensional array. */
1562 tmp_before = tmp_nosp = 0;
1563 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1564 merge_tlist (&tmp_nosp, tmp_before, 0);
1565 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1572 struct tlist_cache *t;
1573 for (t = save_expr_cache; t; t = t->next)
1579 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1580 t->next = save_expr_cache;
1582 save_expr_cache = t;
1584 tmp_before = tmp_nosp = 0;
1585 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1586 warn_for_collisions (tmp_nosp);
1591 struct tlist *t = tmp_nosp;
1593 merge_tlist (&tmp_list3, t, 0);
1595 t->cache_before_sp = tmp_before;
1596 t->cache_after_sp = tmp_list3;
1598 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1599 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1604 /* For other expressions, simply recurse on their operands.
1605 Manual tail recursion for unary expressions.
1606 Other non-expressions need not be processed. */
1607 if (cl == tcc_unary)
1609 x = TREE_OPERAND (x, 0);
1613 else if (IS_EXPR_CODE_CLASS (cl))
1616 int max = TREE_CODE_LENGTH (TREE_CODE (x));
1617 for (lp = 0; lp < max; lp++)
1619 tmp_before = tmp_nosp = 0;
1620 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1621 merge_tlist (&tmp_nosp, tmp_before, 0);
1622 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1629 /* Try to warn for undefined behavior in EXPR due to missing sequence
1633 verify_sequence_points (tree expr)
1635 struct tlist *before_sp = 0, *after_sp = 0;
1638 save_expr_cache = 0;
1639 if (tlist_firstobj == 0)
1641 gcc_obstack_init (&tlist_obstack);
1642 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1645 verify_tree (expr, &before_sp, &after_sp, 0);
1646 warn_for_collisions (after_sp);
1647 obstack_free (&tlist_obstack, tlist_firstobj);
1650 /* Validate the expression after `case' and apply default promotions. */
1653 check_case_value (tree value)
1655 if (value == NULL_TREE)
1658 /* ??? Can we ever get nops here for a valid case value? We
1660 STRIP_TYPE_NOPS (value);
1661 /* In C++, the following is allowed:
1664 switch (...) { case i: ... }
1666 So, we try to reduce the VALUE to a constant that way. */
1667 if (c_dialect_cxx ())
1669 value = decl_constant_value (value);
1670 STRIP_TYPE_NOPS (value);
1671 value = fold (value);
1674 if (TREE_CODE (value) == INTEGER_CST)
1675 /* Promote char or short to int. */
1676 value = perform_integral_promotions (value);
1677 else if (value != error_mark_node)
1679 error ("case label does not reduce to an integer constant");
1680 value = error_mark_node;
1683 constant_expression_warning (value);
1688 /* See if the case values LOW and HIGH are in the range of the original
1689 type (i.e. before the default conversion to int) of the switch testing
1691 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1692 the type before promoting it. CASE_LOW_P is a pointer to the lower
1693 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1694 if the case is not a case range.
1695 The caller has to make sure that we are not called with NULL for
1696 CASE_LOW_P (i.e. the default case).
1697 Returns true if the case label is in range of ORIG_TYPE (saturated or
1698 untouched) or false if the label is out of range. */
1701 check_case_bounds (tree type, tree orig_type,
1702 tree *case_low_p, tree *case_high_p)
1704 tree min_value, max_value;
1705 tree case_low = *case_low_p;
1706 tree case_high = case_high_p ? *case_high_p : case_low;
1708 /* If there was a problem with the original type, do nothing. */
1709 if (orig_type == error_mark_node)
1712 min_value = TYPE_MIN_VALUE (orig_type);
1713 max_value = TYPE_MAX_VALUE (orig_type);
1715 /* Case label is less than minimum for type. */
1716 if (tree_int_cst_compare (case_low, min_value) < 0
1717 && tree_int_cst_compare (case_high, min_value) < 0)
1719 warning (0, "case label value is less than minimum value for type");
1723 /* Case value is greater than maximum for type. */
1724 if (tree_int_cst_compare (case_low, max_value) > 0
1725 && tree_int_cst_compare (case_high, max_value) > 0)
1727 warning (0, "case label value exceeds maximum value for type");
1731 /* Saturate lower case label value to minimum. */
1732 if (tree_int_cst_compare (case_high, min_value) >= 0
1733 && tree_int_cst_compare (case_low, min_value) < 0)
1735 warning (0, "lower value in case label range"
1736 " less than minimum value for type");
1737 case_low = min_value;
1740 /* Saturate upper case label value to maximum. */
1741 if (tree_int_cst_compare (case_low, max_value) <= 0
1742 && tree_int_cst_compare (case_high, max_value) > 0)
1744 warning (0, "upper value in case label range"
1745 " exceeds maximum value for type");
1746 case_high = max_value;
1749 if (*case_low_p != case_low)
1750 *case_low_p = convert (type, case_low);
1751 if (case_high_p && *case_high_p != case_high)
1752 *case_high_p = convert (type, case_high);
1757 /* Return an integer type with BITS bits of precision,
1758 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1761 c_common_type_for_size (unsigned int bits, int unsignedp)
1763 if (bits == TYPE_PRECISION (integer_type_node))
1764 return unsignedp ? unsigned_type_node : integer_type_node;
1766 if (bits == TYPE_PRECISION (signed_char_type_node))
1767 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1769 if (bits == TYPE_PRECISION (short_integer_type_node))
1770 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1772 if (bits == TYPE_PRECISION (long_integer_type_node))
1773 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1775 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1776 return (unsignedp ? long_long_unsigned_type_node
1777 : long_long_integer_type_node);
1779 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1780 return (unsignedp ? widest_unsigned_literal_type_node
1781 : widest_integer_literal_type_node);
1783 if (bits <= TYPE_PRECISION (intQI_type_node))
1784 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1786 if (bits <= TYPE_PRECISION (intHI_type_node))
1787 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1789 if (bits <= TYPE_PRECISION (intSI_type_node))
1790 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1792 if (bits <= TYPE_PRECISION (intDI_type_node))
1793 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1798 /* Used for communication between c_common_type_for_mode and
1799 c_register_builtin_type. */
1800 static GTY(()) tree registered_builtin_types;
1802 /* Return a data type that has machine mode MODE.
1803 If the mode is an integer,
1804 then UNSIGNEDP selects between signed and unsigned types. */
1807 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1811 if (mode == TYPE_MODE (integer_type_node))
1812 return unsignedp ? unsigned_type_node : integer_type_node;
1814 if (mode == TYPE_MODE (signed_char_type_node))
1815 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1817 if (mode == TYPE_MODE (short_integer_type_node))
1818 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1820 if (mode == TYPE_MODE (long_integer_type_node))
1821 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1823 if (mode == TYPE_MODE (long_long_integer_type_node))
1824 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1826 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1827 return unsignedp ? widest_unsigned_literal_type_node
1828 : widest_integer_literal_type_node;
1831 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1834 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1837 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1840 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1842 #if HOST_BITS_PER_WIDE_INT >= 64
1843 if (mode == TYPE_MODE (intTI_type_node))
1844 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1847 if (mode == TYPE_MODE (float_type_node))
1848 return float_type_node;
1850 if (mode == TYPE_MODE (double_type_node))
1851 return double_type_node;
1853 if (mode == TYPE_MODE (long_double_type_node))
1854 return long_double_type_node;
1856 if (mode == TYPE_MODE (void_type_node))
1857 return void_type_node;
1859 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1861 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1862 : make_signed_type (GET_MODE_PRECISION (mode)));
1864 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1866 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1867 : make_signed_type (GET_MODE_PRECISION (mode)));
1869 if (COMPLEX_MODE_P (mode))
1871 enum machine_mode inner_mode;
1874 if (mode == TYPE_MODE (complex_float_type_node))
1875 return complex_float_type_node;
1876 if (mode == TYPE_MODE (complex_double_type_node))
1877 return complex_double_type_node;
1878 if (mode == TYPE_MODE (complex_long_double_type_node))
1879 return complex_long_double_type_node;
1881 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
1882 return complex_integer_type_node;
1884 inner_mode = GET_MODE_INNER (mode);
1885 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1886 if (inner_type != NULL_TREE)
1887 return build_complex_type (inner_type);
1889 else if (VECTOR_MODE_P (mode))
1891 enum machine_mode inner_mode = GET_MODE_INNER (mode);
1892 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1893 if (inner_type != NULL_TREE)
1894 return build_vector_type_for_mode (inner_type, mode);
1897 if (mode == TYPE_MODE (dfloat32_type_node))
1898 return dfloat32_type_node;
1899 if (mode == TYPE_MODE (dfloat64_type_node))
1900 return dfloat64_type_node;
1901 if (mode == TYPE_MODE (dfloat128_type_node))
1902 return dfloat128_type_node;
1904 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1905 if (TYPE_MODE (TREE_VALUE (t)) == mode)
1906 return TREE_VALUE (t);
1911 /* Return an unsigned type the same as TYPE in other respects. */
1913 c_common_unsigned_type (tree type)
1915 tree type1 = TYPE_MAIN_VARIANT (type);
1916 if (type1 == signed_char_type_node || type1 == char_type_node)
1917 return unsigned_char_type_node;
1918 if (type1 == integer_type_node)
1919 return unsigned_type_node;
1920 if (type1 == short_integer_type_node)
1921 return short_unsigned_type_node;
1922 if (type1 == long_integer_type_node)
1923 return long_unsigned_type_node;
1924 if (type1 == long_long_integer_type_node)
1925 return long_long_unsigned_type_node;
1926 if (type1 == widest_integer_literal_type_node)
1927 return widest_unsigned_literal_type_node;
1928 #if HOST_BITS_PER_WIDE_INT >= 64
1929 if (type1 == intTI_type_node)
1930 return unsigned_intTI_type_node;
1932 if (type1 == intDI_type_node)
1933 return unsigned_intDI_type_node;
1934 if (type1 == intSI_type_node)
1935 return unsigned_intSI_type_node;
1936 if (type1 == intHI_type_node)
1937 return unsigned_intHI_type_node;
1938 if (type1 == intQI_type_node)
1939 return unsigned_intQI_type_node;
1941 return c_common_signed_or_unsigned_type (1, type);
1944 /* Return a signed type the same as TYPE in other respects. */
1947 c_common_signed_type (tree type)
1949 tree type1 = TYPE_MAIN_VARIANT (type);
1950 if (type1 == unsigned_char_type_node || type1 == char_type_node)
1951 return signed_char_type_node;
1952 if (type1 == unsigned_type_node)
1953 return integer_type_node;
1954 if (type1 == short_unsigned_type_node)
1955 return short_integer_type_node;
1956 if (type1 == long_unsigned_type_node)
1957 return long_integer_type_node;
1958 if (type1 == long_long_unsigned_type_node)
1959 return long_long_integer_type_node;
1960 if (type1 == widest_unsigned_literal_type_node)
1961 return widest_integer_literal_type_node;
1962 #if HOST_BITS_PER_WIDE_INT >= 64
1963 if (type1 == unsigned_intTI_type_node)
1964 return intTI_type_node;
1966 if (type1 == unsigned_intDI_type_node)
1967 return intDI_type_node;
1968 if (type1 == unsigned_intSI_type_node)
1969 return intSI_type_node;
1970 if (type1 == unsigned_intHI_type_node)
1971 return intHI_type_node;
1972 if (type1 == unsigned_intQI_type_node)
1973 return intQI_type_node;
1975 return c_common_signed_or_unsigned_type (0, type);
1978 /* Return a type the same as TYPE except unsigned or
1979 signed according to UNSIGNEDP. */
1982 c_common_signed_or_unsigned_type (int unsignedp, tree type)
1984 if (!INTEGRAL_TYPE_P (type)
1985 || TYPE_UNSIGNED (type) == unsignedp)
1988 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
1989 the precision; they have precision set to match their range, but
1990 may use a wider mode to match an ABI. If we change modes, we may
1991 wind up with bad conversions. For INTEGER_TYPEs in C, must check
1992 the precision as well, so as to yield correct results for
1993 bit-field types. C++ does not have these separate bit-field
1994 types, and producing a signed or unsigned variant of an
1995 ENUMERAL_TYPE may cause other problems as well. */
1997 #define TYPE_OK(node) \
1998 (TYPE_MODE (type) == TYPE_MODE (node) \
1999 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2000 if (TYPE_OK (signed_char_type_node))
2001 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2002 if (TYPE_OK (integer_type_node))
2003 return unsignedp ? unsigned_type_node : integer_type_node;
2004 if (TYPE_OK (short_integer_type_node))
2005 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2006 if (TYPE_OK (long_integer_type_node))
2007 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2008 if (TYPE_OK (long_long_integer_type_node))
2009 return (unsignedp ? long_long_unsigned_type_node
2010 : long_long_integer_type_node);
2011 if (TYPE_OK (widest_integer_literal_type_node))
2012 return (unsignedp ? widest_unsigned_literal_type_node
2013 : widest_integer_literal_type_node);
2015 #if HOST_BITS_PER_WIDE_INT >= 64
2016 if (TYPE_OK (intTI_type_node))
2017 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2019 if (TYPE_OK (intDI_type_node))
2020 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2021 if (TYPE_OK (intSI_type_node))
2022 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2023 if (TYPE_OK (intHI_type_node))
2024 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2025 if (TYPE_OK (intQI_type_node))
2026 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2029 if (c_dialect_cxx ())
2032 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2035 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
2038 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2040 /* Extended integer types of the same width as a standard type have
2041 lesser rank, so those of the same width as int promote to int or
2042 unsigned int and are valid for printf formats expecting int or
2043 unsigned int. To avoid such special cases, avoid creating
2044 extended integer types for bit-fields if a standard integer type
2046 if (width == TYPE_PRECISION (integer_type_node))
2047 return unsignedp ? unsigned_type_node : integer_type_node;
2048 if (width == TYPE_PRECISION (signed_char_type_node))
2049 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2050 if (width == TYPE_PRECISION (short_integer_type_node))
2051 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2052 if (width == TYPE_PRECISION (long_integer_type_node))
2053 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2054 if (width == TYPE_PRECISION (long_long_integer_type_node))
2055 return (unsignedp ? long_long_unsigned_type_node
2056 : long_long_integer_type_node);
2057 return build_nonstandard_integer_type (width, unsignedp);
2060 /* The C version of the register_builtin_type langhook. */
2063 c_register_builtin_type (tree type, const char* name)
2067 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2068 DECL_ARTIFICIAL (decl) = 1;
2069 if (!TYPE_NAME (type))
2070 TYPE_NAME (type) = decl;
2073 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2077 /* Return the minimum number of bits needed to represent VALUE in a
2078 signed or unsigned type, UNSIGNEDP says which. */
2081 min_precision (tree value, int unsignedp)
2085 /* If the value is negative, compute its negative minus 1. The latter
2086 adjustment is because the absolute value of the largest negative value
2087 is one larger than the largest positive value. This is equivalent to
2088 a bit-wise negation, so use that operation instead. */
2090 if (tree_int_cst_sgn (value) < 0)
2091 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2093 /* Return the number of bits needed, taking into account the fact
2094 that we need one more bit for a signed than unsigned type. */
2096 if (integer_zerop (value))
2099 log = tree_floor_log2 (value);
2101 return log + 1 + !unsignedp;
2104 /* Print an error message for invalid operands to arith operation
2108 binary_op_error (enum tree_code code)
2115 opname = "+"; break;
2117 opname = "-"; break;
2119 opname = "*"; break;
2121 opname = "max"; break;
2123 opname = "min"; break;
2125 opname = "=="; break;
2127 opname = "!="; break;
2129 opname = "<="; break;
2131 opname = ">="; break;
2133 opname = "<"; break;
2135 opname = ">"; break;
2137 opname = "<<"; break;
2139 opname = ">>"; break;
2140 case TRUNC_MOD_EXPR:
2141 case FLOOR_MOD_EXPR:
2142 opname = "%"; break;
2143 case TRUNC_DIV_EXPR:
2144 case FLOOR_DIV_EXPR:
2145 opname = "/"; break;
2147 opname = "&"; break;
2149 opname = "|"; break;
2150 case TRUTH_ANDIF_EXPR:
2151 opname = "&&"; break;
2152 case TRUTH_ORIF_EXPR:
2153 opname = "||"; break;
2155 opname = "^"; break;
2159 error ("invalid operands to binary %s", opname);
2162 /* Subroutine of build_binary_op, used for comparison operations.
2163 See if the operands have both been converted from subword integer types
2164 and, if so, perhaps change them both back to their original type.
2165 This function is also responsible for converting the two operands
2166 to the proper common type for comparison.
2168 The arguments of this function are all pointers to local variables
2169 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2170 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2172 If this function returns nonzero, it means that the comparison has
2173 a constant value. What this function returns is an expression for
2177 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2178 enum tree_code *rescode_ptr)
2181 tree op0 = *op0_ptr;
2182 tree op1 = *op1_ptr;
2183 int unsignedp0, unsignedp1;
2185 tree primop0, primop1;
2186 enum tree_code code = *rescode_ptr;
2188 /* Throw away any conversions to wider types
2189 already present in the operands. */
2191 primop0 = get_narrower (op0, &unsignedp0);
2192 primop1 = get_narrower (op1, &unsignedp1);
2194 /* Handle the case that OP0 does not *contain* a conversion
2195 but it *requires* conversion to FINAL_TYPE. */
2197 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2198 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2199 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2200 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2202 /* If one of the operands must be floated, we cannot optimize. */
2203 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2204 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2206 /* If first arg is constant, swap the args (changing operation
2207 so value is preserved), for canonicalization. Don't do this if
2208 the second arg is 0. */
2210 if (TREE_CONSTANT (primop0)
2211 && !integer_zerop (primop1) && !real_zerop (primop1))
2214 int temi = unsignedp0;
2222 unsignedp0 = unsignedp1;
2245 *rescode_ptr = code;
2248 /* If comparing an integer against a constant more bits wide,
2249 maybe we can deduce a value of 1 or 0 independent of the data.
2250 Or else truncate the constant now
2251 rather than extend the variable at run time.
2253 This is only interesting if the constant is the wider arg.
2254 Also, it is not safe if the constant is unsigned and the
2255 variable arg is signed, since in this case the variable
2256 would be sign-extended and then regarded as unsigned.
2257 Our technique fails in this case because the lowest/highest
2258 possible unsigned results don't follow naturally from the
2259 lowest/highest possible values of the variable operand.
2260 For just EQ_EXPR and NE_EXPR there is another technique that
2261 could be used: see if the constant can be faithfully represented
2262 in the other operand's type, by truncating it and reextending it
2263 and see if that preserves the constant's value. */
2265 if (!real1 && !real2
2266 && TREE_CODE (primop1) == INTEGER_CST
2267 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2269 int min_gt, max_gt, min_lt, max_lt;
2270 tree maxval, minval;
2271 /* 1 if comparison is nominally unsigned. */
2272 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2275 type = c_common_signed_or_unsigned_type (unsignedp0,
2276 TREE_TYPE (primop0));
2278 maxval = TYPE_MAX_VALUE (type);
2279 minval = TYPE_MIN_VALUE (type);
2281 if (unsignedp && !unsignedp0)
2282 *restype_ptr = c_common_signed_type (*restype_ptr);
2284 if (TREE_TYPE (primop1) != *restype_ptr)
2286 /* Convert primop1 to target type, but do not introduce
2287 additional overflow. We know primop1 is an int_cst. */
2288 tree tmp = build_int_cst_wide (*restype_ptr,
2289 TREE_INT_CST_LOW (primop1),
2290 TREE_INT_CST_HIGH (primop1));
2292 primop1 = force_fit_type (tmp, 0, TREE_OVERFLOW (primop1),
2293 TREE_CONSTANT_OVERFLOW (primop1));
2295 if (type != *restype_ptr)
2297 minval = convert (*restype_ptr, minval);
2298 maxval = convert (*restype_ptr, maxval);
2301 if (unsignedp && unsignedp0)
2303 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2304 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2305 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2306 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2310 min_gt = INT_CST_LT (primop1, minval);
2311 max_gt = INT_CST_LT (primop1, maxval);
2312 min_lt = INT_CST_LT (minval, primop1);
2313 max_lt = INT_CST_LT (maxval, primop1);
2317 /* This used to be a switch, but Genix compiler can't handle that. */
2318 if (code == NE_EXPR)
2320 if (max_lt || min_gt)
2321 val = truthvalue_true_node;
2323 else if (code == EQ_EXPR)
2325 if (max_lt || min_gt)
2326 val = truthvalue_false_node;
2328 else if (code == LT_EXPR)
2331 val = truthvalue_true_node;
2333 val = truthvalue_false_node;
2335 else if (code == GT_EXPR)
2338 val = truthvalue_true_node;
2340 val = truthvalue_false_node;
2342 else if (code == LE_EXPR)
2345 val = truthvalue_true_node;
2347 val = truthvalue_false_node;
2349 else if (code == GE_EXPR)
2352 val = truthvalue_true_node;
2354 val = truthvalue_false_node;
2357 /* If primop0 was sign-extended and unsigned comparison specd,
2358 we did a signed comparison above using the signed type bounds.
2359 But the comparison we output must be unsigned.
2361 Also, for inequalities, VAL is no good; but if the signed
2362 comparison had *any* fixed result, it follows that the
2363 unsigned comparison just tests the sign in reverse
2364 (positive values are LE, negative ones GE).
2365 So we can generate an unsigned comparison
2366 against an extreme value of the signed type. */
2368 if (unsignedp && !unsignedp0)
2375 primop1 = TYPE_MIN_VALUE (type);
2381 primop1 = TYPE_MAX_VALUE (type);
2388 type = c_common_unsigned_type (type);
2391 if (TREE_CODE (primop0) != INTEGER_CST)
2393 if (val == truthvalue_false_node)
2394 warning (0, "comparison is always false due to limited range of data type");
2395 if (val == truthvalue_true_node)
2396 warning (0, "comparison is always true due to limited range of data type");
2401 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2402 if (TREE_SIDE_EFFECTS (primop0))
2403 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2407 /* Value is not predetermined, but do the comparison
2408 in the type of the operand that is not constant.
2409 TYPE is already properly set. */
2412 /* If either arg is decimal float and the other is float, find the
2413 proper common type to use for comparison. */
2414 else if (real1 && real2
2415 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2416 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2417 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2419 else if (real1 && real2
2420 && (TYPE_PRECISION (TREE_TYPE (primop0))
2421 == TYPE_PRECISION (TREE_TYPE (primop1))))
2422 type = TREE_TYPE (primop0);
2424 /* If args' natural types are both narrower than nominal type
2425 and both extend in the same manner, compare them
2426 in the type of the wider arg.
2427 Otherwise must actually extend both to the nominal
2428 common type lest different ways of extending
2430 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2432 else if (unsignedp0 == unsignedp1 && real1 == real2
2433 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2434 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2436 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2437 type = c_common_signed_or_unsigned_type (unsignedp0
2438 || TYPE_UNSIGNED (*restype_ptr),
2440 /* Make sure shorter operand is extended the right way
2441 to match the longer operand. */
2443 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2444 TREE_TYPE (primop0)),
2447 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2448 TREE_TYPE (primop1)),
2453 /* Here we must do the comparison on the nominal type
2454 using the args exactly as we received them. */
2455 type = *restype_ptr;
2459 if (!real1 && !real2 && integer_zerop (primop1)
2460 && TYPE_UNSIGNED (*restype_ptr))
2466 /* All unsigned values are >= 0, so we warn if extra warnings
2467 are requested. However, if OP0 is a constant that is
2468 >= 0, the signedness of the comparison isn't an issue,
2469 so suppress the warning. */
2470 if (extra_warnings && !in_system_header
2471 && !(TREE_CODE (primop0) == INTEGER_CST
2472 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2474 warning (0, "comparison of unsigned expression >= 0 is always true");
2475 value = truthvalue_true_node;
2479 if (extra_warnings && !in_system_header
2480 && !(TREE_CODE (primop0) == INTEGER_CST
2481 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2483 warning (0, "comparison of unsigned expression < 0 is always false");
2484 value = truthvalue_false_node;
2493 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2494 if (TREE_SIDE_EFFECTS (primop0))
2495 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2502 *op0_ptr = convert (type, primop0);
2503 *op1_ptr = convert (type, primop1);
2505 *restype_ptr = truthvalue_type_node;
2510 /* Return a tree for the sum or difference (RESULTCODE says which)
2511 of pointer PTROP and integer INTOP. */
2514 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2518 /* The result is a pointer of the same type that is being added. */
2520 tree result_type = TREE_TYPE (ptrop);
2522 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2524 if (pedantic || warn_pointer_arith)
2525 pedwarn ("pointer of type %<void *%> used in arithmetic");
2526 size_exp = integer_one_node;
2528 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2530 if (pedantic || warn_pointer_arith)
2531 pedwarn ("pointer to a function used in arithmetic");
2532 size_exp = integer_one_node;
2534 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2536 if (pedantic || warn_pointer_arith)
2537 pedwarn ("pointer to member function used in arithmetic");
2538 size_exp = integer_one_node;
2541 size_exp = size_in_bytes (TREE_TYPE (result_type));
2543 /* If what we are about to multiply by the size of the elements
2544 contains a constant term, apply distributive law
2545 and multiply that constant term separately.
2546 This helps produce common subexpressions. */
2548 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2549 && !TREE_CONSTANT (intop)
2550 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2551 && TREE_CONSTANT (size_exp)
2552 /* If the constant comes from pointer subtraction,
2553 skip this optimization--it would cause an error. */
2554 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2555 /* If the constant is unsigned, and smaller than the pointer size,
2556 then we must skip this optimization. This is because it could cause
2557 an overflow error if the constant is negative but INTOP is not. */
2558 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2559 || (TYPE_PRECISION (TREE_TYPE (intop))
2560 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2562 enum tree_code subcode = resultcode;
2563 tree int_type = TREE_TYPE (intop);
2564 if (TREE_CODE (intop) == MINUS_EXPR)
2565 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2566 /* Convert both subexpression types to the type of intop,
2567 because weird cases involving pointer arithmetic
2568 can result in a sum or difference with different type args. */
2569 ptrop = build_binary_op (subcode, ptrop,
2570 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2571 intop = convert (int_type, TREE_OPERAND (intop, 0));
2574 /* Convert the integer argument to a type the same size as sizetype
2575 so the multiply won't overflow spuriously. */
2577 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2578 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2579 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2580 TYPE_UNSIGNED (sizetype)), intop);
2582 /* Replace the integer argument with a suitable product by the object size.
2583 Do this multiplication as signed, then convert to the appropriate
2584 pointer type (actually unsigned integral). */
2586 intop = convert (result_type,
2587 build_binary_op (MULT_EXPR, intop,
2588 convert (TREE_TYPE (intop), size_exp), 1));
2590 /* Create the sum or difference. */
2591 return fold_build2 (resultcode, result_type, ptrop, intop);
2594 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2595 or for an `if' or `while' statement or ?..: exp. It should already
2596 have been validated to be of suitable type; otherwise, a bad
2597 diagnostic may result.
2599 This preparation consists of taking the ordinary
2600 representation of an expression expr and producing a valid tree
2601 boolean expression describing whether expr is nonzero. We could
2602 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2603 but we optimize comparisons, &&, ||, and !.
2605 The resulting type should always be `truthvalue_type_node'. */
2608 c_common_truthvalue_conversion (tree expr)
2610 switch (TREE_CODE (expr))
2612 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
2613 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2614 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2615 case ORDERED_EXPR: case UNORDERED_EXPR:
2616 if (TREE_TYPE (expr) == truthvalue_type_node)
2618 return build2 (TREE_CODE (expr), truthvalue_type_node,
2619 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2621 case TRUTH_ANDIF_EXPR:
2622 case TRUTH_ORIF_EXPR:
2623 case TRUTH_AND_EXPR:
2625 case TRUTH_XOR_EXPR:
2626 if (TREE_TYPE (expr) == truthvalue_type_node)
2628 return build2 (TREE_CODE (expr), truthvalue_type_node,
2629 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2630 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2632 case TRUTH_NOT_EXPR:
2633 if (TREE_TYPE (expr) == truthvalue_type_node)
2635 return build1 (TREE_CODE (expr), truthvalue_type_node,
2636 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2642 /* Avoid integer_zerop to ignore TREE_CONSTANT_OVERFLOW. */
2643 return (TREE_INT_CST_LOW (expr) != 0 || TREE_INT_CST_HIGH (expr) != 0)
2644 ? truthvalue_true_node
2645 : truthvalue_false_node;
2648 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2649 ? truthvalue_true_node
2650 : truthvalue_false_node;
2653 expr = build_unary_op (ADDR_EXPR, expr, 0);
2658 tree inner = TREE_OPERAND (expr, 0);
2660 && (TREE_CODE (inner) == PARM_DECL
2661 || TREE_CODE (inner) == LABEL_DECL
2662 || !DECL_WEAK (inner)))
2664 /* Common Ada/Pascal programmer's mistake. We always warn
2665 about this since it is so bad. */
2666 warning (OPT_Walways_true, "the address of %qD will always evaluate as %<true%>",
2668 return truthvalue_true_node;
2671 /* If we are taking the address of an external decl, it might be
2672 zero if it is weak, so we cannot optimize. */
2674 && DECL_EXTERNAL (inner))
2677 if (TREE_SIDE_EFFECTS (inner))
2678 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2679 inner, truthvalue_true_node);
2681 return truthvalue_true_node;
2685 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2686 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2687 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2688 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2694 /* These don't change whether an object is nonzero or zero. */
2695 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2699 /* These don't change whether an object is zero or nonzero, but
2700 we can't ignore them if their second arg has side-effects. */
2701 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2702 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2703 TREE_OPERAND (expr, 1),
2704 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2706 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2709 /* Distribute the conversion into the arms of a COND_EXPR. */
2710 return fold_build3 (COND_EXPR, truthvalue_type_node,
2711 TREE_OPERAND (expr, 0),
2712 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2713 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
2717 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2718 since that affects how `default_conversion' will behave. */
2719 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2720 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2722 /* If this is widening the argument, we can ignore it. */
2723 if (TYPE_PRECISION (TREE_TYPE (expr))
2724 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2725 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2729 if (!TREE_NO_WARNING (expr)
2730 && warn_parentheses)
2732 warning (OPT_Wparentheses,
2733 "suggest parentheses around assignment used as truth value");
2734 TREE_NO_WARNING (expr) = 1;
2742 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2744 tree t = save_expr (expr);
2745 return (build_binary_op
2746 ((TREE_SIDE_EFFECTS (expr)
2747 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2748 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2749 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2753 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2756 static void def_builtin_1 (enum built_in_function fncode,
2758 enum built_in_class fnclass,
2759 tree fntype, tree libtype,
2760 bool both_p, bool fallback_p, bool nonansi_p,
2761 tree fnattrs, bool implicit_p);
2763 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2764 down to the element type of an array. */
2767 c_build_qualified_type (tree type, int type_quals)
2769 if (type == error_mark_node)
2772 if (TREE_CODE (type) == ARRAY_TYPE)
2775 tree element_type = c_build_qualified_type (TREE_TYPE (type),
2778 /* See if we already have an identically qualified type. */
2779 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2781 if (TYPE_QUALS (strip_array_types (t)) == type_quals
2782 && TYPE_NAME (t) == TYPE_NAME (type)
2783 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2784 && attribute_list_equal (TYPE_ATTRIBUTES (t),
2785 TYPE_ATTRIBUTES (type)))
2790 t = build_variant_type_copy (type);
2791 TREE_TYPE (t) = element_type;
2796 /* A restrict-qualified pointer type must be a pointer to object or
2797 incomplete type. Note that the use of POINTER_TYPE_P also allows
2798 REFERENCE_TYPEs, which is appropriate for C++. */
2799 if ((type_quals & TYPE_QUAL_RESTRICT)
2800 && (!POINTER_TYPE_P (type)
2801 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2803 error ("invalid use of %<restrict%>");
2804 type_quals &= ~TYPE_QUAL_RESTRICT;
2807 return build_qualified_type (type, type_quals);
2810 /* Apply the TYPE_QUALS to the new DECL. */
2813 c_apply_type_quals_to_decl (int type_quals, tree decl)
2815 tree type = TREE_TYPE (decl);
2817 if (type == error_mark_node)
2820 if (((type_quals & TYPE_QUAL_CONST)
2821 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2822 /* An object declared 'const' is only readonly after it is
2823 initialized. We don't have any way of expressing this currently,
2824 so we need to be conservative and unset TREE_READONLY for types
2825 with constructors. Otherwise aliasing code will ignore stores in
2826 an inline constructor. */
2827 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2828 TREE_READONLY (decl) = 1;
2829 if (type_quals & TYPE_QUAL_VOLATILE)
2831 TREE_SIDE_EFFECTS (decl) = 1;
2832 TREE_THIS_VOLATILE (decl) = 1;
2834 if (type_quals & TYPE_QUAL_RESTRICT)
2836 while (type && TREE_CODE (type) == ARRAY_TYPE)
2837 /* Allow 'restrict' on arrays of pointers.
2838 FIXME currently we just ignore it. */
2839 type = TREE_TYPE (type);
2841 || !POINTER_TYPE_P (type)
2842 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
2843 error ("invalid use of %<restrict%>");
2844 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
2845 /* Indicate we need to make a unique alias set for this pointer.
2846 We can't do it here because it might be pointing to an
2848 DECL_POINTER_ALIAS_SET (decl) = -2;
2852 /* Hash function for the problem of multiple type definitions in
2853 different files. This must hash all types that will compare
2854 equal via comptypes to the same value. In practice it hashes
2855 on some of the simple stuff and leaves the details to comptypes. */
2858 c_type_hash (const void *p)
2864 switch (TREE_CODE (t))
2866 /* For pointers, hash on pointee type plus some swizzling. */
2868 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2869 /* Hash on number of elements and total size. */
2872 t2 = TYPE_VALUES (t);
2876 t2 = TYPE_FIELDS (t);
2878 case QUAL_UNION_TYPE:
2880 t2 = TYPE_FIELDS (t);
2884 t2 = TYPE_FIELDS (t);
2889 for (; t2; t2 = TREE_CHAIN (t2))
2891 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2892 return ((size << 24) | (i << shift));
2895 static GTY((param_is (union tree_node))) htab_t type_hash_table;
2897 /* Return the typed-based alias set for T, which may be an expression
2898 or a type. Return -1 if we don't do anything special. */
2901 c_common_get_alias_set (tree t)
2906 /* Permit type-punning when accessing a union, provided the access
2907 is directly through the union. For example, this code does not
2908 permit taking the address of a union member and then storing
2909 through it. Even the type-punning allowed here is a GCC
2910 extension, albeit a common and useful one; the C standard says
2911 that such accesses have implementation-defined behavior. */
2913 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2914 u = TREE_OPERAND (u, 0))
2915 if (TREE_CODE (u) == COMPONENT_REF
2916 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2919 /* That's all the expressions we handle specially. */
2923 /* The C standard guarantees that any object may be accessed via an
2924 lvalue that has character type. */
2925 if (t == char_type_node
2926 || t == signed_char_type_node
2927 || t == unsigned_char_type_node)
2930 /* If it has the may_alias attribute, it can alias anything. */
2931 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
2934 /* The C standard specifically allows aliasing between signed and
2935 unsigned variants of the same type. We treat the signed
2936 variant as canonical. */
2937 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
2939 tree t1 = c_common_signed_type (t);
2941 /* t1 == t can happen for boolean nodes which are always unsigned. */
2943 return get_alias_set (t1);
2945 else if (POINTER_TYPE_P (t))
2949 /* Unfortunately, there is no canonical form of a pointer type.
2950 In particular, if we have `typedef int I', then `int *', and
2951 `I *' are different types. So, we have to pick a canonical
2952 representative. We do this below.
2954 Technically, this approach is actually more conservative that
2955 it needs to be. In particular, `const int *' and `int *'
2956 should be in different alias sets, according to the C and C++
2957 standard, since their types are not the same, and so,
2958 technically, an `int **' and `const int **' cannot point at
2961 But, the standard is wrong. In particular, this code is
2966 const int* const* cipp = ipp;
2968 And, it doesn't make sense for that to be legal unless you
2969 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2970 the pointed-to types. This issue has been reported to the
2972 t1 = build_type_no_quals (t);
2974 return get_alias_set (t1);
2977 /* Handle the case of multiple type nodes referring to "the same" type,
2978 which occurs with IMA. These share an alias set. FIXME: Currently only
2979 C90 is handled. (In C99 type compatibility is not transitive, which
2980 complicates things mightily. The alias set splay trees can theoretically
2981 represent this, but insertion is tricky when you consider all the
2982 different orders things might arrive in.) */
2984 if (c_language != clk_c || flag_isoc99)
2987 /* Save time if there's only one input file. */
2988 if (num_in_fnames == 1)
2991 /* Pointers need special handling if they point to any type that
2992 needs special handling (below). */
2993 if (TREE_CODE (t) == POINTER_TYPE)
2996 /* Find bottom type under any nested POINTERs. */
2997 for (t2 = TREE_TYPE (t);
2998 TREE_CODE (t2) == POINTER_TYPE;
2999 t2 = TREE_TYPE (t2))
3001 if (TREE_CODE (t2) != RECORD_TYPE
3002 && TREE_CODE (t2) != ENUMERAL_TYPE
3003 && TREE_CODE (t2) != QUAL_UNION_TYPE
3004 && TREE_CODE (t2) != UNION_TYPE)
3006 if (TYPE_SIZE (t2) == 0)
3009 /* These are the only cases that need special handling. */
3010 if (TREE_CODE (t) != RECORD_TYPE
3011 && TREE_CODE (t) != ENUMERAL_TYPE
3012 && TREE_CODE (t) != QUAL_UNION_TYPE
3013 && TREE_CODE (t) != UNION_TYPE
3014 && TREE_CODE (t) != POINTER_TYPE)
3017 if (TYPE_SIZE (t) == 0)
3020 /* Look up t in hash table. Only one of the compatible types within each
3021 alias set is recorded in the table. */
3022 if (!type_hash_table)
3023 type_hash_table = htab_create_ggc (1021, c_type_hash,
3024 (htab_eq) lang_hooks.types_compatible_p,
3026 slot = htab_find_slot (type_hash_table, t, INSERT);
3029 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3030 return TYPE_ALIAS_SET ((tree)*slot);
3033 /* Our caller will assign and record (in t) a new alias set; all we need
3034 to do is remember t in the hash table. */
3040 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3041 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3042 flag controls whether we should diagnose possibly ill-formed
3043 constructs or not. */
3046 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3048 const char *op_name;
3050 enum tree_code type_code = TREE_CODE (type);
3052 op_name = is_sizeof ? "sizeof" : "__alignof__";
3054 if (type_code == FUNCTION_TYPE)
3058 if (complain && (pedantic || warn_pointer_arith))
3059 pedwarn ("invalid application of %<sizeof%> to a function type");
3060 value = size_one_node;
3063 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3065 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3067 if (type_code == VOID_TYPE
3068 && complain && (pedantic || warn_pointer_arith))
3069 pedwarn ("invalid application of %qs to a void type", op_name);
3070 value = size_one_node;
3072 else if (!COMPLETE_TYPE_P (type))
3075 error ("invalid application of %qs to incomplete type %qT ",
3077 value = size_zero_node;
3082 /* Convert in case a char is more than one unit. */
3083 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3084 size_int (TYPE_PRECISION (char_type_node)
3087 value = size_int (TYPE_ALIGN_UNIT (type));
3090 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3091 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3092 never happen. However, this node should really have type
3093 `size_t', which is just a typedef for an ordinary integer type. */
3094 value = fold_convert (size_type_node, value);
3095 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3100 /* Implement the __alignof keyword: Return the minimum required
3101 alignment of EXPR, measured in bytes. For VAR_DECL's and
3102 FIELD_DECL's return DECL_ALIGN (which can be set from an
3103 "aligned" __attribute__ specification). */
3106 c_alignof_expr (tree expr)
3110 if (TREE_CODE (expr) == VAR_DECL)
3111 t = size_int (DECL_ALIGN_UNIT (expr));
3113 else if (TREE_CODE (expr) == COMPONENT_REF
3114 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3116 error ("%<__alignof%> applied to a bit-field");
3119 else if (TREE_CODE (expr) == COMPONENT_REF
3120 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3121 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3123 else if (TREE_CODE (expr) == INDIRECT_REF)
3125 tree t = TREE_OPERAND (expr, 0);
3127 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3129 while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
3130 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3134 t = TREE_OPERAND (t, 0);
3135 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3136 if (thisalign > bestalign)
3137 best = t, bestalign = thisalign;
3139 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3142 return c_alignof (TREE_TYPE (expr));
3144 return fold_convert (size_type_node, t);
3147 /* Handle C and C++ default attributes. */
3149 enum built_in_attribute
3151 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3152 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3153 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3154 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3155 #include "builtin-attrs.def"
3156 #undef DEF_ATTR_NULL_TREE
3158 #undef DEF_ATTR_IDENT
3159 #undef DEF_ATTR_TREE_LIST
3163 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3165 static void c_init_attributes (void);
3169 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3170 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3171 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3172 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3173 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3174 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3175 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3176 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3177 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3178 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3179 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3180 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3181 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3182 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3183 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3185 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3186 #include "builtin-types.def"
3187 #undef DEF_PRIMITIVE_TYPE
3188 #undef DEF_FUNCTION_TYPE_0
3189 #undef DEF_FUNCTION_TYPE_1
3190 #undef DEF_FUNCTION_TYPE_2
3191 #undef DEF_FUNCTION_TYPE_3
3192 #undef DEF_FUNCTION_TYPE_4
3193 #undef DEF_FUNCTION_TYPE_5
3194 #undef DEF_FUNCTION_TYPE_6
3195 #undef DEF_FUNCTION_TYPE_7
3196 #undef DEF_FUNCTION_TYPE_VAR_0
3197 #undef DEF_FUNCTION_TYPE_VAR_1
3198 #undef DEF_FUNCTION_TYPE_VAR_2
3199 #undef DEF_FUNCTION_TYPE_VAR_3
3200 #undef DEF_FUNCTION_TYPE_VAR_4
3201 #undef DEF_FUNCTION_TYPE_VAR_5
3202 #undef DEF_POINTER_TYPE
3206 typedef enum c_builtin_type builtin_type;
3208 /* A temporary array for c_common_nodes_and_builtins. Used in
3209 communication with def_fn_type. */
3210 static tree builtin_types[(int) BT_LAST + 1];
3212 /* A helper function for c_common_nodes_and_builtins. Build function type
3213 for DEF with return type RET and N arguments. If VAR is true, then the
3214 function should be variadic after those N arguments.
3216 Takes special care not to ICE if any of the types involved are
3217 error_mark_node, which indicates that said type is not in fact available
3218 (see builtin_type_for_size). In which case the function type as a whole
3219 should be error_mark_node. */
3222 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3224 tree args = NULL, t;
3229 for (i = 0; i < n; ++i)
3231 builtin_type a = va_arg (list, builtin_type);
3232 t = builtin_types[a];
3233 if (t == error_mark_node)
3235 args = tree_cons (NULL_TREE, t, args);
3239 args = nreverse (args);
3241 args = chainon (args, void_list_node);
3243 t = builtin_types[ret];
3244 if (t == error_mark_node)
3246 t = build_function_type (t, args);
3249 builtin_types[def] = t;
3252 /* Build builtin functions common to both C and C++ language
3256 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3258 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3259 builtin_types[ENUM] = VALUE;
3260 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3261 def_fn_type (ENUM, RETURN, 0, 0);
3262 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3263 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3264 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3265 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3266 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3267 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3268 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3269 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3270 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3271 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3272 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3274 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3275 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3277 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3278 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3279 def_fn_type (ENUM, RETURN, 1, 0);
3280 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3281 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3282 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3283 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3284 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3285 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3286 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3287 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3288 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3289 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3290 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3291 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3293 #include "builtin-types.def"
3295 #undef DEF_PRIMITIVE_TYPE
3296 #undef DEF_FUNCTION_TYPE_1
3297 #undef DEF_FUNCTION_TYPE_2
3298 #undef DEF_FUNCTION_TYPE_3
3299 #undef DEF_FUNCTION_TYPE_4
3300 #undef DEF_FUNCTION_TYPE_5
3301 #undef DEF_FUNCTION_TYPE_6
3302 #undef DEF_FUNCTION_TYPE_VAR_0
3303 #undef DEF_FUNCTION_TYPE_VAR_1
3304 #undef DEF_FUNCTION_TYPE_VAR_2
3305 #undef DEF_FUNCTION_TYPE_VAR_3
3306 #undef DEF_FUNCTION_TYPE_VAR_4
3307 #undef DEF_FUNCTION_TYPE_VAR_5
3308 #undef DEF_POINTER_TYPE
3309 builtin_types[(int) BT_LAST] = NULL_TREE;
3311 c_init_attributes ();
3313 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3314 NONANSI_P, ATTRS, IMPLICIT, COND) \
3316 def_builtin_1 (ENUM, NAME, CLASS, \
3317 builtin_types[(int) TYPE], \
3318 builtin_types[(int) LIBTYPE], \
3319 BOTH_P, FALLBACK_P, NONANSI_P, \
3320 built_in_attributes[(int) ATTRS], IMPLICIT);
3321 #include "builtins.def"
3324 build_common_builtin_nodes ();
3326 targetm.init_builtins ();
3331 /* Build tree nodes and builtin functions common to both C and C++ language
3335 c_common_nodes_and_builtins (void)
3337 int wchar_type_size;
3338 tree array_domain_type;
3339 tree va_list_ref_type_node;
3340 tree va_list_arg_type_node;
3342 /* Define `int' and `char' first so that dbx will output them first. */
3343 record_builtin_type (RID_INT, NULL, integer_type_node);
3344 record_builtin_type (RID_CHAR, "char", char_type_node);
3346 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3347 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3348 but not C. Are the conditionals here needed? */
3349 if (c_dialect_cxx ())
3350 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3351 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3352 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3353 record_builtin_type (RID_MAX, "long unsigned int",
3354 long_unsigned_type_node);
3355 if (c_dialect_cxx ())
3356 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3357 record_builtin_type (RID_MAX, "long long int",
3358 long_long_integer_type_node);
3359 record_builtin_type (RID_MAX, "long long unsigned int",
3360 long_long_unsigned_type_node);
3361 if (c_dialect_cxx ())
3362 record_builtin_type (RID_MAX, "long long unsigned",
3363 long_long_unsigned_type_node);
3364 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3365 record_builtin_type (RID_MAX, "short unsigned int",
3366 short_unsigned_type_node);
3367 if (c_dialect_cxx ())
3368 record_builtin_type (RID_MAX, "unsigned short",
3369 short_unsigned_type_node);
3371 /* Define both `signed char' and `unsigned char'. */
3372 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3373 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3375 /* These are types that c_common_type_for_size and
3376 c_common_type_for_mode use. */
3377 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3379 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3381 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3383 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3385 #if HOST_BITS_PER_WIDE_INT >= 64
3386 if (targetm.scalar_mode_supported_p (TImode))
3387 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3388 get_identifier ("__int128_t"),
3391 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3392 unsigned_intQI_type_node));
3393 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3394 unsigned_intHI_type_node));
3395 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3396 unsigned_intSI_type_node));
3397 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3398 unsigned_intDI_type_node));
3399 #if HOST_BITS_PER_WIDE_INT >= 64
3400 if (targetm.scalar_mode_supported_p (TImode))
3401 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3402 get_identifier ("__uint128_t"),
3403 unsigned_intTI_type_node));
3406 /* Create the widest literal types. */
3407 widest_integer_literal_type_node
3408 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3409 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3410 widest_integer_literal_type_node));
3412 widest_unsigned_literal_type_node
3413 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3414 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3415 widest_unsigned_literal_type_node));
3417 /* `unsigned long' is the standard type for sizeof.
3418 Note that stddef.h uses `unsigned long',
3419 and this must agree, even if long and int are the same size. */
3421 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3422 signed_size_type_node = c_common_signed_type (size_type_node);
3423 set_sizetype (size_type_node);
3426 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3428 build_common_tree_nodes_2 (flag_short_double);
3430 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3431 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3432 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3434 /* Only supported decimal floating point extension if the target
3435 actually supports underlying modes. */
3436 if (targetm.scalar_mode_supported_p (SDmode)
3437 && targetm.scalar_mode_supported_p (DDmode)
3438 && targetm.scalar_mode_supported_p (TDmode))
3440 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3441 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3442 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3445 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3446 get_identifier ("complex int"),
3447 complex_integer_type_node));
3448 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3449 get_identifier ("complex float"),
3450 complex_float_type_node));
3451 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3452 get_identifier ("complex double"),
3453 complex_double_type_node));
3454 lang_hooks.decls.pushdecl
3455 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3456 complex_long_double_type_node));
3458 if (c_dialect_cxx ())
3459 /* For C++, make fileptr_type_node a distinct void * type until
3460 FILE type is defined. */
3461 fileptr_type_node = build_variant_type_copy (ptr_type_node);
3463 record_builtin_type (RID_VOID, NULL, void_type_node);
3465 /* Set the TYPE_NAME for any variants that were built before
3466 record_builtin_type gave names to the built-in types. */
3468 tree void_name = TYPE_NAME (void_type_node);
3469 TYPE_NAME (void_type_node) = NULL_TREE;
3470 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3472 TYPE_NAME (void_type_node) = void_name;
3475 /* This node must not be shared. */
3476 void_zero_node = make_node (INTEGER_CST);
3477 TREE_TYPE (void_zero_node) = void_type_node;
3479 void_list_node = build_void_list_node ();
3481 /* Make a type to be the domain of a few array types
3482 whose domains don't really matter.
3483 200 is small enough that it always fits in size_t
3484 and large enough that it can hold most function names for the
3485 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3486 array_domain_type = build_index_type (size_int (200));
3488 /* Make a type for arrays of characters.
3489 With luck nothing will ever really depend on the length of this
3491 char_array_type_node
3492 = build_array_type (char_type_node, array_domain_type);
3494 /* Likewise for arrays of ints. */
3496 = build_array_type (integer_type_node, array_domain_type);
3498 string_type_node = build_pointer_type (char_type_node);
3499 const_string_type_node
3500 = build_pointer_type (build_qualified_type
3501 (char_type_node, TYPE_QUAL_CONST));
3503 /* This is special for C++ so functions can be overloaded. */
3504 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3505 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3506 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3507 if (c_dialect_cxx ())
3509 if (TYPE_UNSIGNED (wchar_type_node))