1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3 Free Software Foundation, Inc.
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
35 #include "diagnostic.h"
42 #undef WCHAR_TYPE_SIZE
43 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
45 /* The following symbols are subsumed in the c_global_trees array, and
46 listed here individually for documentation purposes.
48 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
50 tree short_integer_type_node;
51 tree long_integer_type_node;
52 tree long_long_integer_type_node;
54 tree short_unsigned_type_node;
55 tree long_unsigned_type_node;
56 tree long_long_unsigned_type_node;
58 tree boolean_type_node;
59 tree boolean_false_node;
60 tree boolean_true_node;
62 tree ptrdiff_type_node;
64 tree unsigned_char_type_node;
65 tree signed_char_type_node;
67 tree signed_wchar_type_node;
68 tree unsigned_wchar_type_node;
71 tree double_type_node;
72 tree long_double_type_node;
74 tree complex_integer_type_node;
75 tree complex_float_type_node;
76 tree complex_double_type_node;
77 tree complex_long_double_type_node;
85 tree unsigned_intQI_type_node;
86 tree unsigned_intHI_type_node;
87 tree unsigned_intSI_type_node;
88 tree unsigned_intDI_type_node;
89 tree unsigned_intTI_type_node;
91 tree widest_integer_literal_type_node;
92 tree widest_unsigned_literal_type_node;
94 Nodes for types `void *' and `const void *'.
96 tree ptr_type_node, const_ptr_type_node;
98 Nodes for types `char *' and `const char *'.
100 tree string_type_node, const_string_type_node;
102 Type `char[SOMENUMBER]'.
103 Used when an array of char is needed and the size is irrelevant.
105 tree char_array_type_node;
107 Type `int[SOMENUMBER]' or something like it.
108 Used when an array of int needed and the size is irrelevant.
110 tree int_array_type_node;
112 Type `wchar_t[SOMENUMBER]' or something like it.
113 Used when a wide string literal is created.
115 tree wchar_array_type_node;
117 Type `int ()' -- used for implicit declaration of functions.
119 tree default_function_type;
121 Function types `int (int)', etc.
127 tree ptr_ftype_sizetype;
129 A VOID_TYPE node, packaged in a TREE_LIST.
133 The identifiers __FUNCTION__, __PRETTY_FUNCTION__, and __func__.
135 tree function_id_node;
136 tree pretty_function_id_node;
141 tree c_global_trees[CTI_MAX];
143 /* The elements of `ridpointers' are identifier nodes for the reserved
144 type names and storage classes. It is indexed by a RID_... value. */
147 tree (*make_fname_decl) PARAMS ((tree, const char *, int));
149 /* If non-NULL, the address of a language-specific function that
150 returns 1 for language-specific statement codes. */
151 int (*lang_statement_code_p) PARAMS ((enum tree_code));
153 /* If non-NULL, the address of a language-specific function that takes
154 any action required right before expand_function_end is called. */
155 void (*lang_expand_function_end) PARAMS ((void));
157 /* Nonzero means the expression being parsed will never be evaluated.
158 This is a count, since unevaluated expressions can nest. */
161 enum attrs {A_PACKED, A_NOCOMMON, A_COMMON, A_NORETURN, A_CONST, A_T_UNION,
162 A_NO_CHECK_MEMORY_USAGE, A_NO_INSTRUMENT_FUNCTION,
163 A_CONSTRUCTOR, A_DESTRUCTOR, A_MODE, A_SECTION, A_ALIGNED,
164 A_UNUSED, A_FORMAT, A_FORMAT_ARG, A_WEAK, A_ALIAS, A_MALLOC,
165 A_NO_LIMIT_STACK, A_PURE};
167 enum format_type { printf_format_type, scanf_format_type,
168 strftime_format_type };
170 static void add_attribute PARAMS ((enum attrs, const char *,
172 static void init_attributes PARAMS ((void));
173 static void record_function_format PARAMS ((tree, tree, enum format_type,
175 static void record_international_format PARAMS ((tree, tree, int));
176 static int default_valid_lang_attribute PARAMS ((tree, tree, tree, tree));
178 /* Keep a stack of if statements. We record the number of compound
179 statements seen up to the if keyword, as well as the line number
180 and file of the if. If a potentially ambiguous else is seen, that
181 fact is recorded; the warning is issued when we can be sure that
182 the enclosing if statement does not have an else branch. */
192 static if_elt *if_stack;
194 /* Amount of space in the if statement stack. */
195 static int if_stack_space = 0;
198 static int if_stack_pointer = 0;
200 /* Record the start of an if-then, and record the start of it
201 for ambiguous else detection. */
204 c_expand_start_cond (cond, compstmt_count)
210 /* Make sure there is enough space on the stack. */
211 if (if_stack_space == 0)
214 if_stack = (if_elt *)xmalloc (10 * sizeof (if_elt));
216 else if (if_stack_space == if_stack_pointer)
218 if_stack_space += 10;
219 if_stack = (if_elt *)xrealloc (if_stack, if_stack_space * sizeof (if_elt));
222 if_stmt = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
223 IF_COND (if_stmt) = cond;
226 /* Record this if statement. */
227 if_stack[if_stack_pointer].compstmt_count = compstmt_count;
228 if_stack[if_stack_pointer].file = input_filename;
229 if_stack[if_stack_pointer].line = lineno;
230 if_stack[if_stack_pointer].needs_warning = 0;
231 if_stack[if_stack_pointer].if_stmt = if_stmt;
235 /* Called after the then-clause for an if-statement is processed. */
240 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
241 RECHAIN_STMTS (if_stmt, THEN_CLAUSE (if_stmt));
244 /* Record the end of an if-then. Optionally warn if a nested
245 if statement had an ambiguous else clause. */
251 if (if_stack[if_stack_pointer].needs_warning)
252 warning_with_file_and_line (if_stack[if_stack_pointer].file,
253 if_stack[if_stack_pointer].line,
254 "suggest explicit braces to avoid ambiguous `else'");
255 last_expr_type = NULL_TREE;
258 /* Called between the then-clause and the else-clause
259 of an if-then-else. */
262 c_expand_start_else ()
264 /* An ambiguous else warning must be generated for the enclosing if
265 statement, unless we see an else branch for that one, too. */
267 && if_stack_pointer > 1
268 && (if_stack[if_stack_pointer - 1].compstmt_count
269 == if_stack[if_stack_pointer - 2].compstmt_count))
270 if_stack[if_stack_pointer - 2].needs_warning = 1;
272 /* Even if a nested if statement had an else branch, it can't be
273 ambiguous if this one also has an else. So don't warn in that
274 case. Also don't warn for any if statements nested in this else. */
275 if_stack[if_stack_pointer - 1].needs_warning = 0;
276 if_stack[if_stack_pointer - 1].compstmt_count--;
279 /* Called after the else-clause for an if-statement is processed. */
284 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
285 RECHAIN_STMTS (if_stmt, ELSE_CLAUSE (if_stmt));
288 /* Make bindings for __FUNCTION__, __PRETTY_FUNCTION__, and __func__. */
291 declare_function_name ()
293 const char *name, *printable_name;
295 if (current_function_decl == NULL)
298 printable_name = "top level";
302 /* Allow functions to be nameless (such as artificial ones). */
303 if (DECL_NAME (current_function_decl))
304 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
307 printable_name = (*decl_printable_name) (current_function_decl, 2);
309 /* ISO C99 defines __func__, which is a variable, not a string
310 constant, and which is not a defined symbol at file scope. */
311 (*make_fname_decl) (func_id_node, name, 0);
314 (*make_fname_decl) (function_id_node, name, 0);
315 (*make_fname_decl) (pretty_function_id_node, printable_name, 1);
318 /* Given a chain of STRING_CST nodes,
319 concatenate them into one STRING_CST
320 and give it a suitable array-of-chars data type. */
323 combine_strings (strings)
326 register tree value, t;
327 register int length = 1;
330 int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
332 const int nchars_max = flag_isoc99 ? 4095 : 509;
334 if (TREE_CHAIN (strings))
336 /* More than one in the chain, so concatenate. */
337 register char *p, *q;
339 /* Don't include the \0 at the end of each substring,
340 except for the last one.
341 Count wide strings and ordinary strings separately. */
342 for (t = strings; t; t = TREE_CHAIN (t))
344 if (TREE_TYPE (t) == wchar_array_type_node)
346 wide_length += (TREE_STRING_LENGTH (t) - wchar_bytes);
350 length += (TREE_STRING_LENGTH (t) - 1);
353 /* If anything is wide, the non-wides will be converted,
354 which makes them take more space. */
356 length = length * wchar_bytes + wide_length;
358 p = ggc_alloc_string (NULL, length);
360 /* Copy the individual strings into the new combined string.
361 If the combined string is wide, convert the chars to ints
362 for any individual strings that are not wide. */
365 for (t = strings; t; t = TREE_CHAIN (t))
367 int len = (TREE_STRING_LENGTH (t)
368 - ((TREE_TYPE (t) == wchar_array_type_node)
370 if ((TREE_TYPE (t) == wchar_array_type_node) == wide_flag)
372 memcpy (q, TREE_STRING_POINTER (t), len);
378 for (i = 0; i < len; i++)
380 if (WCHAR_TYPE_SIZE == HOST_BITS_PER_SHORT)
381 ((short *) q)[i] = TREE_STRING_POINTER (t)[i];
383 ((int *) q)[i] = TREE_STRING_POINTER (t)[i];
385 q += len * wchar_bytes;
391 for (i = 0; i < wchar_bytes; i++)
397 value = make_node (STRING_CST);
398 TREE_STRING_POINTER (value) = p;
399 TREE_STRING_LENGTH (value) = length;
404 length = TREE_STRING_LENGTH (value);
405 if (TREE_TYPE (value) == wchar_array_type_node)
409 /* Compute the number of elements, for the array type. */
410 nchars = wide_flag ? length / wchar_bytes : length;
412 if (pedantic && nchars > nchars_max)
413 pedwarn ("string length `%d' is greater than the minimum length `%d' ISO C%d is required to support",
414 nchars, nchars_max, flag_isoc99 ? 99 : 89);
416 /* Create the array type for the string constant.
417 -Wwrite-strings says make the string constant an array of const char
418 so that copying it to a non-const pointer will get a warning.
419 For C++, this is the standard behavior. */
420 if (flag_const_strings
421 && (! flag_traditional && ! flag_writable_strings))
424 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
427 = build_array_type (elements,
428 build_index_type (build_int_2 (nchars - 1, 0)));
432 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
433 build_index_type (build_int_2 (nchars - 1, 0)));
435 TREE_CONSTANT (value) = 1;
436 TREE_READONLY (value) = ! flag_writable_strings;
437 TREE_STATIC (value) = 1;
441 /* To speed up processing of attributes, we maintain an array of
442 IDENTIFIER_NODES and the corresponding attribute types. */
444 /* Array to hold attribute information. */
446 static struct {enum attrs id; tree name; int min, max, decl_req;} attrtab[50];
448 static int attrtab_idx = 0;
450 /* Add an entry to the attribute table above. */
453 add_attribute (id, string, min_len, max_len, decl_req)
456 int min_len, max_len;
461 attrtab[attrtab_idx].id = id;
462 attrtab[attrtab_idx].name = get_identifier (string);
463 attrtab[attrtab_idx].min = min_len;
464 attrtab[attrtab_idx].max = max_len;
465 attrtab[attrtab_idx++].decl_req = decl_req;
467 sprintf (buf, "__%s__", string);
469 attrtab[attrtab_idx].id = id;
470 attrtab[attrtab_idx].name = get_identifier (buf);
471 attrtab[attrtab_idx].min = min_len;
472 attrtab[attrtab_idx].max = max_len;
473 attrtab[attrtab_idx++].decl_req = decl_req;
476 /* Initialize attribute table. */
481 add_attribute (A_PACKED, "packed", 0, 0, 0);
482 add_attribute (A_NOCOMMON, "nocommon", 0, 0, 1);
483 add_attribute (A_COMMON, "common", 0, 0, 1);
484 add_attribute (A_NORETURN, "noreturn", 0, 0, 1);
485 add_attribute (A_NORETURN, "volatile", 0, 0, 1);
486 add_attribute (A_UNUSED, "unused", 0, 0, 0);
487 add_attribute (A_CONST, "const", 0, 0, 1);
488 add_attribute (A_T_UNION, "transparent_union", 0, 0, 0);
489 add_attribute (A_CONSTRUCTOR, "constructor", 0, 0, 1);
490 add_attribute (A_DESTRUCTOR, "destructor", 0, 0, 1);
491 add_attribute (A_MODE, "mode", 1, 1, 1);
492 add_attribute (A_SECTION, "section", 1, 1, 1);
493 add_attribute (A_ALIGNED, "aligned", 0, 1, 0);
494 add_attribute (A_FORMAT, "format", 3, 3, 1);
495 add_attribute (A_FORMAT_ARG, "format_arg", 1, 1, 1);
496 add_attribute (A_WEAK, "weak", 0, 0, 1);
497 add_attribute (A_ALIAS, "alias", 1, 1, 1);
498 add_attribute (A_NO_INSTRUMENT_FUNCTION, "no_instrument_function", 0, 0, 1);
499 add_attribute (A_NO_CHECK_MEMORY_USAGE, "no_check_memory_usage", 0, 0, 1);
500 add_attribute (A_MALLOC, "malloc", 0, 0, 1);
501 add_attribute (A_NO_LIMIT_STACK, "no_stack_limit", 0, 0, 1);
502 add_attribute (A_PURE, "pure", 0, 0, 1);
505 /* Default implementation of valid_lang_attribute, below. By default, there
506 are no language-specific attributes. */
509 default_valid_lang_attribute (attr_name, attr_args, decl, type)
510 tree attr_name ATTRIBUTE_UNUSED;
511 tree attr_args ATTRIBUTE_UNUSED;
512 tree decl ATTRIBUTE_UNUSED;
513 tree type ATTRIBUTE_UNUSED;
518 /* Return a 1 if ATTR_NAME and ATTR_ARGS denote a valid language-specific
519 attribute for either declaration DECL or type TYPE and 0 otherwise. */
521 int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree))
522 = default_valid_lang_attribute;
524 /* Process the attributes listed in ATTRIBUTES and PREFIX_ATTRIBUTES
525 and install them in NODE, which is either a DECL (including a TYPE_DECL)
526 or a TYPE. PREFIX_ATTRIBUTES can appear after the declaration specifiers
527 and declaration modifiers but before the declaration proper. */
530 decl_attributes (node, attributes, prefix_attributes)
531 tree node, attributes, prefix_attributes;
533 tree decl = 0, type = 0;
537 if (attrtab_idx == 0)
543 type = TREE_TYPE (decl);
544 is_type = TREE_CODE (node) == TYPE_DECL;
546 else if (TYPE_P (node))
547 type = node, is_type = 1;
549 #ifdef PRAGMA_INSERT_ATTRIBUTES
550 /* If the code in c-pragma.c wants to insert some attributes then
551 allow it to do so. Do this before allowing machine back ends to
552 insert attributes, so that they have the opportunity to override
553 anything done here. */
554 PRAGMA_INSERT_ATTRIBUTES (node, & attributes, & prefix_attributes);
557 #ifdef INSERT_ATTRIBUTES
558 INSERT_ATTRIBUTES (node, & attributes, & prefix_attributes);
561 attributes = chainon (prefix_attributes, attributes);
563 for (a = attributes; a; a = TREE_CHAIN (a))
565 tree name = TREE_PURPOSE (a);
566 tree args = TREE_VALUE (a);
570 for (i = 0; i < attrtab_idx; i++)
571 if (attrtab[i].name == name)
574 if (i == attrtab_idx)
576 if (! valid_machine_attribute (name, args, decl, type)
577 && ! (* valid_lang_attribute) (name, args, decl, type))
578 warning ("`%s' attribute directive ignored",
579 IDENTIFIER_POINTER (name));
581 type = TREE_TYPE (decl);
584 else if (attrtab[i].decl_req && decl == 0)
586 warning ("`%s' attribute does not apply to types",
587 IDENTIFIER_POINTER (name));
590 else if (list_length (args) < attrtab[i].min
591 || list_length (args) > attrtab[i].max)
593 error ("wrong number of arguments specified for `%s' attribute",
594 IDENTIFIER_POINTER (name));
603 TYPE_PACKED (type) = 1;
604 else if (TREE_CODE (decl) == FIELD_DECL)
605 DECL_PACKED (decl) = 1;
606 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
607 used for DECL_REGISTER. It wouldn't mean anything anyway. */
609 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
613 if (TREE_CODE (decl) == VAR_DECL)
614 DECL_COMMON (decl) = 0;
616 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
620 if (TREE_CODE (decl) == VAR_DECL)
621 DECL_COMMON (decl) = 1;
623 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
627 if (TREE_CODE (decl) == FUNCTION_DECL)
628 TREE_THIS_VOLATILE (decl) = 1;
629 else if (TREE_CODE (type) == POINTER_TYPE
630 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
631 TREE_TYPE (decl) = type
633 (build_type_variant (TREE_TYPE (type),
634 TREE_READONLY (TREE_TYPE (type)), 1));
636 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
640 if (TREE_CODE (decl) == FUNCTION_DECL)
641 DECL_IS_MALLOC (decl) = 1;
642 /* ??? TODO: Support types. */
644 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
650 TREE_USED (decl) = 1;
652 TREE_USED (type) = 1;
653 else if (TREE_CODE (decl) == PARM_DECL
654 || TREE_CODE (decl) == VAR_DECL
655 || TREE_CODE (decl) == FUNCTION_DECL
656 || TREE_CODE (decl) == LABEL_DECL)
657 TREE_USED (decl) = 1;
659 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
663 if (TREE_CODE (decl) == FUNCTION_DECL)
664 TREE_READONLY (decl) = 1;
665 else if (TREE_CODE (type) == POINTER_TYPE
666 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
667 TREE_TYPE (decl) = type
669 (build_type_variant (TREE_TYPE (type), 1,
670 TREE_THIS_VOLATILE (TREE_TYPE (type))));
672 warning ( "`%s' attribute ignored", IDENTIFIER_POINTER (name));
676 if (TREE_CODE (decl) == FUNCTION_DECL)
677 DECL_IS_PURE (decl) = 1;
678 /* ??? TODO: Support types. */
680 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
686 && TREE_CODE (type) == UNION_TYPE
688 || (TYPE_FIELDS (type) != 0
689 && TYPE_MODE (type) == DECL_MODE (TYPE_FIELDS (type)))))
690 TYPE_TRANSPARENT_UNION (type) = 1;
691 else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
692 && TREE_CODE (type) == UNION_TYPE
693 && TYPE_MODE (type) == DECL_MODE (TYPE_FIELDS (type)))
694 DECL_TRANSPARENT_UNION (decl) = 1;
696 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
700 if (TREE_CODE (decl) == FUNCTION_DECL
701 && TREE_CODE (type) == FUNCTION_TYPE
702 && decl_function_context (decl) == 0)
704 DECL_STATIC_CONSTRUCTOR (decl) = 1;
705 TREE_USED (decl) = 1;
708 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
712 if (TREE_CODE (decl) == FUNCTION_DECL
713 && TREE_CODE (type) == FUNCTION_TYPE
714 && decl_function_context (decl) == 0)
716 DECL_STATIC_DESTRUCTOR (decl) = 1;
717 TREE_USED (decl) = 1;
720 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
724 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
725 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
729 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
730 int len = strlen (p);
731 enum machine_mode mode = VOIDmode;
734 if (len > 4 && p[0] == '_' && p[1] == '_'
735 && p[len - 1] == '_' && p[len - 2] == '_')
737 char *newp = (char *) alloca (len - 1);
739 strcpy (newp, &p[2]);
740 newp[len - 4] = '\0';
744 /* Give this decl a type with the specified mode.
745 First check for the special modes. */
746 if (! strcmp (p, "byte"))
748 else if (!strcmp (p, "word"))
750 else if (! strcmp (p, "pointer"))
753 for (j = 0; j < NUM_MACHINE_MODES; j++)
754 if (!strcmp (p, GET_MODE_NAME (j)))
755 mode = (enum machine_mode) j;
757 if (mode == VOIDmode)
758 error ("unknown machine mode `%s'", p);
759 else if (0 == (typefm = type_for_mode (mode,
760 TREE_UNSIGNED (type))))
761 error ("no data type for mode `%s'", p);
764 if (TYPE_PRECISION (typefm) > (TREE_UNSIGNED (type)
765 ? TYPE_PRECISION(uintmax_type_node)
766 : TYPE_PRECISION(intmax_type_node))
768 pedwarn ("type with more precision than %s",
769 TREE_UNSIGNED (type) ? "uintmax_t" : "intmax_t");
770 TREE_TYPE (decl) = type = typefm;
771 DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
772 layout_decl (decl, 0);
778 #ifdef ASM_OUTPUT_SECTION_NAME
779 if ((TREE_CODE (decl) == FUNCTION_DECL
780 || TREE_CODE (decl) == VAR_DECL)
781 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
783 if (TREE_CODE (decl) == VAR_DECL
784 && current_function_decl != NULL_TREE
785 && ! TREE_STATIC (decl))
786 error_with_decl (decl,
787 "section attribute cannot be specified for local variables");
788 /* The decl may have already been given a section attribute from
789 a previous declaration. Ensure they match. */
790 else if (DECL_SECTION_NAME (decl) != NULL_TREE
791 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
792 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
793 error_with_decl (node,
794 "section of `%s' conflicts with previous declaration");
796 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
799 error_with_decl (node,
800 "section attribute not allowed for `%s'");
802 error_with_decl (node,
803 "section attributes are not supported for this target");
810 = (args ? TREE_VALUE (args)
811 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
814 /* Strip any NOPs of any kind. */
815 while (TREE_CODE (align_expr) == NOP_EXPR
816 || TREE_CODE (align_expr) == CONVERT_EXPR
817 || TREE_CODE (align_expr) == NON_LVALUE_EXPR)
818 align_expr = TREE_OPERAND (align_expr, 0);
820 if (TREE_CODE (align_expr) != INTEGER_CST)
822 error ("requested alignment is not a constant");
826 if ((i = tree_log2 (align_expr)) == -1)
827 error ("requested alignment is not a power of 2");
828 else if (i > HOST_BITS_PER_INT - 2)
829 error ("requested alignment is too large");
832 /* If we have a TYPE_DECL, then copy the type, so that we
833 don't accidentally modify a builtin type. See pushdecl. */
834 if (decl && TREE_TYPE (decl) != error_mark_node
835 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
837 tree tt = TREE_TYPE (decl);
838 DECL_ORIGINAL_TYPE (decl) = tt;
839 tt = build_type_copy (tt);
840 TYPE_NAME (tt) = decl;
841 TREE_USED (tt) = TREE_USED (decl);
842 TREE_TYPE (decl) = tt;
846 TYPE_ALIGN (type) = (1 << i) * BITS_PER_UNIT;
847 TYPE_USER_ALIGN (type) = 1;
849 else if (TREE_CODE (decl) != VAR_DECL
850 && TREE_CODE (decl) != FIELD_DECL)
851 error_with_decl (decl,
852 "alignment may not be specified for `%s'");
855 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
856 DECL_USER_ALIGN (decl) = 1;
863 tree format_type_id = TREE_VALUE (args);
864 tree format_num_expr = TREE_VALUE (TREE_CHAIN (args));
865 tree first_arg_num_expr
866 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (args)));
867 unsigned HOST_WIDE_INT format_num, first_arg_num;
868 enum format_type format_type;
870 unsigned int arg_num;
872 if (TREE_CODE (decl) != FUNCTION_DECL)
874 error_with_decl (decl,
875 "argument format specified for non-function `%s'");
879 if (TREE_CODE (format_type_id) != IDENTIFIER_NODE)
881 error ("unrecognized format specifier");
886 const char *p = IDENTIFIER_POINTER (format_type_id);
888 if (!strcmp (p, "printf") || !strcmp (p, "__printf__"))
889 format_type = printf_format_type;
890 else if (!strcmp (p, "scanf") || !strcmp (p, "__scanf__"))
891 format_type = scanf_format_type;
892 else if (!strcmp (p, "strftime")
893 || !strcmp (p, "__strftime__"))
894 format_type = strftime_format_type;
897 warning ("`%s' is an unrecognized format function type", p);
902 /* Strip any conversions from the string index and first arg number
903 and verify they are constants. */
904 while (TREE_CODE (format_num_expr) == NOP_EXPR
905 || TREE_CODE (format_num_expr) == CONVERT_EXPR
906 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
907 format_num_expr = TREE_OPERAND (format_num_expr, 0);
909 while (TREE_CODE (first_arg_num_expr) == NOP_EXPR
910 || TREE_CODE (first_arg_num_expr) == CONVERT_EXPR
911 || TREE_CODE (first_arg_num_expr) == NON_LVALUE_EXPR)
912 first_arg_num_expr = TREE_OPERAND (first_arg_num_expr, 0);
914 if (TREE_CODE (format_num_expr) != INTEGER_CST
915 || TREE_INT_CST_HIGH (format_num_expr) != 0
916 || TREE_CODE (first_arg_num_expr) != INTEGER_CST
917 || TREE_INT_CST_HIGH (first_arg_num_expr) != 0)
919 error ("format string has invalid operand number");
923 format_num = TREE_INT_CST_LOW (format_num_expr);
924 first_arg_num = TREE_INT_CST_LOW (first_arg_num_expr);
925 if (first_arg_num != 0 && first_arg_num <= format_num)
927 error ("format string arg follows the args to be formatted");
931 /* If a parameter list is specified, verify that the format_num
932 argument is actually a string, in case the format attribute
934 argument = TYPE_ARG_TYPES (type);
937 for (arg_num = 1; argument != 0 && arg_num != format_num;
938 ++arg_num, argument = TREE_CHAIN (argument))
942 || TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE
943 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument)))
946 error ("format string arg not a string type");
950 else if (first_arg_num != 0)
952 /* Verify that first_arg_num points to the last arg,
955 arg_num++, argument = TREE_CHAIN (argument);
957 if (arg_num != first_arg_num)
959 error ("args to be formatted is not '...'");
965 if (format_type == strftime_format_type && first_arg_num != 0)
967 error ("strftime formats cannot format arguments");
971 record_function_format (DECL_NAME (decl),
972 DECL_ASSEMBLER_NAME (decl),
973 format_type, format_num, first_arg_num);
979 tree format_num_expr = TREE_VALUE (args);
980 unsigned HOST_WIDE_INT format_num;
981 unsigned int arg_num;
984 if (TREE_CODE (decl) != FUNCTION_DECL)
986 error_with_decl (decl,
987 "argument format specified for non-function `%s'");
991 /* Strip any conversions from the first arg number and verify it
993 while (TREE_CODE (format_num_expr) == NOP_EXPR
994 || TREE_CODE (format_num_expr) == CONVERT_EXPR
995 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
996 format_num_expr = TREE_OPERAND (format_num_expr, 0);
998 if (TREE_CODE (format_num_expr) != INTEGER_CST
999 || TREE_INT_CST_HIGH (format_num_expr) != 0)
1001 error ("format string has invalid operand number");
1005 format_num = TREE_INT_CST_LOW (format_num_expr);
1007 /* If a parameter list is specified, verify that the format_num
1008 argument is actually a string, in case the format attribute
1010 argument = TYPE_ARG_TYPES (type);
1013 for (arg_num = 1; argument != 0 && arg_num != format_num;
1014 ++arg_num, argument = TREE_CHAIN (argument))
1018 || TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE
1019 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument)))
1022 error ("format string arg not a string type");
1027 if (TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) != POINTER_TYPE
1028 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (TREE_TYPE (decl))))
1031 error ("function does not return string type");
1035 record_international_format (DECL_NAME (decl),
1036 DECL_ASSEMBLER_NAME (decl),
1042 declare_weak (decl);
1046 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
1047 || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl)))
1048 error_with_decl (decl,
1049 "`%s' defined both normally and as an alias");
1050 else if (decl_function_context (decl) == 0)
1054 id = TREE_VALUE (args);
1055 if (TREE_CODE (id) != STRING_CST)
1057 error ("alias arg not a string");
1060 id = get_identifier (TREE_STRING_POINTER (id));
1061 /* This counts as a use of the object pointed to. */
1064 if (TREE_CODE (decl) == FUNCTION_DECL)
1065 DECL_INITIAL (decl) = error_mark_node;
1067 DECL_EXTERNAL (decl) = 0;
1068 assemble_alias (decl, id);
1071 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
1074 case A_NO_CHECK_MEMORY_USAGE:
1075 if (TREE_CODE (decl) != FUNCTION_DECL)
1077 error_with_decl (decl,
1078 "`%s' attribute applies only to functions",
1079 IDENTIFIER_POINTER (name));
1081 else if (DECL_INITIAL (decl))
1083 error_with_decl (decl,
1084 "can't set `%s' attribute after definition",
1085 IDENTIFIER_POINTER (name));
1088 DECL_NO_CHECK_MEMORY_USAGE (decl) = 1;
1091 case A_NO_INSTRUMENT_FUNCTION:
1092 if (TREE_CODE (decl) != FUNCTION_DECL)
1094 error_with_decl (decl,
1095 "`%s' attribute applies only to functions",
1096 IDENTIFIER_POINTER (name));
1098 else if (DECL_INITIAL (decl))
1100 error_with_decl (decl,
1101 "can't set `%s' attribute after definition",
1102 IDENTIFIER_POINTER (name));
1105 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
1108 case A_NO_LIMIT_STACK:
1109 if (TREE_CODE (decl) != FUNCTION_DECL)
1111 error_with_decl (decl,
1112 "`%s' attribute applies only to functions",
1113 IDENTIFIER_POINTER (name));
1115 else if (DECL_INITIAL (decl))
1117 error_with_decl (decl,
1118 "can't set `%s' attribute after definition",
1119 IDENTIFIER_POINTER (name));
1122 DECL_NO_LIMIT_STACK (decl) = 1;
1128 /* Split SPECS_ATTRS, a list of declspecs and prefix attributes, into two
1129 lists. SPECS_ATTRS may also be just a typespec (eg: RECORD_TYPE).
1131 The head of the declspec list is stored in DECLSPECS.
1132 The head of the attribute list is stored in PREFIX_ATTRIBUTES.
1134 Note that attributes in SPECS_ATTRS are stored in the TREE_PURPOSE of
1135 the list elements. We drop the containing TREE_LIST nodes and link the
1136 resulting attributes together the way decl_attributes expects them. */
1139 split_specs_attrs (specs_attrs, declspecs, prefix_attributes)
1141 tree *declspecs, *prefix_attributes;
1143 tree t, s, a, next, specs, attrs;
1145 /* This can happen after an __extension__ in pedantic mode. */
1146 if (specs_attrs != NULL_TREE
1147 && TREE_CODE (specs_attrs) == INTEGER_CST)
1149 *declspecs = NULL_TREE;
1150 *prefix_attributes = NULL_TREE;
1154 /* This can happen in c++ (eg: decl: typespec initdecls ';'). */
1155 if (specs_attrs != NULL_TREE
1156 && TREE_CODE (specs_attrs) != TREE_LIST)
1158 *declspecs = specs_attrs;
1159 *prefix_attributes = NULL_TREE;
1163 /* Remember to keep the lists in the same order, element-wise. */
1165 specs = s = NULL_TREE;
1166 attrs = a = NULL_TREE;
1167 for (t = specs_attrs; t; t = next)
1169 next = TREE_CHAIN (t);
1170 /* Declspecs have a non-NULL TREE_VALUE. */
1171 if (TREE_VALUE (t) != NULL_TREE)
1173 if (specs == NULL_TREE)
1183 if (attrs == NULL_TREE)
1184 attrs = a = TREE_PURPOSE (t);
1187 TREE_CHAIN (a) = TREE_PURPOSE (t);
1188 a = TREE_PURPOSE (t);
1190 /* More attrs can be linked here, move A to the end. */
1191 while (TREE_CHAIN (a) != NULL_TREE)
1196 /* Terminate the lists. */
1198 TREE_CHAIN (s) = NULL_TREE;
1200 TREE_CHAIN (a) = NULL_TREE;
1204 *prefix_attributes = attrs;
1207 /* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes.
1208 This function is used by the parser when a rule will accept attributes
1209 in a particular position, but we don't want to support that just yet.
1211 A warning is issued for every ignored attribute. */
1214 strip_attrs (specs_attrs)
1219 split_specs_attrs (specs_attrs, &specs, &attrs);
1223 warning ("`%s' attribute ignored",
1224 IDENTIFIER_POINTER (TREE_PURPOSE (attrs)));
1225 attrs = TREE_CHAIN (attrs);
1231 /* Check a printf/fprintf/sprintf/scanf/fscanf/sscanf format against
1232 a parameter list. */
1234 /* The meaningfully distinct length modifiers for format checking recognised
1251 /* The standard versions in which various format features appeared. */
1252 enum format_std_version
1261 /* Flags that may apply to a particular kind of format checked by GCC. */
1264 /* This format converts arguments of types determined by the
1266 FMT_FLAG_ARG_CONVERT = 1,
1267 /* The scanf allocation 'a' kludge applies to this format kind. */
1268 FMT_FLAG_SCANF_A_KLUDGE = 2,
1269 /* A % during parsing a specifier is allowed to be a modified % rather
1270 that indicating the format is broken and we are out-of-sync. */
1271 FMT_FLAG_FANCY_PERCENT_OK = 4
1272 /* Not included here: details of whether width or precision may occur
1273 (controlled by width_char and precision_char); details of whether
1274 '*' can be used for these (width_type and precision_type); details
1275 of whether length modifiers can occur (length_char_specs); details
1276 of when $ operand numbers are allowed (always, for the formats
1277 supported, if arguments are converted). */
1281 /* Structure describing a length modifier supported in format checking, and
1282 possibly a doubled version such as "hh". */
1285 /* Name of the single-character length modifier. */
1287 /* Index into a format_char_info.types array. */
1288 enum format_lengths index;
1289 /* Standard version this length appears in. */
1290 enum format_std_version std;
1291 /* Same, if the modifier can be repeated, or NULL if it can't. */
1292 const char *double_name;
1293 enum format_lengths double_index;
1294 enum format_std_version double_std;
1295 } format_length_info;
1298 /* Structure desribing the combination of a conversion specifier
1299 (or a set of specifiers which act identically) and a length modifier. */
1302 /* The standard version this combination of length and type appeared in.
1303 This is only relevant if greater than those for length and type
1304 individually; otherwise it is ignored. */
1305 enum format_std_version std;
1306 /* The name to use for the type, if different from that generated internally
1307 (e.g., "signed size_t"). */
1309 /* The type itself. */
1311 } format_type_detail;
1314 /* Macros to fill out tables of these. */
1315 #define BADLEN { 0, NULL, NULL }
1316 #define NOLENGTHS { BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }
1319 /* Structure desribing a format conversion specifier (or a set of specifiers
1320 which act identically), and the length modifiers used with it. */
1323 const char *format_chars;
1325 enum format_std_version std;
1326 /* Types accepted for each length modifier. */
1327 format_type_detail types[FMT_LEN_MAX];
1328 /* List of other modifier characters allowed with these specifiers.
1329 This lists flags, and additionally "w" for width, "p" for precision,
1330 "a" for scanf "a" allocation extension (not applicable in C99 mode),
1331 "*" for scanf suppression, and "E" and "O" for those strftime
1333 const char *flag_chars;
1334 /* List of additional flags describing these conversion specifiers.
1335 "c" for generic character pointers being allowed, "2" for strftime
1336 two digit year formats, "3" for strftime formats giving two digit
1337 years in some locales, "4" for "2" which becomes "3" with an "E" modifier,
1338 "o" if use of strftime "O" is a GNU extension beyond C99,
1339 "W" if the argument is a pointer which is dereferenced and written into,
1340 "i" for printf integer formats where the '0' flag is ignored with
1341 precision, and "[" for the starting character of a scanf scanset. */
1346 /* Structure describing a flag accepted by some kind of format. */
1349 /* The flag character in question (0 for end of array). */
1351 /* Zero if this entry describes the flag character in general, or a
1352 non-zero character that may be found in flags2 if it describes the
1353 flag when used with certain formats only. If the latter, only
1354 the first such entry found that applies to the current conversion
1355 specifier is used; the values of `name' and `long_name' it supplies
1356 will be used, if non-NULL and the standard version is higher than
1357 the unpredicated one, for any pedantic warning. For example, 'o'
1358 for strftime formats (meaning 'O' is an extension over C99). */
1360 /* The name to use for this flag in diagnostic messages. For example,
1361 N_("`0' flag"), N_("field width"). */
1363 /* Long name for this flag in diagnostic messages; currently only used for
1364 "ISO C does not support ...". For example, N_("the `I' printf flag"). */
1365 const char *long_name;
1366 /* The standard version in which it appeared. */
1367 enum format_std_version std;
1371 /* Structure describing a combination of flags that is bad for some kind
1375 /* The first flag character in question (0 for end of array). */
1377 /* The second flag character. */
1379 /* Non-zero if the message should say that the first flag is ignored with
1380 the second, zero if the combination should simply be objected to. */
1382 /* Zero if this entry applies whenever this flag combination occurs,
1383 a non-zero character from flags2 if it only applies in some
1384 circumstances (e.g. 'i' for printf formats ignoring 0 with precision). */
1389 /* Structure describing a particular kind of format processed by GCC. */
1392 /* The name of this kind of format, for use in diagnostics. */
1394 /* Specifications of the length modifiers accepted; possibly NULL. */
1395 const format_length_info *length_char_specs;
1396 /* Details of the conversion specification characters accepted. */
1397 const format_char_info *conversion_specs;
1398 /* String listing the flag characters that are accepted. */
1399 const char *flag_chars;
1400 /* String listing modifier characters (strftime) accepted. May be NULL. */
1401 const char *modifier_chars;
1402 /* Details of the flag characters, including pseudo-flags. */
1403 const format_flag_spec *flag_specs;
1404 /* Details of bad combinations of flags. */
1405 const format_flag_pair *bad_flag_pairs;
1406 /* Flags applicable to this kind of format. */
1408 /* Flag character to treat a width as, or 0 if width not used. */
1410 /* Flag character to treat a precision as, or 0 if precision not used. */
1412 /* If a flag character has the effect of suppressing the conversion of
1413 an argument ('*' in scanf), that flag character, otherwise 0. */
1414 int suppression_char;
1415 /* Flag character to treat a length modifier as (ignored if length
1416 modifiers not used). Need not be placed in flag_chars for conversion
1417 specifiers, but is used to check for bad combinations such as length
1418 modifier with assignment suppression in scanf. */
1419 int length_code_char;
1420 /* Pointer to type of argument expected if '*' is used for a width,
1421 or NULL if '*' not used for widths. */
1423 /* Pointer to type of argument expected if '*' is used for a precision,
1424 or NULL if '*' not used for precisions. */
1425 tree *precision_type;
1429 /* Structure describing details of a type expected in format checking,
1430 and the type to check against it. */
1431 typedef struct format_wanted_type
1433 /* The type wanted. */
1435 /* The name of this type to use in diagnostics. */
1436 const char *wanted_type_name;
1437 /* The level of indirection through pointers at which this type occurs. */
1439 /* Whether, when pointer_count is 1, to allow any character type when
1440 pedantic, rather than just the character or void type specified. */
1441 int char_lenient_flag;
1442 /* Whether the argument, dereferenced once, is written into and so the
1443 argument must not be a pointer to a const-qualified type. */
1444 int writing_in_flag;
1445 /* If warnings should be of the form "field precision is not type int",
1446 the name to use (in this case "field precision"), otherwise NULL,
1447 for "%s format, %s arg" type messages. If (in an extension), this
1448 is a pointer type, wanted_type_name should be set to include the
1449 terminating '*' characters of the type name to give a correct
1452 /* The actual parameter to check against the wanted type. */
1454 /* The argument number of that parameter. */
1456 /* The next type to check for this format conversion, or NULL if none. */
1457 struct format_wanted_type *next;
1458 } format_wanted_type;
1461 static const format_length_info printf_length_specs[] =
1463 { "h", FMT_LEN_h, STD_C89, "hh", FMT_LEN_hh, STD_C99 },
1464 { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C99 },
1465 { "q", FMT_LEN_ll, STD_EXT, NULL, 0, 0 },
1466 { "L", FMT_LEN_L, STD_C89, NULL, 0, 0 },
1467 { "z", FMT_LEN_z, STD_C99, NULL, 0, 0 },
1468 { "Z", FMT_LEN_z, STD_EXT, NULL, 0, 0 },
1469 { "t", FMT_LEN_t, STD_C99, NULL, 0, 0 },
1470 { "j", FMT_LEN_j, STD_C99, NULL, 0, 0 },
1471 { NULL, 0, 0, NULL, 0, 0 }
1475 /* This differs from printf_length_specs only in that "Z" is not accepted. */
1476 static const format_length_info scanf_length_specs[] =
1478 { "h", FMT_LEN_h, STD_C89, "hh", FMT_LEN_hh, STD_C99 },
1479 { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C99 },
1480 { "q", FMT_LEN_ll, STD_EXT, NULL, 0, 0 },
1481 { "L", FMT_LEN_L, STD_C89, NULL, 0, 0 },
1482 { "z", FMT_LEN_z, STD_C99, NULL, 0, 0 },
1483 { "t", FMT_LEN_t, STD_C99, NULL, 0, 0 },
1484 { "j", FMT_LEN_j, STD_C99, NULL, 0, 0 },
1485 { NULL, 0, 0, NULL, 0, 0 }
1489 static const format_flag_spec printf_flag_specs[] =
1491 { ' ', 0, N_("` ' flag"), N_("the ` ' printf flag"), STD_C89 },
1492 { '+', 0, N_("`+' flag"), N_("the `+' printf flag"), STD_C89 },
1493 { '#', 0, N_("`#' flag"), N_("the `#' printf flag"), STD_C89 },
1494 { '0', 0, N_("`0' flag"), N_("the `0' printf flag"), STD_C89 },
1495 { '-', 0, N_("`-' flag"), N_("the `-' printf flag"), STD_C89 },
1496 { '\'', 0, N_("`'' flag"), N_("the `'' printf flag"), STD_EXT },
1497 { 'I', 0, N_("`I' flag"), N_("the `I' printf flag"), STD_EXT },
1498 { 'w', 0, N_("field width"), N_("field width in printf format"), STD_C89 },
1499 { 'p', 0, N_("precision"), N_("precision in printf format"), STD_C89 },
1500 { 'L', 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
1501 { 0, 0, NULL, NULL, 0 }
1505 static const format_flag_pair printf_flag_pairs[] =
1509 { '0', 'p', 1, 'i' },
1514 static const format_flag_spec scanf_flag_specs[] =
1516 { '*', 0, N_("assignment suppression"), N_("assignment suppression"), STD_C89 },
1517 { 'a', 0, N_("`a' flag"), N_("the `a' scanf flag"), STD_EXT },
1518 { 'w', 0, N_("field width"), N_("field width in scanf format"), STD_C89 },
1519 { 'L', 0, N_("length modifier"), N_("length modifier in scanf format"), STD_C89 },
1520 { '\'', 0, N_("`'' flag"), N_("the `'' scanf flag"), STD_EXT },
1521 { 'I', 0, N_("`I' flag"), N_("the `I' scanf flag"), STD_EXT },
1522 { 0, 0, NULL, NULL, 0 }
1526 static const format_flag_pair scanf_flag_pairs[] =
1533 static const format_flag_spec strftime_flag_specs[] =
1535 { '_', 0, N_("`_' flag"), N_("the `_' strftime flag"), STD_EXT },
1536 { '-', 0, N_("`-' flag"), N_("the `-' strftime flag"), STD_EXT },
1537 { '0', 0, N_("`0' flag"), N_("the `0' strftime flag"), STD_EXT },
1538 { '^', 0, N_("`^' flag"), N_("the `^' strftime flag"), STD_EXT },
1539 { '#', 0, N_("`#' flag"), N_("the `#' strftime flag"), STD_EXT },
1540 { 'w', 0, N_("field width"), N_("field width in strftime format"), STD_EXT },
1541 { 'E', 0, N_("`E' modifier"), N_("the `E' strftime modifier"), STD_C99 },
1542 { 'O', 0, N_("`O' modifier"), N_("the `O' strftime modifier"), STD_C99 },
1543 { 'O', 'o', NULL, N_("the `O' modifier"), STD_EXT },
1544 { 0, 0, NULL, NULL, 0 }
1548 static const format_flag_pair strftime_flag_pairs[] =
1559 #define T_I &integer_type_node
1560 #define T89_I { STD_C89, NULL, T_I }
1561 #define T99_I { STD_C99, NULL, T_I }
1562 #define T_L &long_integer_type_node
1563 #define T89_L { STD_C89, NULL, T_L }
1564 #define T_LL &long_long_integer_type_node
1565 #define T99_LL { STD_C99, NULL, T_LL }
1566 #define TEX_LL { STD_EXT, NULL, T_LL }
1567 #define T_S &short_integer_type_node
1568 #define T89_S { STD_C89, NULL, T_S }
1569 #define T_UI &unsigned_type_node
1570 #define T89_UI { STD_C89, NULL, T_UI }
1571 #define T99_UI { STD_C99, NULL, T_UI }
1572 #define T_UL &long_unsigned_type_node
1573 #define T89_UL { STD_C89, NULL, T_UL }
1574 #define T_ULL &long_long_unsigned_type_node
1575 #define T99_ULL { STD_C99, NULL, T_ULL }
1576 #define TEX_ULL { STD_EXT, NULL, T_ULL }
1577 #define T_US &short_unsigned_type_node
1578 #define T89_US { STD_C89, NULL, T_US }
1579 #define T_F &float_type_node
1580 #define T89_F { STD_C89, NULL, T_F }
1581 #define T99_F { STD_C99, NULL, T_F }
1582 #define T_D &double_type_node
1583 #define T89_D { STD_C89, NULL, T_D }
1584 #define T99_D { STD_C99, NULL, T_D }
1585 #define T_LD &long_double_type_node
1586 #define T89_LD { STD_C89, NULL, T_LD }
1587 #define T99_LD { STD_C99, NULL, T_LD }
1588 #define T_C &char_type_node
1589 #define T89_C { STD_C89, NULL, T_C }
1590 #define T_SC &signed_char_type_node
1591 #define T99_SC { STD_C99, NULL, T_SC }
1592 #define T_UC &unsigned_char_type_node
1593 #define T99_UC { STD_C99, NULL, T_UC }
1594 #define T_V &void_type_node
1595 #define T89_V { STD_C89, NULL, T_V }
1596 #define T_W &wchar_type_node
1597 #define T94_W { STD_C94, "wchar_t", T_W }
1598 #define TEX_W { STD_EXT, "wchar_t", T_W }
1599 #define T_WI &wint_type_node
1600 #define T94_WI { STD_C94, "wint_t", T_WI }
1601 #define TEX_WI { STD_EXT, "wint_t", T_WI }
1602 #define T_ST &c_size_type_node
1603 #define T99_ST { STD_C99, "size_t", T_ST }
1604 #define T_SST &signed_size_type_node
1605 #define T99_SST { STD_C99, "signed size_t", T_SST }
1606 #define T_PD &ptrdiff_type_node
1607 #define T99_PD { STD_C99, "ptrdiff_t", T_PD }
1608 #define T_UPD &unsigned_ptrdiff_type_node
1609 #define T99_UPD { STD_C99, "unsigned ptrdiff_t", T_UPD }
1610 #define T_IM &intmax_type_node
1611 #define T99_IM { STD_C99, "intmax_t", T_IM }
1612 #define T_UIM &uintmax_type_node
1613 #define T99_UIM { STD_C99, "uintmax_t", T_UIM }
1615 static const format_char_info print_char_table[] =
1617 /* C89 conversion specifiers. */
1618 { "di", 0, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, TEX_LL, T99_SST, T99_PD, T99_IM }, "-wp0 +'I", "i" },
1619 { "oxX", 0, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T99_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "-wp0#", "i" },
1620 { "u", 0, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T99_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "-wp0'I", "i" },
1621 { "fgG", 0, STD_C89, { T89_D, BADLEN, BADLEN, T99_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#'", "" },
1622 { "eE", 0, STD_C89, { T89_D, BADLEN, BADLEN, T99_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#", "" },
1623 { "c", 0, STD_C89, { T89_I, BADLEN, BADLEN, T94_WI, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "" },
1624 { "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "c" },
1625 { "p", 1, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "c" },
1626 { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, BADLEN, T99_SST, T99_PD, T99_IM }, "", "W" },
1627 /* C99 conversion specifiers. */
1628 { "F", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#'", "" },
1629 { "aA", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#", "" },
1630 /* X/Open conversion specifiers. */
1631 { "C", 0, STD_EXT, { TEX_WI, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "" },
1632 { "S", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "" },
1633 /* GNU conversion specifiers. */
1634 { "m", 0, STD_EXT, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "" },
1635 { NULL, 0, 0, NOLENGTHS, NULL, NULL }
1638 static const format_char_info scan_char_table[] =
1640 /* C89 conversion specifiers. */
1641 { "di", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, TEX_LL, T99_SST, T99_PD, T99_IM }, "*w'I", "W" },
1642 { "u", 1, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T99_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "*w'I", "W" },
1643 { "oxX", 1, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T99_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "*w", "W" },
1644 { "efgEG", 1, STD_C89, { T89_F, BADLEN, BADLEN, T89_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "*w'", "W" },
1645 { "c", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*w", "cW" },
1646 { "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*aw", "cW" },
1647 { "[", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*aw", "cW[" },
1648 { "p", 2, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*w", "W" },
1649 { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, BADLEN, T99_SST, T99_PD, T99_IM }, "", "W" },
1650 /* C99 conversion specifiers. */
1651 { "FaA", 1, STD_C99, { T99_F, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "*w'", "W" },
1652 /* X/Open conversion specifiers. */
1653 { "C", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*w", "W" },
1654 { "S", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*aw", "W" },
1655 { NULL, 0, 0, NOLENGTHS, NULL, NULL }
1658 static format_char_info time_char_table[] =
1660 /* C89 conversion specifiers. */
1661 { "ABZab", 0, STD_C89, NOLENGTHS, "^#", "" },
1662 { "cx", 0, STD_C89, NOLENGTHS, "E", "3" },
1663 { "HIMSUWdmw", 0, STD_C89, NOLENGTHS, "-_0Ow", "" },
1664 { "j", 0, STD_C89, NOLENGTHS, "-_0Ow", "o" },
1665 { "p", 0, STD_C89, NOLENGTHS, "#", "" },
1666 { "X", 0, STD_C89, NOLENGTHS, "E", "" },
1667 { "y", 0, STD_C89, NOLENGTHS, "EO-_0w", "4" },
1668 { "Y", 0, STD_C89, NOLENGTHS, "-_0EOw", "o" },
1669 { "%", 0, STD_C89, NOLENGTHS, "", "" },
1670 /* C99 conversion specifiers. */
1671 { "C", 0, STD_C99, NOLENGTHS, "-_0EOw", "o" },
1672 { "D", 0, STD_C99, NOLENGTHS, "", "2" },
1673 { "eVu", 0, STD_C99, NOLENGTHS, "-_0Ow", "" },
1674 { "FRTnrt", 0, STD_C99, NOLENGTHS, "", "" },
1675 { "g", 0, STD_C99, NOLENGTHS, "O-_0w", "2o" },
1676 { "G", 0, STD_C99, NOLENGTHS, "-_0Ow", "o" },
1677 { "h", 0, STD_C99, NOLENGTHS, "^#", "" },
1678 { "z", 0, STD_C99, NOLENGTHS, "O", "o" },
1679 /* GNU conversion specifiers. */
1680 { "kls", 0, STD_EXT, NOLENGTHS, "-_0Ow", "" },
1681 { "P", 0, STD_EXT, NOLENGTHS, "", "" },
1682 { NULL, 0, 0, NOLENGTHS, NULL, NULL }
1686 /* This must be in the same order as enum format_type. */
1687 static const format_kind_info format_types[] =
1689 { "printf", printf_length_specs, print_char_table, " +#0-'I", NULL,
1690 printf_flag_specs, printf_flag_pairs,
1691 FMT_FLAG_ARG_CONVERT, 'w', 'p', 0, 'L',
1692 &integer_type_node, &integer_type_node
1694 { "scanf", scanf_length_specs, scan_char_table, "*'I", NULL,
1695 scanf_flag_specs, scanf_flag_pairs,
1696 FMT_FLAG_ARG_CONVERT|FMT_FLAG_SCANF_A_KLUDGE, 'w', 0, '*', 'L',
1699 { "strftime", NULL, time_char_table, "_-0^#", "EO",
1700 strftime_flag_specs, strftime_flag_pairs,
1701 FMT_FLAG_FANCY_PERCENT_OK, 'w', 0, 0, 0,
1707 typedef struct function_format_info
1709 struct function_format_info *next; /* next structure on the list */
1710 tree name; /* identifier such as "printf" */
1711 tree assembler_name; /* optional mangled identifier (for C++) */
1712 enum format_type format_type; /* type of format (printf, scanf, etc.) */
1713 int format_num; /* number of format argument */
1714 int first_arg_num; /* number of first arg (zero for varargs) */
1715 } function_format_info;
1717 static function_format_info *function_format_list = NULL;
1719 typedef struct international_format_info
1721 struct international_format_info *next; /* next structure on the list */
1722 tree name; /* identifier such as "gettext" */
1723 tree assembler_name; /* optional mangled identifier (for C++) */
1724 int format_num; /* number of format argument */
1725 } international_format_info;
1727 static international_format_info *international_format_list = NULL;
1729 static void check_format_info PARAMS ((int *, function_format_info *, tree));
1730 static void status_warning PARAMS ((int *, const char *, ...))
1733 static void init_dollar_format_checking PARAMS ((int, tree));
1734 static int maybe_read_dollar_number PARAMS ((int *, const char **, int,
1736 static void finish_dollar_format_checking PARAMS ((int *));
1738 static const format_flag_spec *get_flag_spec PARAMS ((const format_flag_spec *,
1739 int, const char *));
1741 static void check_format_types PARAMS ((int *, format_wanted_type *));
1742 static int is_valid_printf_arglist PARAMS ((tree));
1743 static rtx c_expand_builtin (tree, rtx, enum machine_mode, enum expand_modifier);
1744 static rtx c_expand_builtin_printf PARAMS ((tree, rtx, enum machine_mode,
1745 enum expand_modifier, int));
1747 /* Initialize the table of functions to perform format checking on.
1748 The ISO C functions are always checked (whether <stdio.h> is
1749 included or not), since it is common to call printf without
1750 including <stdio.h>. There shouldn't be a problem with this,
1751 since ISO C reserves these function names whether you include the
1752 header file or not. In any case, the checking is harmless. With
1753 -ffreestanding, these default attributes are disabled, and must be
1754 specified manually if desired.
1756 Also initialize the name of function that modify the format string for
1757 internationalization purposes. */
1760 init_function_format_info ()
1764 /* Functions from ISO/IEC 9899:1990. */
1765 record_function_format (get_identifier ("printf"), NULL_TREE,
1766 printf_format_type, 1, 2);
1767 record_function_format (get_identifier ("__builtin_printf"), NULL_TREE,
1768 printf_format_type, 1, 2);
1769 record_function_format (get_identifier ("fprintf"), NULL_TREE,
1770 printf_format_type, 2, 3);
1771 record_function_format (get_identifier ("sprintf"), NULL_TREE,
1772 printf_format_type, 2, 3);
1773 record_function_format (get_identifier ("scanf"), NULL_TREE,
1774 scanf_format_type, 1, 2);
1775 record_function_format (get_identifier ("fscanf"), NULL_TREE,
1776 scanf_format_type, 2, 3);
1777 record_function_format (get_identifier ("sscanf"), NULL_TREE,
1778 scanf_format_type, 2, 3);
1779 record_function_format (get_identifier ("vprintf"), NULL_TREE,
1780 printf_format_type, 1, 0);
1781 record_function_format (get_identifier ("vfprintf"), NULL_TREE,
1782 printf_format_type, 2, 0);
1783 record_function_format (get_identifier ("vsprintf"), NULL_TREE,
1784 printf_format_type, 2, 0);
1785 record_function_format (get_identifier ("strftime"), NULL_TREE,
1786 strftime_format_type, 3, 0);
1789 if (flag_hosted && flag_isoc99)
1791 /* ISO C99 adds the snprintf and vscanf family functions. */
1792 record_function_format (get_identifier ("snprintf"), NULL_TREE,
1793 printf_format_type, 3, 4);
1794 record_function_format (get_identifier ("vsnprintf"), NULL_TREE,
1795 printf_format_type, 3, 0);
1796 record_function_format (get_identifier ("vscanf"), NULL_TREE,
1797 scanf_format_type, 1, 0);
1798 record_function_format (get_identifier ("vfscanf"), NULL_TREE,
1799 scanf_format_type, 2, 0);
1800 record_function_format (get_identifier ("vsscanf"), NULL_TREE,
1801 scanf_format_type, 2, 0);
1804 if (flag_hosted && flag_noniso_default_format_attributes)
1806 /* Uniforum/GNU gettext functions, not in ISO C. */
1807 record_international_format (get_identifier ("gettext"), NULL_TREE, 1);
1808 record_international_format (get_identifier ("dgettext"), NULL_TREE, 2);
1809 record_international_format (get_identifier ("dcgettext"), NULL_TREE, 2);
1813 /* Record information for argument format checking. FUNCTION_IDENT is
1814 the identifier node for the name of the function to check (its decl
1815 need not exist yet).
1816 FORMAT_TYPE specifies the type of format checking. FORMAT_NUM is the number
1817 of the argument which is the format control string (starting from 1).
1818 FIRST_ARG_NUM is the number of the first actual argument to check
1819 against the format string, or zero if no checking is not be done
1820 (e.g. for varargs such as vfprintf). */
1823 record_function_format (name, assembler_name, format_type,
1824 format_num, first_arg_num)
1826 tree assembler_name;
1827 enum format_type format_type;
1831 function_format_info *info;
1833 /* Re-use existing structure if it's there. */
1835 for (info = function_format_list; info; info = info->next)
1837 if (info->name == name && info->assembler_name == assembler_name)
1842 info = (function_format_info *) xmalloc (sizeof (function_format_info));
1843 info->next = function_format_list;
1844 function_format_list = info;
1847 info->assembler_name = assembler_name;
1850 info->format_type = format_type;
1851 info->format_num = format_num;
1852 info->first_arg_num = first_arg_num;
1855 /* Record information for the names of function that modify the format
1856 argument to format functions. FUNCTION_IDENT is the identifier node for
1857 the name of the function (its decl need not exist yet) and FORMAT_NUM is
1858 the number of the argument which is the format control string (starting
1862 record_international_format (name, assembler_name, format_num)
1864 tree assembler_name;
1867 international_format_info *info;
1869 /* Re-use existing structure if it's there. */
1871 for (info = international_format_list; info; info = info->next)
1873 if (info->name == name && info->assembler_name == assembler_name)
1880 = (international_format_info *)
1881 xmalloc (sizeof (international_format_info));
1882 info->next = international_format_list;
1883 international_format_list = info;
1886 info->assembler_name = assembler_name;
1889 info->format_num = format_num;
1892 /* Check the argument list of a call to printf, scanf, etc.
1893 NAME is the function identifier.
1894 ASSEMBLER_NAME is the function's assembler identifier.
1895 (Either NAME or ASSEMBLER_NAME, but not both, may be NULL_TREE.)
1896 PARAMS is the list of argument values. */
1899 check_function_format (status, name, assembler_name, params)
1902 tree assembler_name;
1905 function_format_info *info;
1907 /* See if this function is a format function. */
1908 for (info = function_format_list; info; info = info->next)
1910 if (info->assembler_name
1911 ? (info->assembler_name == assembler_name)
1912 : (info->name == name))
1914 /* Yup; check it. */
1915 check_format_info (status, info, params);
1921 /* This function replaces `warning' inside the printf format checking
1922 functions. If the `status' parameter is non-NULL, then it is
1923 dereferenced and set to 1 whenever a warning is caught. Otherwise
1924 it warns as usual by replicating the innards of the warning
1925 function from diagnostic.c. */
1927 status_warning VPARAMS ((int *status, const char *msgid, ...))
1929 #ifndef ANSI_PROTOTYPES
1934 diagnostic_context dc;
1940 VA_START (ap, msgid);
1942 #ifndef ANSI_PROTOTYPES
1943 status = va_arg (ap, int *);
1944 msgid = va_arg (ap, const char *);
1947 /* This duplicates the warning function behavior. */
1948 set_diagnostic_context
1949 (&dc, msgid, &ap, input_filename, lineno, /* warn = */ 1);
1950 report_diagnostic (&dc);
1956 /* Variables used by the checking of $ operand number formats. */
1957 static char *dollar_arguments_used = NULL;
1958 static int dollar_arguments_alloc = 0;
1959 static int dollar_arguments_count;
1960 static int dollar_first_arg_num;
1961 static int dollar_max_arg_used;
1962 static int dollar_format_warned;
1964 /* Initialize the checking for a format string that may contain $
1965 parameter number specifications; we will need to keep track of whether
1966 each parameter has been used. FIRST_ARG_NUM is the number of the first
1967 argument that is a parameter to the format, or 0 for a vprintf-style
1968 function; PARAMS is the list of arguments starting at this argument. */
1971 init_dollar_format_checking (first_arg_num, params)
1975 dollar_first_arg_num = first_arg_num;
1976 dollar_arguments_count = 0;
1977 dollar_max_arg_used = 0;
1978 dollar_format_warned = 0;
1979 if (first_arg_num > 0)
1983 dollar_arguments_count++;
1984 params = TREE_CHAIN (params);
1987 if (dollar_arguments_alloc < dollar_arguments_count)
1989 if (dollar_arguments_used)
1990 free (dollar_arguments_used);
1991 dollar_arguments_alloc = dollar_arguments_count;
1992 dollar_arguments_used = xmalloc (dollar_arguments_alloc);
1994 if (dollar_arguments_alloc)
1995 memset (dollar_arguments_used, 0, dollar_arguments_alloc);
1999 /* Look for a decimal number followed by a $ in *FORMAT. If DOLLAR_NEEDED
2000 is set, it is an error if one is not found; otherwise, it is OK. If
2001 such a number is found, check whether it is within range and mark that
2002 numbered operand as being used for later checking. Returns the operand
2003 number if found and within range, zero if no such number was found and
2004 this is OK, or -1 on error. PARAMS points to the first operand of the
2005 format; PARAM_PTR is made to point to the parameter referred to. If
2006 a $ format is found, *FORMAT is updated to point just after it. */
2009 maybe_read_dollar_number (status, format, dollar_needed, params, param_ptr)
2011 const char **format;
2018 const char *fcp = *format;
2019 if (*fcp < '0' || *fcp > '9')
2023 status_warning (status, "missing $ operand number in format");
2031 while (*fcp >= '0' && *fcp <= '9')
2034 nargnum = 10 * argnum + (*fcp - '0');
2035 if (nargnum < 0 || nargnum / 10 != argnum)
2044 status_warning (status, "missing $ operand number in format");
2051 if (pedantic && !dollar_format_warned)
2053 status_warning (status, "ISO C does not support %%n$ operand number formats");
2054 dollar_format_warned = 1;
2056 if (overflow_flag || argnum == 0
2057 || (dollar_first_arg_num && argnum > dollar_arguments_count))
2059 status_warning (status, "operand number out of range in format");
2062 if (argnum > dollar_max_arg_used)
2063 dollar_max_arg_used = argnum;
2064 /* For vprintf-style functions we may need to allocate more memory to
2065 track which arguments are used. */
2066 while (dollar_arguments_alloc < dollar_max_arg_used)
2069 nalloc = 2 * dollar_arguments_alloc + 16;
2070 dollar_arguments_used = xrealloc (dollar_arguments_used, nalloc);
2071 memset (dollar_arguments_used + dollar_arguments_alloc, 0,
2072 nalloc - dollar_arguments_alloc);
2073 dollar_arguments_alloc = nalloc;
2075 dollar_arguments_used[argnum - 1] = 1;
2076 if (dollar_first_arg_num)
2079 *param_ptr = params;
2080 for (i = 1; i < argnum && *param_ptr != 0; i++)
2081 *param_ptr = TREE_CHAIN (*param_ptr);
2083 if (*param_ptr == 0)
2085 /* This case shouldn't be caught here. */
2095 /* Finish the checking for a format string that used $ operand number formats
2096 instead of non-$ formats. We check for unused operands before used ones
2097 (a serious error, since the implementation of the format function
2098 can't know what types to pass to va_arg to find the later arguments).
2099 and for unused operands at the end of the format (if we know how many
2100 arguments the format had, so not for vprintf). If there were operand
2101 numbers out of range on a non-vprintf-style format, we won't have reached
2105 finish_dollar_format_checking (status)
2109 for (i = 0; i < dollar_max_arg_used; i++)
2111 if (!dollar_arguments_used[i])
2112 status_warning (status, "format argument %d unused before used argument %d in $-style format",
2113 i + 1, dollar_max_arg_used);
2115 if (dollar_first_arg_num && dollar_max_arg_used < dollar_arguments_count)
2116 status_warning (status, "unused arguments in $-style format");
2120 /* Retrieve the specification for a format flag. SPEC contains the
2121 specifications for format flags for the applicable kind of format.
2122 FLAG is the flag in question. If PREDICATES is NULL, the basic
2123 spec for that flag must be retrieved and this function aborts if
2124 it cannot be found. If PREDICATES is not NULL, it is a string listing
2125 possible predicates for the spec entry; if an entry predicated on any
2126 of these is found, it is returned, otherwise NULL is returned. */
2128 static const format_flag_spec *
2129 get_flag_spec (spec, flag, predicates)
2130 const format_flag_spec *spec;
2132 const char *predicates;
2135 for (i = 0; spec[i].flag_char != 0; i++)
2137 if (spec[i].flag_char != flag)
2139 if (predicates != NULL)
2141 if (spec[i].predicate != 0
2142 && index (predicates, spec[i].predicate) != 0)
2145 else if (spec[i].predicate == 0)
2148 if (predicates == NULL)
2155 /* Check the argument list of a call to printf, scanf, etc.
2156 INFO points to the function_format_info structure.
2157 PARAMS is the list of argument values. */
2160 check_format_info (status, info, params)
2162 function_format_info *info;
2168 const char *length_chars = NULL;
2169 enum format_lengths length_chars_val = FMT_LEN_none;
2170 enum format_std_version length_chars_std = STD_C89;
2177 tree main_arg_params;
2178 enum format_std_version wanted_type_std;
2179 const char *wanted_type_name;
2180 format_wanted_type width_wanted_type;
2181 format_wanted_type precision_wanted_type;
2182 format_wanted_type main_wanted_type;
2183 format_wanted_type *first_wanted_type;
2184 format_wanted_type *last_wanted_type;
2185 tree first_fillin_param;
2186 const char *format_chars;
2187 const format_kind_info *fki = NULL;
2188 const format_flag_spec *flag_specs = NULL;
2189 const format_flag_pair *bad_flag_pairs = NULL;
2190 const format_length_info *fli = NULL;
2191 const format_char_info *fci = NULL;
2192 char flag_chars[256];
2193 /* -1 if no conversions taking an operand have been found; 0 if one has
2194 and it didn't use $; 1 if $ formats are in use. */
2195 int has_operand_number = -1;
2197 /* Skip to format argument. If the argument isn't available, there's
2198 no work for us to do; prototype checking will catch the problem. */
2199 for (arg_num = 1; ; ++arg_num)
2203 if (arg_num == info->format_num)
2205 params = TREE_CHAIN (params);
2207 format_tree = TREE_VALUE (params);
2208 params = TREE_CHAIN (params);
2209 if (format_tree == 0)
2212 /* We can only check the format if it's a string constant. */
2213 while (TREE_CODE (format_tree) == NOP_EXPR)
2214 format_tree = TREE_OPERAND (format_tree, 0); /* strip coercion */
2216 if (TREE_CODE (format_tree) == CALL_EXPR
2217 && TREE_CODE (TREE_OPERAND (format_tree, 0)) == ADDR_EXPR
2218 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (format_tree, 0), 0))
2221 tree function = TREE_OPERAND (TREE_OPERAND (format_tree, 0), 0);
2223 /* See if this is a call to a known internationalization function
2224 that modifies the format arg. */
2225 international_format_info *info;
2227 for (info = international_format_list; info; info = info->next)
2228 if (info->assembler_name
2229 ? (info->assembler_name == DECL_ASSEMBLER_NAME (function))
2230 : (info->name == DECL_NAME (function)))
2235 for (inner_args = TREE_OPERAND (format_tree, 1), i = 1;
2237 inner_args = TREE_CHAIN (inner_args), i++)
2238 if (i == info->format_num)
2240 format_tree = TREE_VALUE (inner_args);
2242 while (TREE_CODE (format_tree) == NOP_EXPR)
2243 format_tree = TREE_OPERAND (format_tree, 0);
2248 if (integer_zerop (format_tree))
2250 status_warning (status, "null format string");
2253 if (TREE_CODE (format_tree) != ADDR_EXPR)
2255 /* The user may get multiple warnings if the supplied argument
2256 isn't even a string pointer. */
2257 /* Functions taking a va_list normally pass a non-literal format
2258 string. These functions typically are declared with
2259 first_arg_num == 0, so avoid warning in those cases. */
2260 if (info->first_arg_num != 0 && warn_format > 1)
2261 status_warning (status, "format not a string literal, argument types not checked");
2264 format_tree = TREE_OPERAND (format_tree, 0);
2265 if (TREE_CODE (format_tree) != STRING_CST)
2267 /* The user may get multiple warnings if the supplied argument
2268 isn't even a string pointer. */
2269 /* Functions taking a va_list normally pass a non-literal format
2270 string. These functions typically are declared with
2271 first_arg_num == 0, so avoid warning in those cases. */
2272 if (info->first_arg_num != 0 && warn_format > 1)
2273 status_warning (status, "format not a string literal, argument types not checked");
2276 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (format_tree))) != char_type_node)
2278 status_warning (status, "format is a wide character string");
2281 format_chars = TREE_STRING_POINTER (format_tree);
2282 format_length = TREE_STRING_LENGTH (format_tree);
2283 if (format_length <= 1)
2284 status_warning (status, "zero-length format string");
2285 if (format_chars[--format_length] != 0)
2287 status_warning (status, "unterminated format string");
2290 /* Skip to first argument to check. */
2291 while (arg_num + 1 < info->first_arg_num)
2295 params = TREE_CHAIN (params);
2299 first_fillin_param = params;
2300 init_dollar_format_checking (info->first_arg_num, first_fillin_param);
2301 fki = &format_types[info->format_type];
2302 flag_specs = fki->flag_specs;
2303 bad_flag_pairs = fki->bad_flag_pairs;
2307 first_wanted_type = NULL;
2308 last_wanted_type = NULL;
2309 if (*format_chars == 0)
2311 if (format_chars - TREE_STRING_POINTER (format_tree) != format_length)
2312 status_warning (status, "embedded `\\0' in format");
2313 if (info->first_arg_num != 0 && params != 0
2314 && has_operand_number <= 0)
2315 status_warning (status, "too many arguments for format");
2316 if (has_operand_number > 0)
2317 finish_dollar_format_checking (status);
2320 if (*format_chars++ != '%')
2322 if (*format_chars == 0)
2324 status_warning (status, "spurious trailing `%%' in format");
2327 if (*format_chars == '%')
2335 main_arg_params = 0;
2337 if ((fki->flags & FMT_FLAG_ARG_CONVERT) && has_operand_number != 0)
2339 /* Possibly read a $ operand number at the start of the format.
2340 If one was previously used, one is required here. If one
2341 is not used here, we can't immediately conclude this is a
2342 format without them, since it could be printf %m or scanf %*. */
2344 opnum = maybe_read_dollar_number (status, &format_chars, 0,
2351 has_operand_number = 1;
2352 main_arg_num = opnum + info->first_arg_num - 1;
2356 /* Read any format flags, but do not yet validate them beyond removing
2357 duplicates, since in general validation depends on the rest of
2359 while (*format_chars != 0 && index (fki->flag_chars, *format_chars) != 0)
2361 if (index (flag_chars, *format_chars) != 0)
2363 const format_flag_spec *s = get_flag_spec (flag_specs,
2364 *format_chars, NULL);
2365 status_warning (status, "repeated %s in format", _(s->name));
2369 i = strlen (flag_chars);
2370 flag_chars[i++] = *format_chars;
2376 /* Read any format width, possibly * or *m$. */
2377 if (fki->width_char != 0)
2379 if (fki->width_type != NULL && *format_chars == '*')
2381 i = strlen (flag_chars);
2382 flag_chars[i++] = fki->width_char;
2384 /* "...a field width...may be indicated by an asterisk.
2385 In this case, an int argument supplies the field width..." */
2389 status_warning (status, "too few arguments for format");
2392 if (has_operand_number != 0)
2395 opnum = maybe_read_dollar_number (status, &format_chars,
2396 has_operand_number == 1,
2403 has_operand_number = 1;
2404 arg_num = opnum + info->first_arg_num - 1;
2407 has_operand_number = 0;
2409 if (info->first_arg_num != 0)
2411 cur_param = TREE_VALUE (params);
2412 if (has_operand_number <= 0)
2414 params = TREE_CHAIN (params);
2417 width_wanted_type.wanted_type = *fki->width_type;
2418 width_wanted_type.wanted_type_name = NULL;
2419 width_wanted_type.pointer_count = 0;
2420 width_wanted_type.char_lenient_flag = 0;
2421 width_wanted_type.writing_in_flag = 0;
2422 width_wanted_type.name = _("field width");
2423 width_wanted_type.param = cur_param;
2424 width_wanted_type.arg_num = arg_num;
2425 width_wanted_type.next = NULL;
2426 if (last_wanted_type != 0)
2427 last_wanted_type->next = &width_wanted_type;
2428 if (first_wanted_type == 0)
2429 first_wanted_type = &width_wanted_type;
2430 last_wanted_type = &width_wanted_type;
2435 /* Possibly read a numeric width. If the width is zero,
2436 we complain; for scanf this is bad according to the
2437 standard, and for printf and strftime it cannot occur
2438 because 0 is a flag. */
2439 int non_zero_width_char = FALSE;
2440 int found_width = FALSE;
2441 while (ISDIGIT (*format_chars))
2444 if (*format_chars != '0')
2445 non_zero_width_char = TRUE;
2448 if (found_width && !non_zero_width_char)
2449 status_warning (status, "zero width in scanf format");
2452 i = strlen (flag_chars);
2453 flag_chars[i++] = fki->width_char;
2459 /* Read any format precision, possibly * or *m$. */
2460 if (fki->precision_char != 0 && *format_chars == '.')
2463 i = strlen (flag_chars);
2464 flag_chars[i++] = fki->precision_char;
2466 if (fki->precision_type != NULL && *format_chars == '*')
2468 /* "...a...precision...may be indicated by an asterisk.
2469 In this case, an int argument supplies the...precision." */
2471 if (has_operand_number != 0)
2474 opnum = maybe_read_dollar_number (status, &format_chars,
2475 has_operand_number == 1,
2482 has_operand_number = 1;
2483 arg_num = opnum + info->first_arg_num - 1;
2486 has_operand_number = 0;
2488 if (info->first_arg_num != 0)
2492 status_warning (status, "too few arguments for format");
2495 cur_param = TREE_VALUE (params);
2496 if (has_operand_number <= 0)
2498 params = TREE_CHAIN (params);
2501 precision_wanted_type.wanted_type = *fki->precision_type;
2502 precision_wanted_type.wanted_type_name = NULL;
2503 precision_wanted_type.pointer_count = 0;
2504 precision_wanted_type.char_lenient_flag = 0;
2505 precision_wanted_type.writing_in_flag = 0;
2506 precision_wanted_type.name = _("field precision");
2507 precision_wanted_type.param = cur_param;
2508 precision_wanted_type.arg_num = arg_num;
2509 precision_wanted_type.next = NULL;
2510 if (last_wanted_type != 0)
2511 last_wanted_type->next = &precision_wanted_type;
2512 if (first_wanted_type == 0)
2513 first_wanted_type = &precision_wanted_type;
2514 last_wanted_type = &precision_wanted_type;
2519 while (ISDIGIT (*format_chars))
2524 /* Read any length modifier, if this kind of format has them. */
2525 fli = fki->length_char_specs;
2526 length_chars = NULL;
2527 length_chars_val = FMT_LEN_none;
2528 length_chars_std = STD_C89;
2531 while (fli->name != 0 && fli->name[0] != *format_chars)
2536 if (fli->double_name != 0 && fli->name[0] == *format_chars)
2539 length_chars = fli->double_name;
2540 length_chars_val = fli->double_index;
2541 length_chars_std = fli->double_std;
2545 length_chars = fli->name;
2546 length_chars_val = fli->index;
2547 length_chars_std = fli->std;
2549 i = strlen (flag_chars);
2550 flag_chars[i++] = fki->length_code_char;
2555 /* Warn if the length modifier is non-standard. */
2556 if (length_chars_std == STD_EXT)
2557 status_warning (status, "ISO C does not support the `%s' %s length modifier",
2558 length_chars, fki->name);
2559 else if ((length_chars_std == STD_C99 && !flag_isoc99)
2560 || (length_chars_std == STD_C94 && !flag_isoc94))
2561 status_warning (status, "ISO C89 does not support the `%s' %s length modifier",
2562 length_chars, fki->name);
2566 /* Read any modifier (strftime E/O). */
2567 if (fki->modifier_chars != NULL)
2569 while (*format_chars != 0
2570 && index (fki->modifier_chars, *format_chars) != 0)
2572 if (index (flag_chars, *format_chars) != 0)
2574 const format_flag_spec *s = get_flag_spec (flag_specs,
2575 *format_chars, NULL);
2576 status_warning (status, "repeated %s in format", _(s->name));
2580 i = strlen (flag_chars);
2581 flag_chars[i++] = *format_chars;
2588 /* Handle the scanf allocation kludge. */
2589 if (fki->flags & FMT_FLAG_SCANF_A_KLUDGE)
2591 if (*format_chars == 'a' && !flag_isoc99)
2593 if (format_chars[1] == 's' || format_chars[1] == 'S'
2594 || format_chars[1] == '[')
2596 /* `a' is used as a flag. */
2597 i = strlen (flag_chars);
2598 flag_chars[i++] = 'a';
2605 format_char = *format_chars;
2606 if (format_char == 0
2607 || (!(fki->flags & FMT_FLAG_FANCY_PERCENT_OK) && format_char == '%'))
2609 status_warning (status, "conversion lacks type at end of format");
2613 fci = fki->conversion_specs;
2614 while (fci->format_chars != 0
2615 && index (fci->format_chars, format_char) == 0)
2617 if (fci->format_chars == 0)
2619 if (ISGRAPH(format_char))
2620 status_warning (status, "unknown conversion type character `%c' in format",
2623 status_warning (status, "unknown conversion type character 0x%x in format",
2629 if (fci->std == STD_EXT)
2630 status_warning (status, "ISO C does not support the `%%%c' %s format",
2631 format_char, fki->name);
2632 else if ((fci->std == STD_C99 && !flag_isoc99)
2633 || (fci->std == STD_C94 && !flag_isoc94))
2634 status_warning (status, "ISO C89 does not support the `%%%c' %s format",
2635 format_char, fki->name);
2638 /* Validate the individual flags used, removing any that are invalid. */
2641 for (i = 0; flag_chars[i] != 0; i++)
2643 const format_flag_spec *s = get_flag_spec (flag_specs,
2644 flag_chars[i], NULL);
2645 flag_chars[i - d] = flag_chars[i];
2646 if (flag_chars[i] == fki->length_code_char)
2648 if (index (fci->flag_chars, flag_chars[i]) == 0)
2650 status_warning (status, "%s used with `%%%c' %s format",
2651 _(s->name), format_char, fki->name);
2657 const format_flag_spec *t;
2658 if (s->std == STD_EXT)
2659 status_warning (status, "ISO C does not support %s",
2661 else if ((s->std == STD_C99 && !flag_isoc99)
2662 || (s->std == STD_C94 && !flag_isoc94))
2663 status_warning (status, "ISO C89 does not support %s",
2665 t = get_flag_spec (flag_specs, flag_chars[i], fci->flags2);
2666 if (t != NULL && t->std > s->std)
2668 const char *long_name = (t->long_name != NULL
2671 if (t->std == STD_EXT)
2672 status_warning (status, "ISO C does not support %s with the `%%%c' %s format",
2673 _(long_name), format_char, fki->name);
2674 else if ((t->std == STD_C99 && !flag_isoc99)
2675 || (t->std == STD_C94 && !flag_isoc94))
2676 status_warning (status, "ISO C89 does not support %s with the `%%%c' %s format",
2677 _(long_name), format_char, fki->name);
2681 flag_chars[i - d] = 0;
2685 if ((fki->flags & FMT_FLAG_SCANF_A_KLUDGE)
2686 && index (flag_chars, 'a') != 0)
2689 if (fki->suppression_char
2690 && index (flag_chars, fki->suppression_char) != 0)
2693 /* Validate the pairs of flags used. */
2694 for (i = 0; bad_flag_pairs[i].flag_char1 != 0; i++)
2696 const format_flag_spec *s, *t;
2697 if (index (flag_chars, bad_flag_pairs[i].flag_char1) == 0)
2699 if (index (flag_chars, bad_flag_pairs[i].flag_char2) == 0)
2701 if (bad_flag_pairs[i].predicate != 0
2702 && index (fci->flags2, bad_flag_pairs[i].predicate) == 0)
2704 s = get_flag_spec (flag_specs, bad_flag_pairs[i].flag_char1, NULL);
2705 t = get_flag_spec (flag_specs, bad_flag_pairs[i].flag_char2, NULL);
2706 if (bad_flag_pairs[i].ignored)
2708 if (bad_flag_pairs[i].predicate != 0)
2709 status_warning (status, "%s ignored with %s and `%%%c' %s format",
2710 _(s->name), _(t->name), format_char,
2713 status_warning (status, "%s ignored with %s in %s format",
2714 _(s->name), _(t->name), fki->name);
2718 if (bad_flag_pairs[i].predicate != 0)
2719 status_warning (status, "use of %s and %s together with `%%%c' %s format",
2720 _(s->name), _(t->name), format_char,
2723 status_warning (status, "use of %s and %s together in %s format",
2724 _(s->name), _(t->name), fki->name);
2728 /* Give Y2K warnings. */
2731 if (index (fci->flags2, '4') != 0)
2732 if (index (flag_chars, 'E') != 0)
2736 else if (index (fci->flags2, '3') != 0)
2738 else if (index (fci->flags2, '2') != 0)
2741 status_warning (status, "`%%%c' yields only last 2 digits of year in some locales",
2743 else if (y2k_level == 2)
2744 status_warning (status, "`%%%c' yields only last 2 digits of year", format_char);
2747 if (index (fci->flags2, '[') != 0)
2749 /* Skip over scan set, in case it happens to have '%' in it. */
2750 if (*format_chars == '^')
2752 /* Find closing bracket; if one is hit immediately, then
2753 it's part of the scan set rather than a terminator. */
2754 if (*format_chars == ']')
2756 while (*format_chars && *format_chars != ']')
2758 if (*format_chars != ']')
2759 /* The end of the format string was reached. */
2760 status_warning (status, "no closing `]' for `%%[' format");
2764 wanted_type_name = 0;
2765 if (fki->flags & FMT_FLAG_ARG_CONVERT)
2767 wanted_type = (fci->types[length_chars_val].type
2768 ? *fci->types[length_chars_val].type : 0);
2769 wanted_type_name = fci->types[length_chars_val].name;
2770 wanted_type_std = fci->types[length_chars_val].std;
2771 if (wanted_type == 0)
2773 status_warning (status, "use of `%s' length modifier with `%c' type character",
2774 length_chars, format_char);
2775 /* Heuristic: skip one argument when an invalid length/type
2776 combination is encountered. */
2780 status_warning (status, "too few arguments for format");
2783 params = TREE_CHAIN (params);
2787 /* Warn if non-standard, provided it is more non-standard
2788 than the length and type characters that may already
2789 have been warned for. */
2790 && wanted_type_std > length_chars_std
2791 && wanted_type_std > fci->std)
2793 if (wanted_type_std == STD_EXT)
2794 status_warning (status, "ISO C does not support the `%%%s%c' %s format",
2795 length_chars, format_char, fki->name);
2796 else if ((wanted_type_std == STD_C99 && !flag_isoc99)
2797 || (wanted_type_std == STD_C94 && !flag_isoc94))
2798 status_warning (status, "ISO C89 does not support the `%%%s%c' %s format",
2799 length_chars, format_char, fki->name);
2803 /* Finally. . .check type of argument against desired type! */
2804 if (info->first_arg_num == 0)
2806 if ((fci->pointer_count == 0 && wanted_type == void_type_node)
2809 if (main_arg_num != 0)
2812 status_warning (status, "operand number specified with suppressed assignment");
2814 status_warning (status, "operand number specified for format taking no argument");
2819 if (main_arg_num != 0)
2821 arg_num = main_arg_num;
2822 params = main_arg_params;
2827 if (has_operand_number > 0)
2829 status_warning (status, "missing $ operand number in format");
2833 has_operand_number = 0;
2836 status_warning (status, "too few arguments for format");
2840 cur_param = TREE_VALUE (params);
2841 params = TREE_CHAIN (params);
2842 main_wanted_type.wanted_type = wanted_type;
2843 main_wanted_type.wanted_type_name = wanted_type_name;
2844 main_wanted_type.pointer_count = fci->pointer_count + aflag;
2845 main_wanted_type.char_lenient_flag = 0;
2846 if (index (fci->flags2, 'c') != 0)
2847 main_wanted_type.char_lenient_flag = 1;
2848 main_wanted_type.writing_in_flag = 0;
2849 if (index (fci->flags2, 'W') != 0)
2850 main_wanted_type.writing_in_flag = 1;
2851 main_wanted_type.name = NULL;
2852 main_wanted_type.param = cur_param;
2853 main_wanted_type.arg_num = arg_num;
2854 main_wanted_type.next = NULL;
2855 if (last_wanted_type != 0)
2856 last_wanted_type->next = &main_wanted_type;
2857 if (first_wanted_type == 0)
2858 first_wanted_type = &main_wanted_type;
2859 last_wanted_type = &main_wanted_type;
2862 if (first_wanted_type != 0)
2863 check_format_types (status, first_wanted_type);
2869 /* Check the argument types from a single format conversion (possibly
2870 including width and precision arguments). */
2872 check_format_types (status, types)
2874 format_wanted_type *types;
2876 for (; types != 0; types = types->next)
2886 cur_param = types->param;
2887 cur_type = TREE_TYPE (cur_param);
2888 if (TREE_CODE (cur_type) == ERROR_MARK)
2891 wanted_type = types->wanted_type;
2892 arg_num = types->arg_num;
2894 /* The following should not occur here. */
2895 if (wanted_type == 0)
2897 if (wanted_type == void_type_node && types->pointer_count == 0)
2900 if (types->pointer_count == 0)
2902 promoted_type = simple_type_promotes_to (wanted_type);
2903 if (promoted_type != NULL_TREE)
2904 wanted_type = promoted_type;
2907 STRIP_NOPS (cur_param);
2909 /* Check the types of any additional pointer arguments
2910 that precede the "real" argument. */
2911 for (i = 0; i < types->pointer_count; ++i)
2913 if (TREE_CODE (cur_type) == POINTER_TYPE)
2915 cur_type = TREE_TYPE (cur_type);
2916 if (TREE_CODE (cur_type) == ERROR_MARK)
2919 if (cur_param != 0 && TREE_CODE (cur_param) == ADDR_EXPR)
2920 cur_param = TREE_OPERAND (cur_param, 0);
2924 /* See if this is an attempt to write into a const type with
2925 scanf or with printf "%n". Note: the writing in happens
2926 at the first indirection only, if for example
2927 void * const * is passed to scanf %p; passing
2928 const void ** is simply passing an incompatible type. */
2929 if (types->writing_in_flag
2931 && (TYPE_READONLY (cur_type)
2933 && (TREE_CODE_CLASS (TREE_CODE (cur_param)) == 'c'
2934 || (DECL_P (cur_param)
2935 && TREE_READONLY (cur_param))))))
2936 status_warning (status, "writing into constant object (arg %d)", arg_num);
2938 /* If there are extra type qualifiers beyond the first
2939 indirection, then this makes the types technically
2943 && (TYPE_READONLY (cur_type)
2944 || TYPE_VOLATILE (cur_type)
2945 || TYPE_RESTRICT (cur_type)))
2946 status_warning (status, "extra type qualifiers in format argument (arg %d)",
2952 if (types->pointer_count == 1)
2953 status_warning (status, "format argument is not a pointer (arg %d)", arg_num);
2955 status_warning (status, "format argument is not a pointer to a pointer (arg %d)", arg_num);
2960 if (i < types->pointer_count)
2963 orig_cur_type = cur_type;
2964 cur_type = TYPE_MAIN_VARIANT (cur_type);
2966 /* Check whether the argument type is a character type. This leniency
2967 only applies to certain formats, flagged with 'c'.
2969 if (types->char_lenient_flag)
2970 char_type_flag = (cur_type == char_type_node
2971 || cur_type == signed_char_type_node
2972 || cur_type == unsigned_char_type_node);
2974 /* Check the type of the "real" argument, if there's a type we want. */
2975 if (wanted_type == cur_type)
2977 /* If we want `void *', allow any pointer type.
2978 (Anything else would already have got a warning.)
2979 With -pedantic, only allow pointers to void and to character
2981 if (wanted_type == void_type_node
2982 && (!pedantic || (i == 1 && char_type_flag)))
2984 /* Don't warn about differences merely in signedness, unless
2985 -pedantic. With -pedantic, warn if the type is a pointer
2986 target and not a character type, and for character types at
2987 a second level of indirection. */
2988 if (TREE_CODE (wanted_type) == INTEGER_TYPE
2989 && TREE_CODE (cur_type) == INTEGER_TYPE
2990 && (! pedantic || i == 0 || (i == 1 && char_type_flag))
2991 && (TREE_UNSIGNED (wanted_type)
2992 ? wanted_type == unsigned_type (cur_type)
2993 : wanted_type == signed_type (cur_type)))
2995 /* Likewise, "signed char", "unsigned char" and "char" are
2996 equivalent but the above test won't consider them equivalent. */
2997 if (wanted_type == char_type_node
2998 && (! pedantic || i < 2)
3001 /* Now we have a type mismatch. */
3003 register const char *this;
3004 register const char *that;
3006 this = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (wanted_type)));
3008 if (TYPE_NAME (orig_cur_type) != 0
3009 && TREE_CODE (orig_cur_type) != INTEGER_TYPE
3010 && !(TREE_CODE (orig_cur_type) == POINTER_TYPE
3011 && TREE_CODE (TREE_TYPE (orig_cur_type)) == INTEGER_TYPE))
3013 if (TREE_CODE (TYPE_NAME (orig_cur_type)) == TYPE_DECL
3014 && DECL_NAME (TYPE_NAME (orig_cur_type)) != 0)
3015 that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (orig_cur_type)));
3017 that = IDENTIFIER_POINTER (TYPE_NAME (orig_cur_type));
3020 /* A nameless type can't possibly match what the format wants.
3021 So there will be a warning for it.
3022 Make up a string to describe vaguely what it is. */
3025 if (TREE_CODE (orig_cur_type) == POINTER_TYPE)
3028 that = "different type";
3031 /* Make the warning better in case of mismatch of int vs long. */
3032 if (TREE_CODE (orig_cur_type) == INTEGER_TYPE
3033 && TREE_CODE (wanted_type) == INTEGER_TYPE
3034 && TYPE_PRECISION (orig_cur_type) == TYPE_PRECISION (wanted_type)
3035 && TYPE_NAME (orig_cur_type) != 0
3036 && TREE_CODE (TYPE_NAME (orig_cur_type)) == TYPE_DECL)
3037 that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (orig_cur_type)));
3039 if (strcmp (this, that) != 0)
3041 /* There may be a better name for the format, e.g. size_t,
3042 but we should allow for programs with a perverse typedef
3043 making size_t something other than what the compiler
3045 if (types->wanted_type_name != 0
3046 && strcmp (types->wanted_type_name, that) != 0)
3047 this = types->wanted_type_name;
3048 if (types->name != 0)
3049 status_warning (status, "%s is not type %s (arg %d)", types->name, this,
3052 status_warning (status, "%s format, %s arg (arg %d)", this, that, arg_num);
3058 /* Print a warning if a constant expression had overflow in folding.
3059 Invoke this function on every expression that the language
3060 requires to be a constant expression.
3061 Note the ANSI C standard says it is erroneous for a
3062 constant expression to overflow. */
3065 constant_expression_warning (value)
3068 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
3069 || TREE_CODE (value) == COMPLEX_CST)
3070 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
3071 pedwarn ("overflow in constant expression");
3074 /* Print a warning if an expression had overflow in folding.
3075 Invoke this function on every expression that
3076 (1) appears in the source code, and
3077 (2) might be a constant expression that overflowed, and
3078 (3) is not already checked by convert_and_check;
3079 however, do not invoke this function on operands of explicit casts. */
3082 overflow_warning (value)
3085 if ((TREE_CODE (value) == INTEGER_CST
3086 || (TREE_CODE (value) == COMPLEX_CST
3087 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
3088 && TREE_OVERFLOW (value))
3090 TREE_OVERFLOW (value) = 0;
3091 if (skip_evaluation == 0)
3092 warning ("integer overflow in expression");
3094 else if ((TREE_CODE (value) == REAL_CST
3095 || (TREE_CODE (value) == COMPLEX_CST
3096 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
3097 && TREE_OVERFLOW (value))
3099 TREE_OVERFLOW (value) = 0;
3100 if (skip_evaluation == 0)
3101 warning ("floating point overflow in expression");
3105 /* Print a warning if a large constant is truncated to unsigned,
3106 or if -Wconversion is used and a constant < 0 is converted to unsigned.
3107 Invoke this function on every expression that might be implicitly
3108 converted to an unsigned type. */
3111 unsigned_conversion_warning (result, operand)
3112 tree result, operand;
3114 if (TREE_CODE (operand) == INTEGER_CST
3115 && TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
3116 && TREE_UNSIGNED (TREE_TYPE (result))
3117 && skip_evaluation == 0
3118 && !int_fits_type_p (operand, TREE_TYPE (result)))
3120 if (!int_fits_type_p (operand, signed_type (TREE_TYPE (result))))
3121 /* This detects cases like converting -129 or 256 to unsigned char. */
3122 warning ("large integer implicitly truncated to unsigned type");
3123 else if (warn_conversion)
3124 warning ("negative integer implicitly converted to unsigned type");
3128 /* Convert EXPR to TYPE, warning about conversion problems with constants.
3129 Invoke this function on every expression that is converted implicitly,
3130 i.e. because of language rules and not because of an explicit cast. */
3133 convert_and_check (type, expr)
3136 tree t = convert (type, expr);
3137 if (TREE_CODE (t) == INTEGER_CST)
3139 if (TREE_OVERFLOW (t))
3141 TREE_OVERFLOW (t) = 0;
3143 /* Do not diagnose overflow in a constant expression merely
3144 because a conversion overflowed. */
3145 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
3147 /* No warning for converting 0x80000000 to int. */
3148 if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
3149 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
3150 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
3151 /* If EXPR fits in the unsigned version of TYPE,
3152 don't warn unless pedantic. */
3154 || TREE_UNSIGNED (type)
3155 || ! int_fits_type_p (expr, unsigned_type (type)))
3156 && skip_evaluation == 0)
3157 warning ("overflow in implicit constant conversion");
3160 unsigned_conversion_warning (t, expr);
3166 c_expand_expr_stmt (expr)
3169 /* Do default conversion if safe and possibly important,
3170 in case within ({...}). */
3171 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr))
3172 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
3173 expr = default_conversion (expr);
3175 if (TREE_TYPE (expr) != error_mark_node
3176 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
3177 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
3178 error ("expression statement has incomplete type");
3180 last_expr_type = TREE_TYPE (expr);
3181 add_stmt (build_stmt (EXPR_STMT, expr));
3184 /* Validate the expression after `case' and apply default promotions. */
3187 check_case_value (value)
3190 if (value == NULL_TREE)
3193 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3194 STRIP_TYPE_NOPS (value);
3195 /* In C++, the following is allowed:
3198 switch (...) { case i: ... }
3200 So, we try to reduce the VALUE to a constant that way. */
3201 if (c_language == clk_cplusplus)
3203 value = decl_constant_value (value);
3204 STRIP_TYPE_NOPS (value);
3205 value = fold (value);
3208 if (TREE_CODE (value) != INTEGER_CST
3209 && value != error_mark_node)
3211 error ("case label does not reduce to an integer constant");
3212 value = error_mark_node;
3215 /* Promote char or short to int. */
3216 value = default_conversion (value);
3218 constant_expression_warning (value);
3223 /* Return an integer type with BITS bits of precision,
3224 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
3227 type_for_size (bits, unsignedp)
3231 if (bits == TYPE_PRECISION (integer_type_node))
3232 return unsignedp ? unsigned_type_node : integer_type_node;
3234 if (bits == TYPE_PRECISION (signed_char_type_node))
3235 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3237 if (bits == TYPE_PRECISION (short_integer_type_node))
3238 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3240 if (bits == TYPE_PRECISION (long_integer_type_node))
3241 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3243 if (bits == TYPE_PRECISION (long_long_integer_type_node))
3244 return (unsignedp ? long_long_unsigned_type_node
3245 : long_long_integer_type_node);
3247 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
3248 return (unsignedp ? widest_unsigned_literal_type_node
3249 : widest_integer_literal_type_node);
3251 if (bits <= TYPE_PRECISION (intQI_type_node))
3252 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3254 if (bits <= TYPE_PRECISION (intHI_type_node))
3255 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3257 if (bits <= TYPE_PRECISION (intSI_type_node))
3258 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3260 if (bits <= TYPE_PRECISION (intDI_type_node))
3261 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3266 /* Return a data type that has machine mode MODE.
3267 If the mode is an integer,
3268 then UNSIGNEDP selects between signed and unsigned types. */
3271 type_for_mode (mode, unsignedp)
3272 enum machine_mode mode;
3275 if (mode == TYPE_MODE (integer_type_node))
3276 return unsignedp ? unsigned_type_node : integer_type_node;
3278 if (mode == TYPE_MODE (signed_char_type_node))
3279 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3281 if (mode == TYPE_MODE (short_integer_type_node))
3282 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3284 if (mode == TYPE_MODE (long_integer_type_node))
3285 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3287 if (mode == TYPE_MODE (long_long_integer_type_node))
3288 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
3290 if (mode == TYPE_MODE (widest_integer_literal_type_node))
3291 return unsignedp ? widest_unsigned_literal_type_node
3292 : widest_integer_literal_type_node;
3294 if (mode == TYPE_MODE (intQI_type_node))
3295 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3297 if (mode == TYPE_MODE (intHI_type_node))
3298 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3300 if (mode == TYPE_MODE (intSI_type_node))
3301 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3303 if (mode == TYPE_MODE (intDI_type_node))
3304 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3306 #if HOST_BITS_PER_WIDE_INT >= 64
3307 if (mode == TYPE_MODE (intTI_type_node))
3308 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3311 if (mode == TYPE_MODE (float_type_node))
3312 return float_type_node;
3314 if (mode == TYPE_MODE (double_type_node))
3315 return double_type_node;
3317 if (mode == TYPE_MODE (long_double_type_node))
3318 return long_double_type_node;
3320 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
3321 return build_pointer_type (char_type_node);
3323 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
3324 return build_pointer_type (integer_type_node);
3326 #ifdef VECTOR_MODE_SUPPORTED_P
3327 if (mode == TYPE_MODE (V4SF_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3328 return V4SF_type_node;
3329 if (mode == TYPE_MODE (V4SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3330 return V4SI_type_node;
3331 if (mode == TYPE_MODE (V2SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3332 return V2SI_type_node;
3333 if (mode == TYPE_MODE (V4HI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3334 return V4HI_type_node;
3335 if (mode == TYPE_MODE (V8QI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3336 return V8QI_type_node;
3342 /* Return an unsigned type the same as TYPE in other respects. */
3344 unsigned_type (type)
3347 tree type1 = TYPE_MAIN_VARIANT (type);
3348 if (type1 == signed_char_type_node || type1 == char_type_node)
3349 return unsigned_char_type_node;
3350 if (type1 == integer_type_node)
3351 return unsigned_type_node;
3352 if (type1 == short_integer_type_node)
3353 return short_unsigned_type_node;
3354 if (type1 == long_integer_type_node)
3355 return long_unsigned_type_node;
3356 if (type1 == long_long_integer_type_node)
3357 return long_long_unsigned_type_node;
3358 if (type1 == widest_integer_literal_type_node)
3359 return widest_unsigned_literal_type_node;
3360 #if HOST_BITS_PER_WIDE_INT >= 64
3361 if (type1 == intTI_type_node)
3362 return unsigned_intTI_type_node;
3364 if (type1 == intDI_type_node)
3365 return unsigned_intDI_type_node;
3366 if (type1 == intSI_type_node)
3367 return unsigned_intSI_type_node;
3368 if (type1 == intHI_type_node)
3369 return unsigned_intHI_type_node;
3370 if (type1 == intQI_type_node)
3371 return unsigned_intQI_type_node;
3373 return signed_or_unsigned_type (1, type);
3376 /* Return a signed type the same as TYPE in other respects. */
3382 tree type1 = TYPE_MAIN_VARIANT (type);
3383 if (type1 == unsigned_char_type_node || type1 == char_type_node)
3384 return signed_char_type_node;
3385 if (type1 == unsigned_type_node)
3386 return integer_type_node;
3387 if (type1 == short_unsigned_type_node)
3388 return short_integer_type_node;
3389 if (type1 == long_unsigned_type_node)
3390 return long_integer_type_node;
3391 if (type1 == long_long_unsigned_type_node)
3392 return long_long_integer_type_node;
3393 if (type1 == widest_unsigned_literal_type_node)
3394 return widest_integer_literal_type_node;
3395 #if HOST_BITS_PER_WIDE_INT >= 64
3396 if (type1 == unsigned_intTI_type_node)
3397 return intTI_type_node;
3399 if (type1 == unsigned_intDI_type_node)
3400 return intDI_type_node;
3401 if (type1 == unsigned_intSI_type_node)
3402 return intSI_type_node;
3403 if (type1 == unsigned_intHI_type_node)
3404 return intHI_type_node;
3405 if (type1 == unsigned_intQI_type_node)
3406 return intQI_type_node;
3408 return signed_or_unsigned_type (0, type);
3411 /* Return a type the same as TYPE except unsigned or
3412 signed according to UNSIGNEDP. */
3415 signed_or_unsigned_type (unsignedp, type)
3419 if (! INTEGRAL_TYPE_P (type)
3420 || TREE_UNSIGNED (type) == unsignedp)
3423 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
3424 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3425 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
3426 return unsignedp ? unsigned_type_node : integer_type_node;
3427 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
3428 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3429 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
3430 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3431 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
3432 return (unsignedp ? long_long_unsigned_type_node
3433 : long_long_integer_type_node);
3434 if (TYPE_PRECISION (type) == TYPE_PRECISION (widest_integer_literal_type_node))
3435 return (unsignedp ? widest_unsigned_literal_type_node
3436 : widest_integer_literal_type_node);
3440 /* Return the minimum number of bits needed to represent VALUE in a
3441 signed or unsigned type, UNSIGNEDP says which. */
3444 min_precision (value, unsignedp)
3450 /* If the value is negative, compute its negative minus 1. The latter
3451 adjustment is because the absolute value of the largest negative value
3452 is one larger than the largest positive value. This is equivalent to
3453 a bit-wise negation, so use that operation instead. */
3455 if (tree_int_cst_sgn (value) < 0)
3456 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
3458 /* Return the number of bits needed, taking into account the fact
3459 that we need one more bit for a signed than unsigned type. */
3461 if (integer_zerop (value))
3464 log = tree_floor_log2 (value);
3466 return log + 1 + ! unsignedp;
3469 /* Print an error message for invalid operands to arith operation CODE.
3470 NOP_EXPR is used as a special case (see truthvalue_conversion). */
3473 binary_op_error (code)
3474 enum tree_code code;
3476 register const char *opname;
3481 error ("invalid truth-value expression");
3485 opname = "+"; break;
3487 opname = "-"; break;
3489 opname = "*"; break;
3491 opname = "max"; break;
3493 opname = "min"; break;
3495 opname = "=="; break;
3497 opname = "!="; break;
3499 opname = "<="; break;
3501 opname = ">="; break;
3503 opname = "<"; break;
3505 opname = ">"; break;
3507 opname = "<<"; break;
3509 opname = ">>"; break;
3510 case TRUNC_MOD_EXPR:
3511 case FLOOR_MOD_EXPR:
3512 opname = "%"; break;
3513 case TRUNC_DIV_EXPR:
3514 case FLOOR_DIV_EXPR:
3515 opname = "/"; break;
3517 opname = "&"; break;
3519 opname = "|"; break;
3520 case TRUTH_ANDIF_EXPR:
3521 opname = "&&"; break;
3522 case TRUTH_ORIF_EXPR:
3523 opname = "||"; break;
3525 opname = "^"; break;
3528 opname = "rotate"; break;
3530 opname = "unknown"; break;
3532 error ("invalid operands to binary %s", opname);
3535 /* Subroutine of build_binary_op, used for comparison operations.
3536 See if the operands have both been converted from subword integer types
3537 and, if so, perhaps change them both back to their original type.
3538 This function is also responsible for converting the two operands
3539 to the proper common type for comparison.
3541 The arguments of this function are all pointers to local variables
3542 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
3543 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
3545 If this function returns nonzero, it means that the comparison has
3546 a constant value. What this function returns is an expression for
3550 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
3551 tree *op0_ptr, *op1_ptr;
3553 enum tree_code *rescode_ptr;
3556 tree op0 = *op0_ptr;
3557 tree op1 = *op1_ptr;
3558 int unsignedp0, unsignedp1;
3560 tree primop0, primop1;
3561 enum tree_code code = *rescode_ptr;
3563 /* Throw away any conversions to wider types
3564 already present in the operands. */
3566 primop0 = get_narrower (op0, &unsignedp0);
3567 primop1 = get_narrower (op1, &unsignedp1);
3569 /* Handle the case that OP0 does not *contain* a conversion
3570 but it *requires* conversion to FINAL_TYPE. */
3572 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
3573 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
3574 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
3575 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
3577 /* If one of the operands must be floated, we cannot optimize. */
3578 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
3579 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
3581 /* If first arg is constant, swap the args (changing operation
3582 so value is preserved), for canonicalization. Don't do this if
3583 the second arg is 0. */
3585 if (TREE_CONSTANT (primop0)
3586 && ! integer_zerop (primop1) && ! real_zerop (primop1))
3588 register tree tem = primop0;
3589 register int temi = unsignedp0;
3597 unsignedp0 = unsignedp1;
3620 *rescode_ptr = code;
3623 /* If comparing an integer against a constant more bits wide,
3624 maybe we can deduce a value of 1 or 0 independent of the data.
3625 Or else truncate the constant now
3626 rather than extend the variable at run time.
3628 This is only interesting if the constant is the wider arg.
3629 Also, it is not safe if the constant is unsigned and the
3630 variable arg is signed, since in this case the variable
3631 would be sign-extended and then regarded as unsigned.
3632 Our technique fails in this case because the lowest/highest
3633 possible unsigned results don't follow naturally from the
3634 lowest/highest possible values of the variable operand.
3635 For just EQ_EXPR and NE_EXPR there is another technique that
3636 could be used: see if the constant can be faithfully represented
3637 in the other operand's type, by truncating it and reextending it
3638 and see if that preserves the constant's value. */
3640 if (!real1 && !real2
3641 && TREE_CODE (primop1) == INTEGER_CST
3642 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
3644 int min_gt, max_gt, min_lt, max_lt;
3645 tree maxval, minval;
3646 /* 1 if comparison is nominally unsigned. */
3647 int unsignedp = TREE_UNSIGNED (*restype_ptr);
3650 type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
3652 /* If TYPE is an enumeration, then we need to get its min/max
3653 values from it's underlying integral type, not the enumerated
3655 if (TREE_CODE (type) == ENUMERAL_TYPE)
3656 type = type_for_size (TYPE_PRECISION (type), unsignedp0);
3658 maxval = TYPE_MAX_VALUE (type);
3659 minval = TYPE_MIN_VALUE (type);
3661 if (unsignedp && !unsignedp0)
3662 *restype_ptr = signed_type (*restype_ptr);
3664 if (TREE_TYPE (primop1) != *restype_ptr)
3665 primop1 = convert (*restype_ptr, primop1);
3666 if (type != *restype_ptr)
3668 minval = convert (*restype_ptr, minval);
3669 maxval = convert (*restype_ptr, maxval);
3672 if (unsignedp && unsignedp0)
3674 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
3675 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
3676 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
3677 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
3681 min_gt = INT_CST_LT (primop1, minval);
3682 max_gt = INT_CST_LT (primop1, maxval);
3683 min_lt = INT_CST_LT (minval, primop1);
3684 max_lt = INT_CST_LT (maxval, primop1);
3688 /* This used to be a switch, but Genix compiler can't handle that. */
3689 if (code == NE_EXPR)
3691 if (max_lt || min_gt)
3692 val = boolean_true_node;
3694 else if (code == EQ_EXPR)
3696 if (max_lt || min_gt)
3697 val = boolean_false_node;
3699 else if (code == LT_EXPR)
3702 val = boolean_true_node;
3704 val = boolean_false_node;
3706 else if (code == GT_EXPR)
3709 val = boolean_true_node;
3711 val = boolean_false_node;
3713 else if (code == LE_EXPR)
3716 val = boolean_true_node;
3718 val = boolean_false_node;
3720 else if (code == GE_EXPR)
3723 val = boolean_true_node;
3725 val = boolean_false_node;
3728 /* If primop0 was sign-extended and unsigned comparison specd,
3729 we did a signed comparison above using the signed type bounds.
3730 But the comparison we output must be unsigned.
3732 Also, for inequalities, VAL is no good; but if the signed
3733 comparison had *any* fixed result, it follows that the
3734 unsigned comparison just tests the sign in reverse
3735 (positive values are LE, negative ones GE).
3736 So we can generate an unsigned comparison
3737 against an extreme value of the signed type. */
3739 if (unsignedp && !unsignedp0)
3746 primop1 = TYPE_MIN_VALUE (type);
3752 primop1 = TYPE_MAX_VALUE (type);
3759 type = unsigned_type (type);
3762 if (!max_gt && !unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
3764 /* This is the case of (char)x >?< 0x80, which people used to use
3765 expecting old C compilers to change the 0x80 into -0x80. */
3766 if (val == boolean_false_node)
3767 warning ("comparison is always false due to limited range of data type");
3768 if (val == boolean_true_node)
3769 warning ("comparison is always true due to limited range of data type");
3772 if (!min_lt && unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
3774 /* This is the case of (unsigned char)x >?< -1 or < 0. */
3775 if (val == boolean_false_node)
3776 warning ("comparison is always false due to limited range of data type");
3777 if (val == boolean_true_node)
3778 warning ("comparison is always true due to limited range of data type");
3783 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3784 if (TREE_SIDE_EFFECTS (primop0))
3785 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
3789 /* Value is not predetermined, but do the comparison
3790 in the type of the operand that is not constant.
3791 TYPE is already properly set. */
3793 else if (real1 && real2
3794 && (TYPE_PRECISION (TREE_TYPE (primop0))
3795 == TYPE_PRECISION (TREE_TYPE (primop1))))
3796 type = TREE_TYPE (primop0);
3798 /* If args' natural types are both narrower than nominal type
3799 and both extend in the same manner, compare them
3800 in the type of the wider arg.
3801 Otherwise must actually extend both to the nominal
3802 common type lest different ways of extending
3804 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
3806 else if (unsignedp0 == unsignedp1 && real1 == real2
3807 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
3808 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
3810 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3811 type = signed_or_unsigned_type (unsignedp0
3812 || TREE_UNSIGNED (*restype_ptr),
3814 /* Make sure shorter operand is extended the right way
3815 to match the longer operand. */
3816 primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
3818 primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
3823 /* Here we must do the comparison on the nominal type
3824 using the args exactly as we received them. */
3825 type = *restype_ptr;
3829 if (!real1 && !real2 && integer_zerop (primop1)
3830 && TREE_UNSIGNED (*restype_ptr))
3836 /* All unsigned values are >= 0, so we warn if extra warnings
3837 are requested. However, if OP0 is a constant that is
3838 >= 0, the signedness of the comparison isn't an issue,
3839 so suppress the warning. */
3840 if (extra_warnings && !in_system_header
3841 && ! (TREE_CODE (primop0) == INTEGER_CST
3842 && ! TREE_OVERFLOW (convert (signed_type (type),
3844 warning ("comparison of unsigned expression >= 0 is always true");
3845 value = boolean_true_node;
3849 if (extra_warnings && !in_system_header
3850 && ! (TREE_CODE (primop0) == INTEGER_CST
3851 && ! TREE_OVERFLOW (convert (signed_type (type),
3853 warning ("comparison of unsigned expression < 0 is always false");
3854 value = boolean_false_node;
3863 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3864 if (TREE_SIDE_EFFECTS (primop0))
3865 return build (COMPOUND_EXPR, TREE_TYPE (value),
3872 *op0_ptr = convert (type, primop0);
3873 *op1_ptr = convert (type, primop1);
3875 *restype_ptr = boolean_type_node;
3880 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
3881 or validate its data type for an `if' or `while' statement or ?..: exp.
3883 This preparation consists of taking the ordinary
3884 representation of an expression expr and producing a valid tree
3885 boolean expression describing whether expr is nonzero. We could
3886 simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1),
3887 but we optimize comparisons, &&, ||, and !.
3889 The resulting type should always be `boolean_type_node'. */
3892 truthvalue_conversion (expr)
3895 if (TREE_CODE (expr) == ERROR_MARK)
3898 #if 0 /* This appears to be wrong for C++. */
3899 /* These really should return error_mark_node after 2.4 is stable.
3900 But not all callers handle ERROR_MARK properly. */
3901 switch (TREE_CODE (TREE_TYPE (expr)))
3904 error ("struct type value used where scalar is required");
3905 return boolean_false_node;
3908 error ("union type value used where scalar is required");
3909 return boolean_false_node;
3912 error ("array type value used where scalar is required");
3913 return boolean_false_node;
3920 switch (TREE_CODE (expr))
3923 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
3924 case TRUTH_ANDIF_EXPR:
3925 case TRUTH_ORIF_EXPR:
3926 case TRUTH_AND_EXPR:
3928 case TRUTH_XOR_EXPR:
3929 case TRUTH_NOT_EXPR:
3930 TREE_TYPE (expr) = boolean_type_node;
3937 return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
3940 return real_zerop (expr) ? boolean_false_node : boolean_true_node;
3943 /* If we are taking the address of a external decl, it might be zero
3944 if it is weak, so we cannot optimize. */
3945 if (DECL_P (TREE_OPERAND (expr, 0))
3946 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
3949 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
3950 return build (COMPOUND_EXPR, boolean_type_node,
3951 TREE_OPERAND (expr, 0), boolean_true_node);
3953 return boolean_true_node;
3956 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3957 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3958 truthvalue_conversion (TREE_OPERAND (expr, 0)),
3959 truthvalue_conversion (TREE_OPERAND (expr, 1)),
3966 /* These don't change whether an object is non-zero or zero. */
3967 return truthvalue_conversion (TREE_OPERAND (expr, 0));
3971 /* These don't change whether an object is zero or non-zero, but
3972 we can't ignore them if their second arg has side-effects. */
3973 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3974 return build (COMPOUND_EXPR, boolean_type_node, TREE_OPERAND (expr, 1),
3975 truthvalue_conversion (TREE_OPERAND (expr, 0)));
3977 return truthvalue_conversion (TREE_OPERAND (expr, 0));
3980 /* Distribute the conversion into the arms of a COND_EXPR. */
3981 return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
3982 truthvalue_conversion (TREE_OPERAND (expr, 1)),
3983 truthvalue_conversion (TREE_OPERAND (expr, 2))));
3986 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
3987 since that affects how `default_conversion' will behave. */
3988 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
3989 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
3991 /* fall through... */
3993 /* If this is widening the argument, we can ignore it. */
3994 if (TYPE_PRECISION (TREE_TYPE (expr))
3995 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
3996 return truthvalue_conversion (TREE_OPERAND (expr, 0));
4000 /* With IEEE arithmetic, x - x may not equal 0, so we can't optimize
4002 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
4003 && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE)
4005 /* fall through... */
4007 /* This and MINUS_EXPR can be changed into a comparison of the
4009 if (TREE_TYPE (TREE_OPERAND (expr, 0))
4010 == TREE_TYPE (TREE_OPERAND (expr, 1)))
4011 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
4012 TREE_OPERAND (expr, 1), 1);
4013 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
4014 fold (build1 (NOP_EXPR,
4015 TREE_TYPE (TREE_OPERAND (expr, 0)),
4016 TREE_OPERAND (expr, 1))), 1);
4019 if (integer_onep (TREE_OPERAND (expr, 1))
4020 && TREE_TYPE (expr) != boolean_type_node)
4021 /* Using convert here would cause infinite recursion. */
4022 return build1 (NOP_EXPR, boolean_type_node, expr);
4026 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
4027 warning ("suggest parentheses around assignment used as truth value");
4034 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
4036 tree tem = save_expr (expr);
4037 return (build_binary_op
4038 ((TREE_SIDE_EFFECTS (expr)
4039 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
4040 truthvalue_conversion (build_unary_op (REALPART_EXPR, tem, 0)),
4041 truthvalue_conversion (build_unary_op (IMAGPART_EXPR, tem, 0)),
4045 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
4049 /* Read the rest of a #-directive from input stream FINPUT.
4050 In normal use, the directive name and the white space after it
4051 have already been read, so they won't be included in the result.
4052 We allow for the fact that the directive line may contain
4053 a newline embedded within a character or string literal which forms
4054 a part of the directive.
4056 The value is a string in a reusable buffer. It remains valid
4057 only until the next time this function is called.
4059 The terminating character ('\n' or EOF) is left in FINPUT for the
4060 caller to re-read. */
4063 get_directive_line (finput)
4064 register FILE *finput;
4066 static char *directive_buffer = NULL;
4067 static unsigned buffer_length = 0;
4069 register char *buffer_limit;
4070 register int looking_for = 0;
4071 register int char_escaped = 0;
4073 if (buffer_length == 0)
4075 directive_buffer = (char *)xmalloc (128);
4076 buffer_length = 128;
4079 buffer_limit = &directive_buffer[buffer_length];
4081 for (p = directive_buffer; ; )
4085 /* Make buffer bigger if it is full. */
4086 if (p >= buffer_limit)
4088 register unsigned bytes_used = (p - directive_buffer);
4092 = (char *)xrealloc (directive_buffer, buffer_length);
4093 p = &directive_buffer[bytes_used];
4094 buffer_limit = &directive_buffer[buffer_length];
4099 /* Discard initial whitespace. */
4100 if ((c == ' ' || c == '\t') && p == directive_buffer)
4103 /* Detect the end of the directive. */
4104 if (looking_for == 0
4105 && (c == '\n' || c == EOF))
4114 return directive_buffer;
4116 /* Handle string and character constant syntax. */
4119 if (looking_for == c && !char_escaped)
4120 looking_for = 0; /* Found terminator... stop looking. */
4123 if (c == '\'' || c == '"')
4124 looking_for = c; /* Don't stop buffering until we see another
4125 one of these (or an EOF). */
4127 /* Handle backslash. */
4128 char_escaped = (c == '\\' && ! char_escaped);
4131 #endif /* USE_CPPLIB */
4133 /* Make a variant type in the proper way for C/C++, propagating qualifiers
4134 down to the element type of an array. */
4137 c_build_qualified_type (type, type_quals)
4141 /* A restrict-qualified pointer type must be a pointer to object or
4142 incomplete type. Note that the use of POINTER_TYPE_P also allows
4143 REFERENCE_TYPEs, which is appropriate for C++. Unfortunately,
4144 the C++ front-end also use POINTER_TYPE for pointer-to-member
4145 values, so even though it should be illegal to use `restrict'
4146 with such an entity we don't flag that here. Thus, special case
4147 code for that case is required in the C++ front-end. */
4148 if ((type_quals & TYPE_QUAL_RESTRICT)
4149 && (!POINTER_TYPE_P (type)
4150 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
4152 error ("invalid use of `restrict'");
4153 type_quals &= ~TYPE_QUAL_RESTRICT;
4156 if (TREE_CODE (type) == ARRAY_TYPE)
4157 return build_array_type (c_build_qualified_type (TREE_TYPE (type),
4159 TYPE_DOMAIN (type));
4160 return build_qualified_type (type, type_quals);
4163 /* Apply the TYPE_QUALS to the new DECL. */
4166 c_apply_type_quals_to_decl (type_quals, decl)
4170 if ((type_quals & TYPE_QUAL_CONST)
4171 || (TREE_TYPE (decl)
4172 && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE))
4173 TREE_READONLY (decl) = 1;
4174 if (type_quals & TYPE_QUAL_VOLATILE)
4176 TREE_SIDE_EFFECTS (decl) = 1;
4177 TREE_THIS_VOLATILE (decl) = 1;
4179 if (type_quals & TYPE_QUAL_RESTRICT)
4181 if (!TREE_TYPE (decl)
4182 || !POINTER_TYPE_P (TREE_TYPE (decl))
4183 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl))))
4184 error ("invalid use of `restrict'");
4185 else if (flag_strict_aliasing)
4187 /* No two restricted pointers can point at the same thing.
4188 However, a restricted pointer can point at the same thing
4189 as an unrestricted pointer, if that unrestricted pointer
4190 is based on the restricted pointer. So, we make the
4191 alias set for the restricted pointer a subset of the
4192 alias set for the type pointed to by the type of the
4195 HOST_WIDE_INT pointed_to_alias_set
4196 = get_alias_set (TREE_TYPE (TREE_TYPE (decl)));
4198 if (pointed_to_alias_set == 0)
4199 /* It's not legal to make a subset of alias set zero. */
4203 DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
4204 record_alias_subset (pointed_to_alias_set,
4205 DECL_POINTER_ALIAS_SET (decl));
4212 /* Return the typed-based alias set for T, which may be an expression
4213 or a type. Return -1 if we don't do anything special. */
4216 lang_get_alias_set (t)
4221 /* Permit type-punning when accessing a union, provided the access
4222 is directly through the union. For example, this code does not
4223 permit taking the address of a union member and then storing
4224 through it. Even the type-punning allowed here is a GCC
4225 extension, albeit a common and useful one; the C standard says
4226 that such accesses have implementation-defined behavior. */
4228 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
4229 u = TREE_OPERAND (u, 0))
4230 if (TREE_CODE (u) == COMPONENT_REF
4231 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
4234 /* If this is a char *, the ANSI C standard says it can alias
4235 anything. Note that all references need do this. */
4236 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'r'
4237 && TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE
4238 && TYPE_PRECISION (TREE_TYPE (t)) == TYPE_PRECISION (char_type_node))
4241 /* That's all the expressions we handle specially. */
4245 /* The C standard specifically allows aliasing between signed and
4246 unsigned variants of the same type. We treat the signed
4247 variant as canonical. */
4248 if (TREE_CODE (t) == INTEGER_TYPE && TREE_UNSIGNED (t))
4250 tree t1 = signed_type (t);
4252 /* t1 == t can happen for boolean nodes which are always unsigned. */
4254 return get_alias_set (t1);
4256 else if (POINTER_TYPE_P (t))
4260 /* Unfortunately, there is no canonical form of a pointer type.
4261 In particular, if we have `typedef int I', then `int *', and
4262 `I *' are different types. So, we have to pick a canonical
4263 representative. We do this below.
4265 Technically, this approach is actually more conservative that
4266 it needs to be. In particular, `const int *' and `int *'
4267 chould be in different alias sets, according to the C and C++
4268 standard, since their types are not the same, and so,
4269 technically, an `int **' and `const int **' cannot point at
4272 But, the standard is wrong. In particular, this code is
4277 const int* const* cipp = &ip;
4279 And, it doesn't make sense for that to be legal unless you
4280 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
4281 the pointed-to types. This issue has been reported to the
4283 t1 = TYPE_MAIN_VARIANT (TREE_TYPE (t));
4284 t1 = ((TREE_CODE (t) == POINTER_TYPE)
4285 ? build_pointer_type (t1) : build_reference_type (t1));
4287 return get_alias_set (t1);
4289 /* It's not yet safe to use alias sets for classes in C++ because
4290 the TYPE_FIELDs list for a class doesn't mention base classes. */
4291 else if (c_language == clk_cplusplus && AGGREGATE_TYPE_P (t))
4297 /* Build tree nodes and builtin functions common to both C and C++ language
4299 CPLUS_MODE is nonzero if we are called from the C++ frontend, we generate
4300 some stricter prototypes in that case.
4301 NO_BUILTINS and NO_NONANSI_BUILTINS contain the respective values of
4302 the language frontend flags flag_no_builtin and
4303 flag_no_nonansi_builtin. */
4306 c_common_nodes_and_builtins (cplus_mode, no_builtins, no_nonansi_builtins)
4307 int cplus_mode, no_builtins, no_nonansi_builtins;
4310 tree memcpy_ftype, memset_ftype, strlen_ftype;
4311 tree bzero_ftype, bcmp_ftype, puts_ftype, printf_ftype;
4312 tree endlink, int_endlink, double_endlink, unsigned_endlink;
4313 tree sizetype_endlink;
4314 tree ptr_ftype, ptr_ftype_unsigned;
4315 tree void_ftype_any, void_ftype_int, int_ftype_any, sizet_ftype_any;
4316 tree double_ftype_double, double_ftype_double_double;
4317 tree float_ftype_float, ldouble_ftype_ldouble;
4318 tree int_ftype_cptr_cptr_sizet;
4319 tree int_ftype_string_string, string_ftype_ptr_ptr;
4320 tree long_ftype_long;
4321 tree longlong_ftype_longlong;
4322 /* Either char* or void*. */
4323 tree traditional_ptr_type_node;
4324 /* Either const char* or const void*. */
4325 tree traditional_cptr_type_node;
4326 tree traditional_len_type_node;
4327 tree traditional_len_endlink;
4328 tree va_list_ref_type_node;
4329 tree va_list_arg_type_node;
4331 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
4332 va_list_type_node));
4334 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
4335 ptrdiff_type_node));
4337 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
4340 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
4342 va_list_arg_type_node = va_list_ref_type_node =
4343 build_pointer_type (TREE_TYPE (va_list_type_node));
4347 va_list_arg_type_node = va_list_type_node;
4348 va_list_ref_type_node = build_reference_type (va_list_type_node);
4351 endlink = void_list_node;
4352 int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
4353 double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
4354 unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
4356 ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
4357 ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
4358 sizetype_endlink = tree_cons (NULL_TREE, TYPE_DOMAIN (sizetype), endlink);
4359 /* We realloc here because sizetype could be int or unsigned. S'ok. */
4360 ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
4362 sizet_ftype_any = build_function_type (sizetype, NULL_TREE);
4363 int_ftype_any = build_function_type (integer_type_node, NULL_TREE);
4364 void_ftype_any = build_function_type (void_type_node, NULL_TREE);
4365 void_ftype = build_function_type (void_type_node, endlink);
4366 void_ftype_int = build_function_type (void_type_node, int_endlink);
4368 = build_function_type (void_type_node,
4369 tree_cons (NULL_TREE, ptr_type_node, endlink));
4372 = build_function_type (float_type_node,
4373 tree_cons (NULL_TREE, float_type_node, endlink));
4376 = build_function_type (double_type_node, double_endlink);
4378 ldouble_ftype_ldouble
4379 = build_function_type (long_double_type_node,
4380 tree_cons (NULL_TREE, long_double_type_node,
4383 double_ftype_double_double
4384 = build_function_type (double_type_node,
4385 tree_cons (NULL_TREE, double_type_node,
4389 = build_function_type (integer_type_node, int_endlink);
4392 = build_function_type (long_integer_type_node,
4393 tree_cons (NULL_TREE, long_integer_type_node,
4396 longlong_ftype_longlong
4397 = build_function_type (long_long_integer_type_node,
4398 tree_cons (NULL_TREE, long_long_integer_type_node,
4401 int_ftype_cptr_cptr_sizet
4402 = build_function_type (integer_type_node,
4403 tree_cons (NULL_TREE, const_ptr_type_node,
4404 tree_cons (NULL_TREE, const_ptr_type_node,
4405 tree_cons (NULL_TREE,
4409 void_zero_node = build_int_2 (0, 0);
4410 TREE_TYPE (void_zero_node) = void_type_node;
4412 /* Prototype for strcpy. */
4413 string_ftype_ptr_ptr
4414 = build_function_type (string_type_node,
4415 tree_cons (NULL_TREE, string_type_node,
4416 tree_cons (NULL_TREE,
4417 const_string_type_node,
4420 traditional_len_type_node = (flag_traditional && ! cplus_mode
4421 ? integer_type_node : sizetype);
4422 traditional_len_endlink = tree_cons (NULL_TREE, traditional_len_type_node,
4425 /* Prototype for strcmp. */
4426 int_ftype_string_string
4427 = build_function_type (integer_type_node,
4428 tree_cons (NULL_TREE, const_string_type_node,
4429 tree_cons (NULL_TREE,
4430 const_string_type_node,
4433 /* Prototype for strlen. */
4435 = build_function_type (traditional_len_type_node,
4436 tree_cons (NULL_TREE, const_string_type_node,
4439 traditional_ptr_type_node = (flag_traditional && ! cplus_mode
4440 ? string_type_node : ptr_type_node);
4441 traditional_cptr_type_node = (flag_traditional && ! cplus_mode
4442 ? const_string_type_node : const_ptr_type_node);
4444 /* Prototype for memcpy. */
4446 = build_function_type (traditional_ptr_type_node,
4447 tree_cons (NULL_TREE, ptr_type_node,
4448 tree_cons (NULL_TREE, const_ptr_type_node,
4449 sizetype_endlink)));
4451 /* Prototype for memset. */
4453 = build_function_type (traditional_ptr_type_node,
4454 tree_cons (NULL_TREE, ptr_type_node,
4455 tree_cons (NULL_TREE, integer_type_node,
4456 tree_cons (NULL_TREE,
4460 /* Prototype for bzero. */
4462 = build_function_type (void_type_node,
4463 tree_cons (NULL_TREE, traditional_ptr_type_node,
4464 traditional_len_endlink));
4466 /* Prototype for bcmp. */
4468 = build_function_type (integer_type_node,
4469 tree_cons (NULL_TREE, traditional_cptr_type_node,
4470 tree_cons (NULL_TREE,
4471 traditional_cptr_type_node,
4472 traditional_len_endlink)));
4474 /* Prototype for puts. */
4476 = build_function_type (integer_type_node,
4477 tree_cons (NULL_TREE, const_string_type_node,
4480 /* Prototype for printf. */
4482 = build_function_type (integer_type_node,
4483 tree_cons (NULL_TREE, const_string_type_node,
4486 builtin_function ("__builtin_constant_p", default_function_type,
4487 BUILT_IN_CONSTANT_P, BUILT_IN_NORMAL, NULL_PTR);
4489 builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
4490 BUILT_IN_RETURN_ADDRESS, BUILT_IN_NORMAL, NULL_PTR);
4492 builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
4493 BUILT_IN_FRAME_ADDRESS, BUILT_IN_NORMAL, NULL_PTR);
4495 builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
4496 BUILT_IN_ALLOCA, BUILT_IN_NORMAL, "alloca");
4497 builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS,
4498 BUILT_IN_NORMAL, NULL_PTR);
4499 /* Define alloca, ffs as builtins.
4500 Declare _exit just to mark it as volatile. */
4501 if (! no_builtins && ! no_nonansi_builtins)
4504 temp = builtin_function ("alloca", ptr_ftype_sizetype,
4505 BUILT_IN_ALLOCA, BUILT_IN_NORMAL, NULL_PTR);
4506 /* Suppress error if redefined as a non-function. */
4507 DECL_BUILT_IN_NONANSI (temp) = 1;
4509 temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS,
4510 BUILT_IN_NORMAL, NULL_PTR);
4511 /* Suppress error if redefined as a non-function. */
4512 DECL_BUILT_IN_NONANSI (temp) = 1;
4513 temp = builtin_function ("_exit", void_ftype_int,
4514 0, NOT_BUILT_IN, NULL_PTR);
4515 TREE_THIS_VOLATILE (temp) = 1;
4516 TREE_SIDE_EFFECTS (temp) = 1;
4517 /* Suppress error if redefined as a non-function. */
4518 DECL_BUILT_IN_NONANSI (temp) = 1;
4520 /* The system prototypes for these functions have many
4521 variations, so don't specify parameters to avoid conflicts.
4522 The expand_* functions check the argument types anyway. */
4523 temp = builtin_function ("bzero", void_ftype_any,
4524 BUILT_IN_BZERO, BUILT_IN_NORMAL, NULL_PTR);
4525 DECL_BUILT_IN_NONANSI (temp) = 1;
4526 temp = builtin_function ("bcmp", int_ftype_any,
4527 BUILT_IN_BCMP, BUILT_IN_NORMAL, NULL_PTR);
4528 DECL_BUILT_IN_NONANSI (temp) = 1;
4531 builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS,
4532 BUILT_IN_NORMAL, NULL_PTR);
4533 builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
4534 BUILT_IN_NORMAL, NULL_PTR);
4535 builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
4536 BUILT_IN_NORMAL, NULL_PTR);
4537 builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
4538 BUILT_IN_NORMAL, NULL_PTR);
4539 builtin_function ("__builtin_labs", long_ftype_long, BUILT_IN_LABS,
4540 BUILT_IN_NORMAL, NULL_PTR);
4541 builtin_function ("__builtin_llabs", longlong_ftype_longlong, BUILT_IN_LLABS,
4542 BUILT_IN_NORMAL, NULL_PTR);
4543 builtin_function ("__builtin_saveregs", ptr_ftype, BUILT_IN_SAVEREGS,
4544 BUILT_IN_NORMAL, NULL_PTR);
4545 builtin_function ("__builtin_classify_type", default_function_type,
4546 BUILT_IN_CLASSIFY_TYPE, BUILT_IN_NORMAL, NULL_PTR);
4547 builtin_function ("__builtin_next_arg", ptr_ftype, BUILT_IN_NEXT_ARG,
4548 BUILT_IN_NORMAL, NULL_PTR);
4549 builtin_function ("__builtin_args_info", int_ftype_int, BUILT_IN_ARGS_INFO,
4550 BUILT_IN_NORMAL, NULL_PTR);
4551 builtin_function ("__builtin_setjmp",
4552 build_function_type (integer_type_node,
4553 tree_cons (NULL_TREE, ptr_type_node,
4555 BUILT_IN_SETJMP, BUILT_IN_NORMAL, NULL_PTR);
4556 builtin_function ("__builtin_longjmp",
4557 build_function_type (void_type_node,
4558 tree_cons (NULL_TREE, ptr_type_node,
4559 tree_cons (NULL_TREE,
4562 BUILT_IN_LONGJMP, BUILT_IN_NORMAL, NULL_PTR);
4563 builtin_function ("__builtin_trap", void_ftype, BUILT_IN_TRAP,
4564 BUILT_IN_NORMAL, NULL_PTR);
4566 /* ISO C99 IEEE Unordered compares. */
4567 builtin_function ("__builtin_isgreater", default_function_type,
4568 BUILT_IN_ISGREATER, BUILT_IN_NORMAL, NULL_PTR);
4569 builtin_function ("__builtin_isgreaterequal", default_function_type,
4570 BUILT_IN_ISGREATEREQUAL, BUILT_IN_NORMAL, NULL_PTR);
4571 builtin_function ("__builtin_isless", default_function_type,
4572 BUILT_IN_ISLESS, BUILT_IN_NORMAL, NULL_PTR);
4573 builtin_function ("__builtin_islessequal", default_function_type,
4574 BUILT_IN_ISLESSEQUAL, BUILT_IN_NORMAL, NULL_PTR);
4575 builtin_function ("__builtin_islessgreater", default_function_type,
4576 BUILT_IN_ISLESSGREATER, BUILT_IN_NORMAL, NULL_PTR);
4577 builtin_function ("__builtin_isunordered", default_function_type,
4578 BUILT_IN_ISUNORDERED, BUILT_IN_NORMAL, NULL_PTR);
4580 /* Untyped call and return. */
4581 builtin_function ("__builtin_apply_args", ptr_ftype,
4582 BUILT_IN_APPLY_ARGS, BUILT_IN_NORMAL, NULL_PTR);
4584 temp = tree_cons (NULL_TREE,
4585 build_pointer_type (build_function_type (void_type_node,
4587 tree_cons (NULL_TREE,
4589 tree_cons (NULL_TREE,
4592 builtin_function ("__builtin_apply",
4593 build_function_type (ptr_type_node, temp),
4594 BUILT_IN_APPLY, BUILT_IN_NORMAL, NULL_PTR);
4595 builtin_function ("__builtin_return", void_ftype_ptr,
4596 BUILT_IN_RETURN, BUILT_IN_NORMAL, NULL_PTR);
4598 /* Support for varargs.h and stdarg.h. */
4599 builtin_function ("__builtin_varargs_start",
4600 build_function_type (void_type_node,
4601 tree_cons (NULL_TREE,
4602 va_list_ref_type_node,
4604 BUILT_IN_VARARGS_START, BUILT_IN_NORMAL, NULL_PTR);
4606 builtin_function ("__builtin_stdarg_start",
4607 build_function_type (void_type_node,
4608 tree_cons (NULL_TREE,
4609 va_list_ref_type_node,
4611 BUILT_IN_STDARG_START, BUILT_IN_NORMAL, NULL_PTR);
4613 builtin_function ("__builtin_va_end",
4614 build_function_type (void_type_node,
4615 tree_cons (NULL_TREE,
4616 va_list_ref_type_node,
4618 BUILT_IN_VA_END, BUILT_IN_NORMAL, NULL_PTR);
4620 builtin_function ("__builtin_va_copy",
4621 build_function_type (void_type_node,
4622 tree_cons (NULL_TREE,
4623 va_list_ref_type_node,
4624 tree_cons (NULL_TREE,
4625 va_list_arg_type_node,
4627 BUILT_IN_VA_COPY, BUILT_IN_NORMAL, NULL_PTR);
4629 /* ??? Ought to be `T __builtin_expect(T, T)' for any type T. */
4630 builtin_function ("__builtin_expect",
4631 build_function_type (long_integer_type_node,
4632 tree_cons (NULL_TREE,
4633 long_integer_type_node,
4634 tree_cons (NULL_TREE,
4635 long_integer_type_node,
4637 BUILT_IN_EXPECT, BUILT_IN_NORMAL, NULL_PTR);
4639 /* Currently under experimentation. */
4640 builtin_function ("__builtin_memcpy", memcpy_ftype, BUILT_IN_MEMCPY,
4641 BUILT_IN_NORMAL, "memcpy");
4642 builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
4643 BUILT_IN_MEMCMP, BUILT_IN_NORMAL, "memcmp");
4644 builtin_function ("__builtin_memset", memset_ftype,
4645 BUILT_IN_MEMSET, BUILT_IN_NORMAL, "memset");
4646 builtin_function ("__builtin_bzero", bzero_ftype,
4647 BUILT_IN_BZERO, BUILT_IN_NORMAL, "bzero");
4648 builtin_function ("__builtin_bcmp", bcmp_ftype,
4649 BUILT_IN_BCMP, BUILT_IN_NORMAL, "bcmp");
4650 builtin_function ("__builtin_strcmp", int_ftype_string_string,
4651 BUILT_IN_STRCMP, BUILT_IN_NORMAL, "strcmp");
4652 builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
4653 BUILT_IN_STRCPY, BUILT_IN_NORMAL, "strcpy");
4654 builtin_function ("__builtin_strlen", strlen_ftype,
4655 BUILT_IN_STRLEN, BUILT_IN_NORMAL, "strlen");
4656 builtin_function ("__builtin_sqrtf", float_ftype_float,
4657 BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtf");
4658 builtin_function ("__builtin_fsqrt", double_ftype_double,
4659 BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrt");
4660 builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
4661 BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtl");
4662 builtin_function ("__builtin_sinf", float_ftype_float,
4663 BUILT_IN_SIN, BUILT_IN_NORMAL, "sinf");
4664 builtin_function ("__builtin_sin", double_ftype_double,
4665 BUILT_IN_SIN, BUILT_IN_NORMAL, "sin");
4666 builtin_function ("__builtin_sinl", ldouble_ftype_ldouble,
4667 BUILT_IN_SIN, BUILT_IN_NORMAL, "sinl");
4668 builtin_function ("__builtin_cosf", float_ftype_float,
4669 BUILT_IN_COS, BUILT_IN_NORMAL, "cosf");
4670 builtin_function ("__builtin_cos", double_ftype_double,
4671 BUILT_IN_COS, BUILT_IN_NORMAL, "cos");
4672 builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
4673 BUILT_IN_COS, BUILT_IN_NORMAL, "cosl");
4674 built_in_decls[BUILT_IN_PUTCHAR] =
4675 builtin_function ("__builtin_putchar", int_ftype_int,
4676 BUILT_IN_PUTCHAR, BUILT_IN_NORMAL, "putchar");
4677 built_in_decls[BUILT_IN_PUTS] =
4678 builtin_function ("__builtin_puts", puts_ftype,
4679 BUILT_IN_PUTS, BUILT_IN_NORMAL, "puts");
4680 builtin_function ("__builtin_printf", printf_ftype,
4681 BUILT_IN_PRINTF, BUILT_IN_FRONTEND, "printf");
4682 /* We declare these without argument so that the initial declaration
4683 for these identifiers is a builtin. That allows us to redeclare
4684 them later with argument without worrying about the explicit
4685 declarations in stdio.h being taken as the initial declaration.
4686 Also, save the _DECL for these so we can use them later. */
4687 built_in_decls[BUILT_IN_FWRITE] =
4688 builtin_function ("__builtin_fwrite", sizet_ftype_any,
4689 BUILT_IN_FWRITE, BUILT_IN_NORMAL, "fwrite");
4690 built_in_decls[BUILT_IN_FPUTC] =
4691 builtin_function ("__builtin_fputc", int_ftype_any,
4692 BUILT_IN_FPUTC, BUILT_IN_NORMAL, "fputc");
4693 built_in_decls[BUILT_IN_FPUTS] =
4694 builtin_function ("__builtin_fputs", int_ftype_any,
4695 BUILT_IN_FPUTS, BUILT_IN_NORMAL, "fputs");
4699 builtin_function ("abs", int_ftype_int, BUILT_IN_ABS,
4700 BUILT_IN_NORMAL, NULL_PTR);
4701 builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS,
4702 BUILT_IN_NORMAL, NULL_PTR);
4703 builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS,
4704 BUILT_IN_NORMAL, NULL_PTR);
4705 builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
4706 BUILT_IN_NORMAL, NULL_PTR);
4707 builtin_function ("labs", long_ftype_long, BUILT_IN_LABS,
4708 BUILT_IN_NORMAL, NULL_PTR);
4709 if (flag_isoc99 || ! no_nonansi_builtins)
4710 builtin_function ("llabs", longlong_ftype_longlong, BUILT_IN_LLABS,
4711 BUILT_IN_NORMAL, NULL_PTR);
4712 builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY,
4713 BUILT_IN_NORMAL, NULL_PTR);
4714 builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
4715 BUILT_IN_NORMAL, NULL_PTR);
4716 builtin_function ("memset", memset_ftype, BUILT_IN_MEMSET,
4717 BUILT_IN_NORMAL, NULL_PTR);
4718 builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
4719 BUILT_IN_NORMAL, NULL_PTR);
4720 builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
4721 BUILT_IN_NORMAL, NULL_PTR);
4722 builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN,
4723 BUILT_IN_NORMAL, NULL_PTR);
4724 builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT,
4725 BUILT_IN_NORMAL, NULL_PTR);
4726 builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT,
4727 BUILT_IN_NORMAL, NULL_PTR);
4728 builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
4729 BUILT_IN_NORMAL, NULL_PTR);
4730 builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN,
4731 BUILT_IN_NORMAL, NULL_PTR);
4732 builtin_function ("sin", double_ftype_double, BUILT_IN_SIN,
4733 BUILT_IN_NORMAL, NULL_PTR);
4734 builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN,
4735 BUILT_IN_NORMAL, NULL_PTR);
4736 builtin_function ("cosf", float_ftype_float, BUILT_IN_COS,
4737 BUILT_IN_NORMAL, NULL_PTR);
4738 builtin_function ("cos", double_ftype_double, BUILT_IN_COS,
4739 BUILT_IN_NORMAL, NULL_PTR);
4740 builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS,
4741 BUILT_IN_NORMAL, NULL_PTR);
4742 builtin_function ("printf", printf_ftype, BUILT_IN_PRINTF,
4743 BUILT_IN_FRONTEND, NULL_PTR);
4744 /* We declare these without argument so that the initial
4745 declaration for these identifiers is a builtin. That allows
4746 us to redeclare them later with argument without worrying
4747 about the explicit declarations in stdio.h being taken as the
4748 initial declaration. */
4749 builtin_function ("fputc", int_ftype_any, BUILT_IN_FPUTC,
4750 BUILT_IN_NORMAL, NULL_PTR);
4751 builtin_function ("fputs", int_ftype_any, BUILT_IN_FPUTS,
4752 BUILT_IN_NORMAL, NULL_PTR);
4754 /* Declare these functions volatile
4755 to avoid spurious "control drops through" warnings. */
4756 temp = builtin_function ("abort", cplus_mode ? void_ftype : void_ftype_any,
4757 0, NOT_BUILT_IN, NULL_PTR);
4758 TREE_THIS_VOLATILE (temp) = 1;
4759 TREE_SIDE_EFFECTS (temp) = 1;
4761 #if 0 /* ??? The C++ frontend used to do this. */
4762 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
4764 DECL_BUILT_IN_NONANSI (temp) = 1;
4766 temp = builtin_function ("exit",
4767 cplus_mode ? void_ftype_int : void_ftype_any,
4768 0, NOT_BUILT_IN, NULL_PTR);
4769 TREE_THIS_VOLATILE (temp) = 1;
4770 TREE_SIDE_EFFECTS (temp) = 1;
4772 #if 0 /* ??? The C++ frontend used to do this. */
4773 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
4775 DECL_BUILT_IN_NONANSI (temp) = 1;
4780 /* Support for these has not been written in either expand_builtin
4781 or build_function_call. */
4782 builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV,
4783 BUILT_IN_NORMAL, NULL_PTR);
4784 builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV,
4785 BUILT_IN_NORMAL, NULL_PTR);
4786 builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
4787 BUILT_IN_NORMAL, NULL_PTR);
4788 builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
4789 BUILT_IN_NORMAL, NULL_PTR);
4790 builtin_function ("__builtin_fmod", double_ftype_double_double,
4791 BUILT_IN_FMOD, BUILT_IN_NORMAL, NULL_PTR);
4792 builtin_function ("__builtin_frem", double_ftype_double_double,
4793 BUILT_IN_FREM, BUILT_IN_NORMAL, NULL_PTR);
4794 builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
4795 BUILT_IN_NORMAL, NULL_PTR);
4796 builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
4797 BUILT_IN_NORMAL, NULL_PTR);
4800 main_identifier_node = get_identifier ("main");
4802 /* ??? Perhaps there's a better place to do this. But it is related
4803 to __builtin_va_arg, so it isn't that off-the-wall. */
4804 lang_type_promotes_to = simple_type_promotes_to;
4808 build_va_arg (expr, type)
4811 return build1 (VA_ARG_EXPR, type, expr);
4814 /* Given a type, apply default promotions wrt unnamed function arguments
4815 and return the new type. Return NULL_TREE if no change. */
4816 /* ??? There is a function of the same name in the C++ front end that
4817 does something similar, but is more thorough and does not return NULL
4818 if no change. We could perhaps share code, but it would make the
4819 self_promoting_type property harder to identify. */
4822 simple_type_promotes_to (type)
4825 if (TYPE_MAIN_VARIANT (type) == float_type_node)
4826 return double_type_node;
4828 if (C_PROMOTING_INTEGER_TYPE_P (type))
4830 /* Traditionally, unsignedness is preserved in default promotions.
4831 Also preserve unsignedness if not really getting any wider. */
4832 if (TREE_UNSIGNED (type)
4833 && (flag_traditional
4834 || TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
4835 return unsigned_type_node;
4836 return integer_type_node;
4842 /* Return 1 if PARMS specifies a fixed number of parameters
4843 and none of their types is affected by default promotions. */
4846 self_promoting_args_p (parms)
4850 for (t = parms; t; t = TREE_CHAIN (t))
4852 register tree type = TREE_VALUE (t);
4854 if (TREE_CHAIN (t) == 0 && type != void_type_node)
4860 if (TYPE_MAIN_VARIANT (type) == float_type_node)
4863 if (C_PROMOTING_INTEGER_TYPE_P (type))
4869 /* Recognize certain built-in functions so we can make tree-codes
4870 other than CALL_EXPR. We do this when it enables fold-const.c
4871 to do something useful. */
4872 /* ??? By rights this should go in builtins.c, but only C and C++
4873 implement build_{binary,unary}_op. Not exactly sure what bits
4874 of functionality are actually needed from those functions, or
4875 where the similar functionality exists in the other front ends. */
4878 expand_tree_builtin (function, params, coerced_params)
4879 tree function, params, coerced_params;
4881 enum tree_code code;
4883 if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
4886 switch (DECL_FUNCTION_CODE (function))
4890 case BUILT_IN_LLABS:
4892 if (coerced_params == 0)
4893 return integer_zero_node;
4894 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
4896 case BUILT_IN_ISGREATER:
4897 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4903 case BUILT_IN_ISGREATEREQUAL:
4904 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4910 case BUILT_IN_ISLESS:
4911 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4917 case BUILT_IN_ISLESSEQUAL:
4918 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4924 case BUILT_IN_ISLESSGREATER:
4925 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4931 case BUILT_IN_ISUNORDERED:
4932 if (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT)
4933 return integer_zero_node;
4934 code = UNORDERED_EXPR;
4942 || TREE_CHAIN (params) == 0)
4944 error ("too few arguments to function `%s'",
4945 IDENTIFIER_POINTER (DECL_NAME (function)));
4946 return error_mark_node;
4948 else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
4950 error ("too many arguments to function `%s'",
4951 IDENTIFIER_POINTER (DECL_NAME (function)));
4952 return error_mark_node;
4955 arg0 = TREE_VALUE (params);
4956 arg1 = TREE_VALUE (TREE_CHAIN (params));
4957 arg0 = build_binary_op (code, arg0, arg1, 0);
4958 if (code != UNORDERED_EXPR)
4959 arg0 = build_unary_op (TRUTH_NOT_EXPR, arg0, 0);
4971 /* Returns non-zero if CODE is the code for a statement. */
4974 statement_code_p (code)
4975 enum tree_code code;
4998 if (lang_statement_code_p)
4999 return (*lang_statement_code_p) (code);
5004 /* Walk the statemen tree, rooted at *tp. Apply FUNC to all the
5005 sub-trees of *TP in a pre-order traversal. FUNC is called with the
5006 DATA and the address of each sub-tree. If FUNC returns a non-NULL
5007 value, the traversal is aborted, and the value returned by FUNC is
5008 returned. If FUNC sets WALK_SUBTREES to zero, then the subtrees of
5009 the node being visited are not walked.
5011 We don't need a without_duplicates variant of this one because the
5012 statement tree is a tree, not a graph. */
5015 walk_stmt_tree (tp, func, data)
5020 enum tree_code code;
5025 #define WALK_SUBTREE(NODE) \
5028 result = walk_stmt_tree (&(NODE), func, data); \
5034 /* Skip empty subtrees. */
5038 /* Skip subtrees below non-statement nodes. */
5039 if (!statement_code_p (TREE_CODE (*tp)))
5042 /* Call the function. */
5044 result = (*func) (tp, &walk_subtrees, data);
5046 /* If we found something, return it. */
5050 /* Even if we didn't, FUNC may have decided that there was nothing
5051 interesting below this point in the tree. */
5055 /* FUNC may have modified the tree, recheck that we're looking at a
5057 code = TREE_CODE (*tp);
5058 if (!statement_code_p (code))
5061 /* Walk over all the sub-trees of this operand. Statement nodes never
5062 contain RTL, and we needn't worry about TARGET_EXPRs. */
5063 len = TREE_CODE_LENGTH (code);
5065 /* Go through the subtrees. We need to do this in forward order so
5066 that the scope of a FOR_EXPR is handled properly. */
5067 for (i = 0; i < len; ++i)
5068 WALK_SUBTREE (TREE_OPERAND (*tp, i));
5070 /* Finally visit the chain. This can be tail-recursion optimized if
5071 we write it this way. */
5072 return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
5077 /* Used to compare case labels. K1 and K2 are actually tree nodes
5078 representing case labels, or NULL_TREE for a `default' label.
5079 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
5080 K2, and 0 if K1 and K2 are equal. */
5083 case_compare (k1, k2)
5087 /* Consider a NULL key (such as arises with a `default' label) to be
5088 smaller than anything else. */
5094 return tree_int_cst_compare ((tree) k1, (tree) k2);
5097 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
5098 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
5099 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
5100 case label was declared using the usual C/C++ syntax, rather than
5101 the GNU case range extension. CASES is a tree containing all the
5102 case ranges processed so far; COND is the condition for the
5103 switch-statement itself. Returns the CASE_LABEL created, or
5104 ERROR_MARK_NODE if no CASE_LABEL is created. */
5107 c_add_case_label (cases, cond, low_value, high_value)
5116 splay_tree_node node;
5118 /* Create the LABEL_DECL itself. */
5119 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
5120 DECL_CONTEXT (label) = current_function_decl;
5122 /* If there was an error processing the switch condition, bail now
5123 before we get more confused. */
5124 if (!cond || cond == error_mark_node)
5126 /* Add a label anyhow so that the back-end doesn't think that
5127 the beginning of the switch is unreachable. */
5129 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
5130 return error_mark_node;
5133 if ((low_value && TREE_TYPE (low_value)
5134 && POINTER_TYPE_P (TREE_TYPE (low_value)))
5135 || (high_value && TREE_TYPE (high_value)
5136 && POINTER_TYPE_P (TREE_TYPE (high_value))))
5137 error ("pointers are not permitted as case values");
5139 /* Case ranges are a GNU extension. */
5140 if (high_value && pedantic)
5142 if (c_language == clk_cplusplus)
5143 pedwarn ("ISO C++ forbids range expressions in switch statements");
5145 pedwarn ("ISO C forbids range expressions in switch statements");
5148 type = TREE_TYPE (cond);
5151 low_value = check_case_value (low_value);
5152 low_value = convert_and_check (type, low_value);
5156 high_value = check_case_value (high_value);
5157 high_value = convert_and_check (type, high_value);
5160 /* If an error has occurred, bail out now. */
5161 if (low_value == error_mark_node || high_value == error_mark_node)
5164 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
5165 return error_mark_node;
5168 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
5169 really a case range, even though it was written that way. Remove
5170 the HIGH_VALUE to simplify later processing. */
5171 if (tree_int_cst_equal (low_value, high_value))
5172 high_value = NULL_TREE;
5173 if (low_value && high_value
5174 && !tree_int_cst_lt (low_value, high_value))
5175 warning ("empty range specified");
5177 /* Look up the LOW_VALUE in the table of case labels we already
5179 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
5180 /* If there was not an exact match, check for overlapping ranges.
5181 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
5182 that's a `default' label and the only overlap is an exact match. */
5183 if (!node && (low_value || high_value))
5185 splay_tree_node low_bound;
5186 splay_tree_node high_bound;
5188 /* Even though there wasn't an exact match, there might be an
5189 overlap between this case range and another case range.
5190 Since we've (inductively) not allowed any overlapping case
5191 ranges, we simply need to find the greatest low case label
5192 that is smaller that LOW_VALUE, and the smallest low case
5193 label that is greater than LOW_VALUE. If there is an overlap
5194 it will occur in one of these two ranges. */
5195 low_bound = splay_tree_predecessor (cases,
5196 (splay_tree_key) low_value);
5197 high_bound = splay_tree_successor (cases,
5198 (splay_tree_key) low_value);
5200 /* Check to see if the LOW_BOUND overlaps. It is smaller than
5201 the LOW_VALUE, so there is no need to check unless the
5202 LOW_BOUND is in fact itself a case range. */
5204 && CASE_HIGH ((tree) low_bound->value)
5205 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
5208 /* Check to see if the HIGH_BOUND overlaps. The low end of that
5209 range is bigger than the low end of the current range, so we
5210 are only interested if the current range is a real range, and
5211 not an ordinary case label. */
5214 && (tree_int_cst_compare ((tree) high_bound->key,
5219 /* If there was an overlap, issue an error. */
5222 tree duplicate = CASE_LABEL_DECL ((tree) node->value);
5226 error ("duplicate (or overlapping) case value");
5227 error_with_decl (duplicate,
5228 "this is the first entry overlapping that value");
5232 error ("duplicate case value") ;
5233 error_with_decl (duplicate, "previously used here");
5237 error ("multiple default labels in one switch");
5238 error_with_decl (duplicate, "this is the first default label");
5241 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
5244 /* Add a CASE_LABEL to the statement-tree. */
5245 case_label = add_stmt (build_case_label (low_value, high_value, label));
5246 /* Register this case label in the splay tree. */
5247 splay_tree_insert (cases,
5248 (splay_tree_key) low_value,
5249 (splay_tree_value) case_label);
5254 /* Mark P (a stmt_tree) for GC. The use of a `void *' for the
5255 parameter allows this function to be used as a GC-marking
5262 stmt_tree st = (stmt_tree) p;
5264 ggc_mark_tree (st->x_last_stmt);
5265 ggc_mark_tree (st->x_last_expr_type);
5268 /* Mark LD for GC. */
5271 c_mark_lang_decl (c)
5272 struct c_lang_decl *c;
5274 ggc_mark_tree (c->saved_tree);
5277 /* Mark F for GC. */
5280 mark_c_language_function (f)
5281 struct language_function *f;
5286 mark_stmt_tree (&f->x_stmt_tree);
5287 ggc_mark_tree (f->x_scope_stmt_stack);
5290 /* Hook used by expand_expr to expand language-specific tree codes. */
5293 c_expand_expr (exp, target, tmode, modifier)
5296 enum machine_mode tmode;
5297 enum expand_modifier modifier;
5299 switch (TREE_CODE (exp))
5306 /* Since expand_expr_stmt calls free_temp_slots after every
5307 expression statement, we must call push_temp_slots here.
5308 Otherwise, any temporaries in use now would be considered
5309 out-of-scope after the first EXPR_STMT from within the
5312 rtl_expr = expand_start_stmt_expr ();
5313 expand_stmt (STMT_EXPR_STMT (exp));
5314 expand_end_stmt_expr (rtl_expr);
5315 result = expand_expr (rtl_expr, target, tmode, modifier);
5323 if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
5324 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
5326 && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
5327 && (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
5328 == BUILT_IN_FRONTEND))
5329 return c_expand_builtin (exp, target, tmode, modifier);
5343 /* Hook used by safe_from_p to handle language-specific tree codes. */
5346 c_safe_from_p (target, exp)
5350 /* We can see statements here when processing the body of a
5351 statement-expression. For a declaration statement declaring a
5352 variable, look at the variable's initializer. */
5353 if (TREE_CODE (exp) == DECL_STMT)
5355 tree decl = DECL_STMT_DECL (exp);
5357 if (TREE_CODE (decl) == VAR_DECL
5358 && DECL_INITIAL (decl)
5359 && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
5363 /* For any statement, we must follow the statement-chain. */
5364 if (statement_code_p (TREE_CODE (exp)) && TREE_CHAIN (exp))
5365 return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
5367 /* Assume everything else is safe. */
5371 /* Tree code classes. */
5373 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
5375 static char c_tree_code_type[] = {
5377 #include "c-common.def"
5381 /* Table indexed by tree code giving number of expression
5382 operands beyond the fixed part of the node structure.
5383 Not used for types or decls. */
5385 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
5387 static int c_tree_code_length[] = {
5389 #include "c-common.def"
5393 /* Names of tree components.
5394 Used for printing out the tree and error messages. */
5395 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
5397 static const char *c_tree_code_name[] = {
5399 #include "c-common.def"
5403 /* Adds the tree codes specific to the C front end to the list of all
5409 memcpy (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE,
5411 (int)LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE);
5412 memcpy (tree_code_length + (int) LAST_AND_UNUSED_TREE_CODE,
5414 (LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (int));
5415 memcpy (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE,
5417 (LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (char *));
5420 #define CALLED_AS_BUILT_IN(NODE) \
5421 (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
5424 c_expand_builtin (exp, target, tmode, modifier)
5427 enum machine_mode tmode;
5428 enum expand_modifier modifier;
5430 tree type = TREE_TYPE (exp);
5431 tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
5432 tree arglist = TREE_OPERAND (exp, 1);
5433 enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
5434 enum tree_code code = TREE_CODE (exp);
5435 const int ignore = (target == const0_rtx
5436 || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
5437 || code == CONVERT_EXPR || code == REFERENCE_EXPR
5438 || code == COND_EXPR)
5439 && TREE_CODE (type) == VOID_TYPE));
5441 if (! optimize && ! CALLED_AS_BUILT_IN (fndecl))
5442 return expand_call (exp, target, ignore);
5446 case BUILT_IN_PRINTF:
5447 target = c_expand_builtin_printf (arglist, target, tmode,
5453 default: /* just do library call, if unknown builtin */
5454 error ("built-in function `%s' not currently supported",
5455 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
5458 /* The switch statement above can drop through to cause the function
5459 to be called normally. */
5460 return expand_call (exp, target, ignore);
5463 /* Check an arglist to *printf for problems. The arglist should start
5464 at the format specifier, with the remaining arguments immediately
5467 is_valid_printf_arglist (arglist)
5470 /* Save this value so we can restore it later. */
5471 const int SAVE_pedantic = pedantic;
5472 int diagnostic_occurred = 0;
5474 /* Set this to a known value so the user setting won't affect code
5477 /* Check to make sure there are no format specifier errors. */
5478 check_function_format (&diagnostic_occurred,
5479 maybe_get_identifier("printf"),
5480 NULL_TREE, arglist);
5482 /* Restore the value of `pedantic'. */
5483 pedantic = SAVE_pedantic;
5485 /* If calling `check_function_format_ptr' produces a warning, we
5486 return false, otherwise we return true. */
5487 return ! diagnostic_occurred;
5490 /* If the arguments passed to printf are suitable for optimizations,
5491 we attempt to transform the call. */
5493 c_expand_builtin_printf (arglist, target, tmode, modifier, ignore)
5496 enum machine_mode tmode;
5497 enum expand_modifier modifier;
5500 tree fn_putchar = built_in_decls[BUILT_IN_PUTCHAR],
5501 fn_puts = built_in_decls[BUILT_IN_PUTS];
5502 tree fn, format_arg, stripped_string;
5504 /* If the return value is used, or the replacement _DECL isn't
5505 initialized, don't do the transformation. */
5506 if (!ignore || !fn_putchar || !fn_puts)
5509 /* Verify the required arguments in the original call. */
5511 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE))
5514 /* Check the specifier vs. the parameters. */
5515 if (!is_valid_printf_arglist (arglist))
5518 format_arg = TREE_VALUE (arglist);
5519 stripped_string = format_arg;
5520 STRIP_NOPS (stripped_string);
5521 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
5522 stripped_string = TREE_OPERAND (stripped_string, 0);
5524 /* If the format specifier isn't a STRING_CST, punt. */
5525 if (TREE_CODE (stripped_string) != STRING_CST)
5528 /* OK! We can attempt optimization. */
5530 /* If the format specifier was "%s\n", call __builtin_puts(arg2). */
5531 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s\n") == 0)
5533 arglist = TREE_CHAIN (arglist);
5536 /* If the format specifier was "%c", call __builtin_putchar (arg2). */
5537 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
5539 arglist = TREE_CHAIN (arglist);
5544 /* We can't handle anything else with % args or %% ... yet. */
5545 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
5548 /* If the resulting constant string has a length of 1, call
5549 putchar. Note, TREE_STRING_LENGTH includes the terminating
5550 NULL in its count. */
5551 if (TREE_STRING_LENGTH (stripped_string) == 2)
5553 /* Given printf("c"), (where c is any one character,)
5554 convert "c"[0] to an int and pass that to the replacement
5556 arglist = build_int_2 (TREE_STRING_POINTER (stripped_string)[0], 0);
5557 arglist = build_tree_list (NULL_TREE, arglist);
5561 /* If the resulting constant was "string\n", call
5562 __builtin_puts("string"). Ensure "string" has at least one
5563 character besides the trailing \n. Note, TREE_STRING_LENGTH
5564 includes the terminating NULL in its count. */
5565 else if (TREE_STRING_LENGTH (stripped_string) > 2
5566 && TREE_STRING_POINTER (stripped_string)
5567 [TREE_STRING_LENGTH (stripped_string) - 2] == '\n')
5569 /* Create a NULL-terminated string that's one char shorter
5570 than the original, stripping off the trailing '\n'. */
5571 const int newlen = TREE_STRING_LENGTH (stripped_string) - 1;
5572 char *newstr = (char *) alloca (newlen);
5573 memcpy (newstr, TREE_STRING_POINTER (stripped_string), newlen - 1);
5574 newstr[newlen - 1] = 0;
5576 arglist = combine_strings (build_string (newlen, newstr));
5577 arglist = build_tree_list (NULL_TREE, arglist);
5581 /* We'd like to arrange to call fputs(string) here, but we
5582 need stdout and don't have a way to get it ... yet. */
5586 return expand_expr (build_function_call (fn, arglist),
5587 (ignore ? const0_rtx : target),