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 record_function_format (DECL_NAME (decl),
966 DECL_ASSEMBLER_NAME (decl),
967 format_type, format_num, first_arg_num);
973 tree format_num_expr = TREE_VALUE (args);
974 unsigned HOST_WIDE_INT format_num;
975 unsigned int arg_num;
978 if (TREE_CODE (decl) != FUNCTION_DECL)
980 error_with_decl (decl,
981 "argument format specified for non-function `%s'");
985 /* Strip any conversions from the first arg number and verify it
987 while (TREE_CODE (format_num_expr) == NOP_EXPR
988 || TREE_CODE (format_num_expr) == CONVERT_EXPR
989 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
990 format_num_expr = TREE_OPERAND (format_num_expr, 0);
992 if (TREE_CODE (format_num_expr) != INTEGER_CST
993 || TREE_INT_CST_HIGH (format_num_expr) != 0)
995 error ("format string has invalid operand number");
999 format_num = TREE_INT_CST_LOW (format_num_expr);
1001 /* If a parameter list is specified, verify that the format_num
1002 argument is actually a string, in case the format attribute
1004 argument = TYPE_ARG_TYPES (type);
1007 for (arg_num = 1; argument != 0 && arg_num != format_num;
1008 ++arg_num, argument = TREE_CHAIN (argument))
1012 || TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE
1013 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument)))
1016 error ("format string arg not a string type");
1021 if (TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) != POINTER_TYPE
1022 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (TREE_TYPE (decl))))
1025 error ("function does not return string type");
1029 record_international_format (DECL_NAME (decl),
1030 DECL_ASSEMBLER_NAME (decl),
1036 declare_weak (decl);
1040 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
1041 || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl)))
1042 error_with_decl (decl,
1043 "`%s' defined both normally and as an alias");
1044 else if (decl_function_context (decl) == 0)
1048 id = TREE_VALUE (args);
1049 if (TREE_CODE (id) != STRING_CST)
1051 error ("alias arg not a string");
1054 id = get_identifier (TREE_STRING_POINTER (id));
1055 /* This counts as a use of the object pointed to. */
1058 if (TREE_CODE (decl) == FUNCTION_DECL)
1059 DECL_INITIAL (decl) = error_mark_node;
1061 DECL_EXTERNAL (decl) = 0;
1062 assemble_alias (decl, id);
1065 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
1068 case A_NO_CHECK_MEMORY_USAGE:
1069 if (TREE_CODE (decl) != FUNCTION_DECL)
1071 error_with_decl (decl,
1072 "`%s' attribute applies only to functions",
1073 IDENTIFIER_POINTER (name));
1075 else if (DECL_INITIAL (decl))
1077 error_with_decl (decl,
1078 "can't set `%s' attribute after definition",
1079 IDENTIFIER_POINTER (name));
1082 DECL_NO_CHECK_MEMORY_USAGE (decl) = 1;
1085 case A_NO_INSTRUMENT_FUNCTION:
1086 if (TREE_CODE (decl) != FUNCTION_DECL)
1088 error_with_decl (decl,
1089 "`%s' attribute applies only to functions",
1090 IDENTIFIER_POINTER (name));
1092 else if (DECL_INITIAL (decl))
1094 error_with_decl (decl,
1095 "can't set `%s' attribute after definition",
1096 IDENTIFIER_POINTER (name));
1099 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
1102 case A_NO_LIMIT_STACK:
1103 if (TREE_CODE (decl) != FUNCTION_DECL)
1105 error_with_decl (decl,
1106 "`%s' attribute applies only to functions",
1107 IDENTIFIER_POINTER (name));
1109 else if (DECL_INITIAL (decl))
1111 error_with_decl (decl,
1112 "can't set `%s' attribute after definition",
1113 IDENTIFIER_POINTER (name));
1116 DECL_NO_LIMIT_STACK (decl) = 1;
1122 /* Split SPECS_ATTRS, a list of declspecs and prefix attributes, into two
1123 lists. SPECS_ATTRS may also be just a typespec (eg: RECORD_TYPE).
1125 The head of the declspec list is stored in DECLSPECS.
1126 The head of the attribute list is stored in PREFIX_ATTRIBUTES.
1128 Note that attributes in SPECS_ATTRS are stored in the TREE_PURPOSE of
1129 the list elements. We drop the containing TREE_LIST nodes and link the
1130 resulting attributes together the way decl_attributes expects them. */
1133 split_specs_attrs (specs_attrs, declspecs, prefix_attributes)
1135 tree *declspecs, *prefix_attributes;
1137 tree t, s, a, next, specs, attrs;
1139 /* This can happen after an __extension__ in pedantic mode. */
1140 if (specs_attrs != NULL_TREE
1141 && TREE_CODE (specs_attrs) == INTEGER_CST)
1143 *declspecs = NULL_TREE;
1144 *prefix_attributes = NULL_TREE;
1148 /* This can happen in c++ (eg: decl: typespec initdecls ';'). */
1149 if (specs_attrs != NULL_TREE
1150 && TREE_CODE (specs_attrs) != TREE_LIST)
1152 *declspecs = specs_attrs;
1153 *prefix_attributes = NULL_TREE;
1157 /* Remember to keep the lists in the same order, element-wise. */
1159 specs = s = NULL_TREE;
1160 attrs = a = NULL_TREE;
1161 for (t = specs_attrs; t; t = next)
1163 next = TREE_CHAIN (t);
1164 /* Declspecs have a non-NULL TREE_VALUE. */
1165 if (TREE_VALUE (t) != NULL_TREE)
1167 if (specs == NULL_TREE)
1177 if (attrs == NULL_TREE)
1178 attrs = a = TREE_PURPOSE (t);
1181 TREE_CHAIN (a) = TREE_PURPOSE (t);
1182 a = TREE_PURPOSE (t);
1184 /* More attrs can be linked here, move A to the end. */
1185 while (TREE_CHAIN (a) != NULL_TREE)
1190 /* Terminate the lists. */
1192 TREE_CHAIN (s) = NULL_TREE;
1194 TREE_CHAIN (a) = NULL_TREE;
1198 *prefix_attributes = attrs;
1201 /* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes.
1202 This function is used by the parser when a rule will accept attributes
1203 in a particular position, but we don't want to support that just yet.
1205 A warning is issued for every ignored attribute. */
1208 strip_attrs (specs_attrs)
1213 split_specs_attrs (specs_attrs, &specs, &attrs);
1217 warning ("`%s' attribute ignored",
1218 IDENTIFIER_POINTER (TREE_PURPOSE (attrs)));
1219 attrs = TREE_CHAIN (attrs);
1225 /* Check a printf/fprintf/sprintf/scanf/fscanf/sscanf format against
1226 a parameter list. */
1228 /* The meaningfully distinct length modifiers for format checking recognised
1245 /* The standard versions in which various format features appeared. */
1246 enum format_std_version
1255 /* Flags that may apply to a particular kind of format checked by GCC. */
1258 /* This format converts arguments of types determined by the
1260 FMT_FLAG_ARG_CONVERT = 1,
1261 /* The scanf allocation 'a' kludge applies to this format kind. */
1262 FMT_FLAG_SCANF_A_KLUDGE = 2,
1263 /* A % during parsing a specifier is allowed to be a modified % rather
1264 that indicating the format is broken and we are out-of-sync. */
1265 FMT_FLAG_FANCY_PERCENT_OK = 4
1266 /* Not included here: details of whether width or precision may occur
1267 (controlled by width_char and precision_char); details of whether
1268 '*' can be used for these (width_type and precision_type); details
1269 of whether length modifiers can occur (length_char_specs); details
1270 of when $ operand numbers are allowed (always, for the formats
1271 supported, if arguments are converted). */
1275 /* Structure describing a length modifier supported in format checking, and
1276 possibly a doubled version such as "hh". */
1279 /* Name of the single-character length modifier. */
1281 /* Index into a format_char_info.types array. */
1282 enum format_lengths index;
1283 /* Standard version this length appears in. */
1284 enum format_std_version std;
1285 /* Same, if the modifier can be repeated, or NULL if it can't. */
1286 const char *double_name;
1287 enum format_lengths double_index;
1288 enum format_std_version double_std;
1289 } format_length_info;
1292 /* Structure desribing the combination of a conversion specifier
1293 (or a set of specifiers which act identically) and a length modifier. */
1296 /* The standard version this combination of length and type appeared in.
1297 This is only relevant if greater than those for length and type
1298 individually; otherwise it is ignored. */
1299 enum format_std_version std;
1300 /* The name to use for the type, if different from that generated internally
1301 (e.g., "signed size_t"). */
1303 /* The type itself. */
1305 } format_type_detail;
1308 /* Macros to fill out tables of these. */
1309 #define BADLEN { 0, NULL, NULL }
1310 #define NOLENGTHS { BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }
1313 /* Structure desribing a format conversion specifier (or a set of specifiers
1314 which act identically), and the length modifiers used with it. */
1317 const char *format_chars;
1319 enum format_std_version std;
1320 /* Types accepted for each length modifier. */
1321 format_type_detail types[FMT_LEN_MAX];
1322 /* List of other modifier characters allowed with these specifiers.
1323 This lists flags, and additionally "w" for width, "p" for precision,
1324 "a" for scanf "a" allocation extension (not applicable in C99 mode),
1325 "*" for scanf suppression, and "E" and "O" for those strftime
1327 const char *flag_chars;
1328 /* List of additional flags describing these conversion specifiers.
1329 "c" for generic character pointers being allowed, "2" for strftime
1330 two digit year formats, "3" for strftime formats giving two digit
1331 years in some locales, "4" for "2" which becomes "3" with an "E" modifier,
1332 "o" if use of strftime "O" is a GNU extension beyond C99,
1333 "W" if the argument is a pointer which is dereferenced and written into,
1334 "i" for printf integer formats where the '0' flag is ignored with
1335 precision, and "[" for the starting character of a scanf scanset. */
1340 /* Structure describing a flag accepted by some kind of format. */
1343 /* The flag character in question (0 for end of array). */
1345 /* Zero if this entry describes the flag character in general, or a
1346 non-zero character that may be found in flags2 if it describes the
1347 flag when used with certain formats only. If the latter, only
1348 the first such entry found that applies to the current conversion
1349 specifier is used; the values of `name' and `long_name' it supplies
1350 will be used, if non-NULL and the standard version is higher than
1351 the unpredicated one, for any pedantic warning. For example, 'o'
1352 for strftime formats (meaning 'O' is an extension over C99). */
1354 /* The name to use for this flag in diagnostic messages. For example,
1355 N_("`0' flag"), N_("field width"). */
1357 /* Long name for this flag in diagnostic messages; currently only used for
1358 "ISO C does not support ...". For example, N_("the `I' printf flag"). */
1359 const char *long_name;
1360 /* The standard version in which it appeared. */
1361 enum format_std_version std;
1365 /* Structure describing a combination of flags that is bad for some kind
1369 /* The first flag character in question (0 for end of array). */
1371 /* The second flag character. */
1373 /* Non-zero if the message should say that the first flag is ignored with
1374 the second, zero if the combination should simply be objected to. */
1376 /* Zero if this entry applies whenever this flag combination occurs,
1377 a non-zero character from flags2 if it only applies in some
1378 circumstances (e.g. 'i' for printf formats ignoring 0 with precision). */
1383 /* Structure describing a particular kind of format processed by GCC. */
1386 /* The name of this kind of format, for use in diagnostics. */
1388 /* Specifications of the length modifiers accepted; possibly NULL. */
1389 const format_length_info *length_char_specs;
1390 /* Details of the conversion specification characters accepted. */
1391 const format_char_info *conversion_specs;
1392 /* String listing the flag characters that are accepted. */
1393 const char *flag_chars;
1394 /* String listing modifier characters (strftime) accepted. May be NULL. */
1395 const char *modifier_chars;
1396 /* Details of the flag characters, including pseudo-flags. */
1397 const format_flag_spec *flag_specs;
1398 /* Details of bad combinations of flags. */
1399 const format_flag_pair *bad_flag_pairs;
1400 /* Flags applicable to this kind of format. */
1402 /* Flag character to treat a width as, or 0 if width not used. */
1404 /* Flag character to treat a precision as, or 0 if precision not used. */
1406 /* If a flag character has the effect of suppressing the conversion of
1407 an argument ('*' in scanf), that flag character, otherwise 0. */
1408 int suppression_char;
1409 /* Flag character to treat a length modifier as (ignored if length
1410 modifiers not used). Need not be placed in flag_chars for conversion
1411 specifiers, but is used to check for bad combinations such as length
1412 modifier with assignment suppression in scanf. */
1413 int length_code_char;
1414 /* Pointer to type of argument expected if '*' is used for a width,
1415 or NULL if '*' not used for widths. */
1417 /* Pointer to type of argument expected if '*' is used for a precision,
1418 or NULL if '*' not used for precisions. */
1419 tree *precision_type;
1423 /* Structure describing details of a type expected in format checking,
1424 and the type to check against it. */
1425 typedef struct format_wanted_type
1427 /* The type wanted. */
1429 /* The name of this type to use in diagnostics. */
1430 const char *wanted_type_name;
1431 /* The level of indirection through pointers at which this type occurs. */
1433 /* Whether, when pointer_count is 1, to allow any character type when
1434 pedantic, rather than just the character or void type specified. */
1435 int char_lenient_flag;
1436 /* Whether the argument, dereferenced once, is written into and so the
1437 argument must not be a pointer to a const-qualified type. */
1438 int writing_in_flag;
1439 /* If warnings should be of the form "field precision is not type int",
1440 the name to use (in this case "field precision"), otherwise NULL,
1441 for "%s format, %s arg" type messages. If (in an extension), this
1442 is a pointer type, wanted_type_name should be set to include the
1443 terminating '*' characters of the type name to give a correct
1446 /* The actual parameter to check against the wanted type. */
1448 /* The argument number of that parameter. */
1450 /* The next type to check for this format conversion, or NULL if none. */
1451 struct format_wanted_type *next;
1452 } format_wanted_type;
1455 static const format_length_info printf_length_specs[] =
1457 { "h", FMT_LEN_h, STD_C89, "hh", FMT_LEN_hh, STD_C99 },
1458 { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C99 },
1459 { "q", FMT_LEN_ll, STD_EXT, NULL, 0, 0 },
1460 { "L", FMT_LEN_L, STD_C89, NULL, 0, 0 },
1461 { "z", FMT_LEN_z, STD_C99, NULL, 0, 0 },
1462 { "Z", FMT_LEN_z, STD_EXT, NULL, 0, 0 },
1463 { "t", FMT_LEN_t, STD_C99, NULL, 0, 0 },
1464 { "j", FMT_LEN_j, STD_C99, NULL, 0, 0 },
1465 { NULL, 0, 0, NULL, 0, 0 }
1469 /* This differs from printf_length_specs only in that "Z" is not accepted. */
1470 static const format_length_info scanf_length_specs[] =
1472 { "h", FMT_LEN_h, STD_C89, "hh", FMT_LEN_hh, STD_C99 },
1473 { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C99 },
1474 { "q", FMT_LEN_ll, STD_EXT, NULL, 0, 0 },
1475 { "L", FMT_LEN_L, STD_C89, NULL, 0, 0 },
1476 { "z", FMT_LEN_z, STD_C99, NULL, 0, 0 },
1477 { "t", FMT_LEN_t, STD_C99, NULL, 0, 0 },
1478 { "j", FMT_LEN_j, STD_C99, NULL, 0, 0 },
1479 { NULL, 0, 0, NULL, 0, 0 }
1483 static const format_flag_spec printf_flag_specs[] =
1485 { ' ', 0, N_("` ' flag"), N_("the ` ' printf flag"), STD_C89 },
1486 { '+', 0, N_("`+' flag"), N_("the `+' printf flag"), STD_C89 },
1487 { '#', 0, N_("`#' flag"), N_("the `#' printf flag"), STD_C89 },
1488 { '0', 0, N_("`0' flag"), N_("the `0' printf flag"), STD_C89 },
1489 { '-', 0, N_("`-' flag"), N_("the `-' printf flag"), STD_C89 },
1490 { '\'', 0, N_("`'' flag"), N_("the `'' printf flag"), STD_EXT },
1491 { 'I', 0, N_("`I' flag"), N_("the `I' printf flag"), STD_EXT },
1492 { 'w', 0, N_("field width"), N_("field width in printf format"), STD_C89 },
1493 { 'p', 0, N_("precision"), N_("precision in printf format"), STD_C89 },
1494 { 'L', 0, N_("length modifier"), N_("length modifier in printf format"), STD_C89 },
1495 { 0, 0, NULL, NULL, 0 }
1499 static const format_flag_pair printf_flag_pairs[] =
1503 { '0', 'p', 1, 'i' },
1508 static const format_flag_spec scanf_flag_specs[] =
1510 { '*', 0, N_("assignment suppression"), N_("assignment suppression"), STD_C89 },
1511 { 'a', 0, N_("`a' flag"), N_("the `a' scanf flag"), STD_EXT },
1512 { 'w', 0, N_("field width"), N_("field width in scanf format"), STD_C89 },
1513 { 'L', 0, N_("length modifier"), N_("length modifier in scanf format"), STD_C89 },
1514 { '\'', 0, N_("`'' flag"), N_("the `'' scanf flag"), STD_EXT },
1515 { 'I', 0, N_("`I' flag"), N_("the `I' scanf flag"), STD_EXT },
1516 { 0, 0, NULL, NULL, 0 }
1520 static const format_flag_pair scanf_flag_pairs[] =
1527 static const format_flag_spec strftime_flag_specs[] =
1529 { '_', 0, N_("`_' flag"), N_("the `_' strftime flag"), STD_EXT },
1530 { '-', 0, N_("`-' flag"), N_("the `-' strftime flag"), STD_EXT },
1531 { '0', 0, N_("`0' flag"), N_("the `0' strftime flag"), STD_EXT },
1532 { '^', 0, N_("`^' flag"), N_("the `^' strftime flag"), STD_EXT },
1533 { '#', 0, N_("`#' flag"), N_("the `#' strftime flag"), STD_EXT },
1534 { 'w', 0, N_("field width"), N_("field width in strftime format"), STD_EXT },
1535 { 'E', 0, N_("`E' modifier"), N_("the `E' strftime modifier"), STD_C99 },
1536 { 'O', 0, N_("`O' modifier"), N_("the `O' strftime modifier"), STD_C99 },
1537 { 'O', 'o', NULL, N_("the `O' modifier"), STD_EXT },
1538 { 0, 0, NULL, NULL, 0 }
1542 static const format_flag_pair strftime_flag_pairs[] =
1553 #define T_I &integer_type_node
1554 #define T89_I { STD_C89, NULL, T_I }
1555 #define T99_I { STD_C99, NULL, T_I }
1556 #define T_L &long_integer_type_node
1557 #define T89_L { STD_C89, NULL, T_L }
1558 #define T_LL &long_long_integer_type_node
1559 #define T99_LL { STD_C99, NULL, T_LL }
1560 #define TEX_LL { STD_EXT, NULL, T_LL }
1561 #define T_S &short_integer_type_node
1562 #define T89_S { STD_C89, NULL, T_S }
1563 #define T_UI &unsigned_type_node
1564 #define T89_UI { STD_C89, NULL, T_UI }
1565 #define T99_UI { STD_C99, NULL, T_UI }
1566 #define T_UL &long_unsigned_type_node
1567 #define T89_UL { STD_C89, NULL, T_UL }
1568 #define T_ULL &long_long_unsigned_type_node
1569 #define T99_ULL { STD_C99, NULL, T_ULL }
1570 #define TEX_ULL { STD_EXT, NULL, T_ULL }
1571 #define T_US &short_unsigned_type_node
1572 #define T89_US { STD_C89, NULL, T_US }
1573 #define T_F &float_type_node
1574 #define T89_F { STD_C89, NULL, T_F }
1575 #define T99_F { STD_C99, NULL, T_F }
1576 #define T_D &double_type_node
1577 #define T89_D { STD_C89, NULL, T_D }
1578 #define T99_D { STD_C99, NULL, T_D }
1579 #define T_LD &long_double_type_node
1580 #define T89_LD { STD_C89, NULL, T_LD }
1581 #define T99_LD { STD_C99, NULL, T_LD }
1582 #define T_C &char_type_node
1583 #define T89_C { STD_C89, NULL, T_C }
1584 #define T_SC &signed_char_type_node
1585 #define T99_SC { STD_C99, NULL, T_SC }
1586 #define T_UC &unsigned_char_type_node
1587 #define T99_UC { STD_C99, NULL, T_UC }
1588 #define T_V &void_type_node
1589 #define T89_V { STD_C89, NULL, T_V }
1590 #define T_W &wchar_type_node
1591 #define T94_W { STD_C94, "wchar_t", T_W }
1592 #define TEX_W { STD_EXT, "wchar_t", T_W }
1593 #define T_WI &wint_type_node
1594 #define T94_WI { STD_C94, "wint_t", T_WI }
1595 #define TEX_WI { STD_EXT, "wint_t", T_WI }
1596 #define T_ST &c_size_type_node
1597 #define T99_ST { STD_C99, "size_t", T_ST }
1598 #define T_SST &signed_size_type_node
1599 #define T99_SST { STD_C99, "signed size_t", T_SST }
1600 #define T_PD &ptrdiff_type_node
1601 #define T99_PD { STD_C99, "ptrdiff_t", T_PD }
1602 #define T_UPD &unsigned_ptrdiff_type_node
1603 #define T99_UPD { STD_C99, "unsigned ptrdiff_t", T_UPD }
1604 #define T_IM &intmax_type_node
1605 #define T99_IM { STD_C99, "intmax_t", T_IM }
1606 #define T_UIM &uintmax_type_node
1607 #define T99_UIM { STD_C99, "uintmax_t", T_UIM }
1609 static const format_char_info print_char_table[] =
1611 /* C89 conversion specifiers. */
1612 { "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" },
1613 { "oxX", 0, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T99_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "-wp0#", "i" },
1614 { "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" },
1615 { "fgG", 0, STD_C89, { T89_D, BADLEN, BADLEN, T99_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#'", "" },
1616 { "eE", 0, STD_C89, { T89_D, BADLEN, BADLEN, T99_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#", "" },
1617 { "c", 0, STD_C89, { T89_I, BADLEN, BADLEN, T94_WI, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "" },
1618 { "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "c" },
1619 { "p", 1, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "c" },
1620 { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, BADLEN, T99_SST, T99_PD, T99_IM }, "", "W" },
1621 /* C99 conversion specifiers. */
1622 { "F", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#'", "" },
1623 { "aA", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#", "" },
1624 /* X/Open conversion specifiers. */
1625 { "C", 0, STD_EXT, { TEX_WI, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "" },
1626 { "S", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "" },
1627 /* GNU conversion specifiers. */
1628 { "m", 0, STD_EXT, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "" },
1629 { NULL, 0, 0, NOLENGTHS, NULL, NULL }
1632 static const format_char_info scan_char_table[] =
1634 /* C89 conversion specifiers. */
1635 { "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" },
1636 { "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" },
1637 { "oxX", 1, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T99_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "*w", "W" },
1638 { "efgEG", 1, STD_C89, { T89_F, BADLEN, BADLEN, T89_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "*w'", "W" },
1639 { "c", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*w", "cW" },
1640 { "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*aw", "cW" },
1641 { "[", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*aw", "cW[" },
1642 { "p", 2, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*w", "W" },
1643 { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, BADLEN, T99_SST, T99_PD, T99_IM }, "", "W" },
1644 /* C99 conversion specifiers. */
1645 { "FaA", 1, STD_C99, { T99_F, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "*w'", "W" },
1646 /* X/Open conversion specifiers. */
1647 { "C", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*w", "W" },
1648 { "S", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*aw", "W" },
1649 { NULL, 0, 0, NOLENGTHS, NULL, NULL }
1652 static format_char_info time_char_table[] =
1654 /* C89 conversion specifiers. */
1655 { "ABZab", 0, STD_C89, NOLENGTHS, "^#", "" },
1656 { "cx", 0, STD_C89, NOLENGTHS, "E", "3" },
1657 { "HIMSUWdmw", 0, STD_C89, NOLENGTHS, "-_0Ow", "" },
1658 { "j", 0, STD_C89, NOLENGTHS, "-_0Ow", "o" },
1659 { "p", 0, STD_C89, NOLENGTHS, "#", "" },
1660 { "X", 0, STD_C89, NOLENGTHS, "E", "" },
1661 { "y", 0, STD_C89, NOLENGTHS, "EO-_0w", "4" },
1662 { "Y", 0, STD_C89, NOLENGTHS, "-_0EOw", "o" },
1663 { "%", 0, STD_C89, NOLENGTHS, "", "" },
1664 /* C99 conversion specifiers. */
1665 { "C", 0, STD_C99, NOLENGTHS, "-_0EOw", "o" },
1666 { "D", 0, STD_C99, NOLENGTHS, "", "2" },
1667 { "eVu", 0, STD_C99, NOLENGTHS, "-_0Ow", "" },
1668 { "FRTnrt", 0, STD_C99, NOLENGTHS, "", "" },
1669 { "g", 0, STD_C99, NOLENGTHS, "O-_0w", "2o" },
1670 { "G", 0, STD_C99, NOLENGTHS, "-_0Ow", "o" },
1671 { "h", 0, STD_C99, NOLENGTHS, "^#", "" },
1672 { "z", 0, STD_C99, NOLENGTHS, "O", "o" },
1673 /* GNU conversion specifiers. */
1674 { "kls", 0, STD_EXT, NOLENGTHS, "-_0Ow", "" },
1675 { "P", 0, STD_EXT, NOLENGTHS, "", "" },
1676 { NULL, 0, 0, NOLENGTHS, NULL, NULL }
1680 /* This must be in the same order as enum format_type. */
1681 static const format_kind_info format_types[] =
1683 { "printf", printf_length_specs, print_char_table, " +#0-'I", NULL,
1684 printf_flag_specs, printf_flag_pairs,
1685 FMT_FLAG_ARG_CONVERT, 'w', 'p', 0, 'L',
1686 &integer_type_node, &integer_type_node
1688 { "scanf", scanf_length_specs, scan_char_table, "*'I", NULL,
1689 scanf_flag_specs, scanf_flag_pairs,
1690 FMT_FLAG_ARG_CONVERT|FMT_FLAG_SCANF_A_KLUDGE, 'w', 0, '*', 'L',
1693 { "strftime", NULL, time_char_table, "_-0^#", "EO",
1694 strftime_flag_specs, strftime_flag_pairs,
1695 FMT_FLAG_FANCY_PERCENT_OK, 'w', 0, 0, 0,
1701 typedef struct function_format_info
1703 struct function_format_info *next; /* next structure on the list */
1704 tree name; /* identifier such as "printf" */
1705 tree assembler_name; /* optional mangled identifier (for C++) */
1706 enum format_type format_type; /* type of format (printf, scanf, etc.) */
1707 int format_num; /* number of format argument */
1708 int first_arg_num; /* number of first arg (zero for varargs) */
1709 } function_format_info;
1711 static function_format_info *function_format_list = NULL;
1713 typedef struct international_format_info
1715 struct international_format_info *next; /* next structure on the list */
1716 tree name; /* identifier such as "gettext" */
1717 tree assembler_name; /* optional mangled identifier (for C++) */
1718 int format_num; /* number of format argument */
1719 } international_format_info;
1721 static international_format_info *international_format_list = NULL;
1723 static void check_format_info PARAMS ((int *, function_format_info *, tree));
1724 static void status_warning PARAMS ((int *, const char *, ...))
1727 static void init_dollar_format_checking PARAMS ((int, tree));
1728 static int maybe_read_dollar_number PARAMS ((int *, const char **, int,
1730 static void finish_dollar_format_checking PARAMS ((int *));
1732 static const format_flag_spec *get_flag_spec PARAMS ((const format_flag_spec *,
1733 int, const char *));
1735 static void check_format_types PARAMS ((int *, format_wanted_type *));
1736 static int is_valid_printf_arglist PARAMS ((tree));
1737 static rtx c_expand_builtin (tree, rtx, enum machine_mode, enum expand_modifier);
1738 static rtx c_expand_builtin_printf PARAMS ((tree, rtx, enum machine_mode,
1739 enum expand_modifier, int));
1741 /* Initialize the table of functions to perform format checking on.
1742 The ISO C functions are always checked (whether <stdio.h> is
1743 included or not), since it is common to call printf without
1744 including <stdio.h>. There shouldn't be a problem with this,
1745 since ISO C reserves these function names whether you include the
1746 header file or not. In any case, the checking is harmless. With
1747 -ffreestanding, these default attributes are disabled, and must be
1748 specified manually if desired.
1750 Also initialize the name of function that modify the format string for
1751 internationalization purposes. */
1754 init_function_format_info ()
1758 /* Functions from ISO/IEC 9899:1990. */
1759 record_function_format (get_identifier ("printf"), NULL_TREE,
1760 printf_format_type, 1, 2);
1761 record_function_format (get_identifier ("__builtin_printf"), NULL_TREE,
1762 printf_format_type, 1, 2);
1763 record_function_format (get_identifier ("fprintf"), NULL_TREE,
1764 printf_format_type, 2, 3);
1765 record_function_format (get_identifier ("sprintf"), NULL_TREE,
1766 printf_format_type, 2, 3);
1767 record_function_format (get_identifier ("scanf"), NULL_TREE,
1768 scanf_format_type, 1, 2);
1769 record_function_format (get_identifier ("fscanf"), NULL_TREE,
1770 scanf_format_type, 2, 3);
1771 record_function_format (get_identifier ("sscanf"), NULL_TREE,
1772 scanf_format_type, 2, 3);
1773 record_function_format (get_identifier ("vprintf"), NULL_TREE,
1774 printf_format_type, 1, 0);
1775 record_function_format (get_identifier ("vfprintf"), NULL_TREE,
1776 printf_format_type, 2, 0);
1777 record_function_format (get_identifier ("vsprintf"), NULL_TREE,
1778 printf_format_type, 2, 0);
1779 record_function_format (get_identifier ("strftime"), NULL_TREE,
1780 strftime_format_type, 3, 0);
1783 if (flag_hosted && flag_isoc99)
1785 /* ISO C99 adds the snprintf and vscanf family functions. */
1786 record_function_format (get_identifier ("snprintf"), NULL_TREE,
1787 printf_format_type, 3, 4);
1788 record_function_format (get_identifier ("vsnprintf"), NULL_TREE,
1789 printf_format_type, 3, 0);
1790 record_function_format (get_identifier ("vscanf"), NULL_TREE,
1791 scanf_format_type, 1, 0);
1792 record_function_format (get_identifier ("vfscanf"), NULL_TREE,
1793 scanf_format_type, 2, 0);
1794 record_function_format (get_identifier ("vsscanf"), NULL_TREE,
1795 scanf_format_type, 2, 0);
1798 if (flag_hosted && flag_noniso_default_format_attributes)
1800 /* Uniforum/GNU gettext functions, not in ISO C. */
1801 record_international_format (get_identifier ("gettext"), NULL_TREE, 1);
1802 record_international_format (get_identifier ("dgettext"), NULL_TREE, 2);
1803 record_international_format (get_identifier ("dcgettext"), NULL_TREE, 2);
1807 /* Record information for argument format checking. FUNCTION_IDENT is
1808 the identifier node for the name of the function to check (its decl
1809 need not exist yet).
1810 FORMAT_TYPE specifies the type of format checking. FORMAT_NUM is the number
1811 of the argument which is the format control string (starting from 1).
1812 FIRST_ARG_NUM is the number of the first actual argument to check
1813 against the format string, or zero if no checking is not be done
1814 (e.g. for varargs such as vfprintf). */
1817 record_function_format (name, assembler_name, format_type,
1818 format_num, first_arg_num)
1820 tree assembler_name;
1821 enum format_type format_type;
1825 function_format_info *info;
1827 /* Re-use existing structure if it's there. */
1829 for (info = function_format_list; info; info = info->next)
1831 if (info->name == name && info->assembler_name == assembler_name)
1836 info = (function_format_info *) xmalloc (sizeof (function_format_info));
1837 info->next = function_format_list;
1838 function_format_list = info;
1841 info->assembler_name = assembler_name;
1844 info->format_type = format_type;
1845 info->format_num = format_num;
1846 info->first_arg_num = first_arg_num;
1849 /* Record information for the names of function that modify the format
1850 argument to format functions. FUNCTION_IDENT is the identifier node for
1851 the name of the function (its decl need not exist yet) and FORMAT_NUM is
1852 the number of the argument which is the format control string (starting
1856 record_international_format (name, assembler_name, format_num)
1858 tree assembler_name;
1861 international_format_info *info;
1863 /* Re-use existing structure if it's there. */
1865 for (info = international_format_list; info; info = info->next)
1867 if (info->name == name && info->assembler_name == assembler_name)
1874 = (international_format_info *)
1875 xmalloc (sizeof (international_format_info));
1876 info->next = international_format_list;
1877 international_format_list = info;
1880 info->assembler_name = assembler_name;
1883 info->format_num = format_num;
1886 /* Check the argument list of a call to printf, scanf, etc.
1887 NAME is the function identifier.
1888 ASSEMBLER_NAME is the function's assembler identifier.
1889 (Either NAME or ASSEMBLER_NAME, but not both, may be NULL_TREE.)
1890 PARAMS is the list of argument values. */
1893 check_function_format (status, name, assembler_name, params)
1896 tree assembler_name;
1899 function_format_info *info;
1901 /* See if this function is a format function. */
1902 for (info = function_format_list; info; info = info->next)
1904 if (info->assembler_name
1905 ? (info->assembler_name == assembler_name)
1906 : (info->name == name))
1908 /* Yup; check it. */
1909 check_format_info (status, info, params);
1915 /* This function replaces `warning' inside the printf format checking
1916 functions. If the `status' parameter is non-NULL, then it is
1917 dereferenced and set to 1 whenever a warning is caught. Otherwise
1918 it warns as usual by replicating the innards of the warning
1919 function from diagnostic.c. */
1921 status_warning VPARAMS ((int *status, const char *msgid, ...))
1923 #ifndef ANSI_PROTOTYPES
1928 diagnostic_context dc;
1934 VA_START (ap, msgid);
1936 #ifndef ANSI_PROTOTYPES
1937 status = va_arg (ap, int *);
1938 msgid = va_arg (ap, const char *);
1941 /* This duplicates the warning function behavior. */
1942 set_diagnostic_context
1943 (&dc, msgid, &ap, input_filename, lineno, /* warn = */ 1);
1944 report_diagnostic (&dc);
1950 /* Variables used by the checking of $ operand number formats. */
1951 static char *dollar_arguments_used = NULL;
1952 static int dollar_arguments_alloc = 0;
1953 static int dollar_arguments_count;
1954 static int dollar_first_arg_num;
1955 static int dollar_max_arg_used;
1956 static int dollar_format_warned;
1958 /* Initialize the checking for a format string that may contain $
1959 parameter number specifications; we will need to keep track of whether
1960 each parameter has been used. FIRST_ARG_NUM is the number of the first
1961 argument that is a parameter to the format, or 0 for a vprintf-style
1962 function; PARAMS is the list of arguments starting at this argument. */
1965 init_dollar_format_checking (first_arg_num, params)
1969 dollar_first_arg_num = first_arg_num;
1970 dollar_arguments_count = 0;
1971 dollar_max_arg_used = 0;
1972 dollar_format_warned = 0;
1973 if (first_arg_num > 0)
1977 dollar_arguments_count++;
1978 params = TREE_CHAIN (params);
1981 if (dollar_arguments_alloc < dollar_arguments_count)
1983 if (dollar_arguments_used)
1984 free (dollar_arguments_used);
1985 dollar_arguments_alloc = dollar_arguments_count;
1986 dollar_arguments_used = xmalloc (dollar_arguments_alloc);
1988 if (dollar_arguments_alloc)
1989 memset (dollar_arguments_used, 0, dollar_arguments_alloc);
1993 /* Look for a decimal number followed by a $ in *FORMAT. If DOLLAR_NEEDED
1994 is set, it is an error if one is not found; otherwise, it is OK. If
1995 such a number is found, check whether it is within range and mark that
1996 numbered operand as being used for later checking. Returns the operand
1997 number if found and within range, zero if no such number was found and
1998 this is OK, or -1 on error. PARAMS points to the first operand of the
1999 format; PARAM_PTR is made to point to the parameter referred to. If
2000 a $ format is found, *FORMAT is updated to point just after it. */
2003 maybe_read_dollar_number (status, format, dollar_needed, params, param_ptr)
2005 const char **format;
2012 const char *fcp = *format;
2013 if (*fcp < '0' || *fcp > '9')
2017 status_warning (status, "missing $ operand number in format");
2025 while (*fcp >= '0' && *fcp <= '9')
2028 nargnum = 10 * argnum + (*fcp - '0');
2029 if (nargnum < 0 || nargnum / 10 != argnum)
2038 status_warning (status, "missing $ operand number in format");
2045 if (pedantic && !dollar_format_warned)
2047 status_warning (status, "ISO C does not support %%n$ operand number formats");
2048 dollar_format_warned = 1;
2050 if (overflow_flag || argnum == 0
2051 || (dollar_first_arg_num && argnum > dollar_arguments_count))
2053 status_warning (status, "operand number out of range in format");
2056 if (argnum > dollar_max_arg_used)
2057 dollar_max_arg_used = argnum;
2058 /* For vprintf-style functions we may need to allocate more memory to
2059 track which arguments are used. */
2060 while (dollar_arguments_alloc < dollar_max_arg_used)
2063 nalloc = 2 * dollar_arguments_alloc + 16;
2064 dollar_arguments_used = xrealloc (dollar_arguments_used, nalloc);
2065 memset (dollar_arguments_used + dollar_arguments_alloc, 0,
2066 nalloc - dollar_arguments_alloc);
2067 dollar_arguments_alloc = nalloc;
2069 dollar_arguments_used[argnum - 1] = 1;
2070 if (dollar_first_arg_num)
2073 *param_ptr = params;
2074 for (i = 1; i < argnum && *param_ptr != 0; i++)
2075 *param_ptr = TREE_CHAIN (*param_ptr);
2077 if (*param_ptr == 0)
2079 /* This case shouldn't be caught here. */
2089 /* Finish the checking for a format string that used $ operand number formats
2090 instead of non-$ formats. We check for unused operands before used ones
2091 (a serious error, since the implementation of the format function
2092 can't know what types to pass to va_arg to find the later arguments).
2093 and for unused operands at the end of the format (if we know how many
2094 arguments the format had, so not for vprintf). If there were operand
2095 numbers out of range on a non-vprintf-style format, we won't have reached
2099 finish_dollar_format_checking (status)
2103 for (i = 0; i < dollar_max_arg_used; i++)
2105 if (!dollar_arguments_used[i])
2106 status_warning (status, "format argument %d unused before used argument %d in $-style format",
2107 i + 1, dollar_max_arg_used);
2109 if (dollar_first_arg_num && dollar_max_arg_used < dollar_arguments_count)
2110 status_warning (status, "unused arguments in $-style format");
2114 /* Retrieve the specification for a format flag. SPEC contains the
2115 specifications for format flags for the applicable kind of format.
2116 FLAG is the flag in question. If PREDICATES is NULL, the basic
2117 spec for that flag must be retrieved and this function aborts if
2118 it cannot be found. If PREDICATES is not NULL, it is a string listing
2119 possible predicates for the spec entry; if an entry predicated on any
2120 of these is found, it is returned, otherwise NULL is returned. */
2122 static const format_flag_spec *
2123 get_flag_spec (spec, flag, predicates)
2124 const format_flag_spec *spec;
2126 const char *predicates;
2129 for (i = 0; spec[i].flag_char != 0; i++)
2131 if (spec[i].flag_char != flag)
2133 if (predicates != NULL)
2135 if (spec[i].predicate != 0
2136 && index (predicates, spec[i].predicate) != 0)
2139 else if (spec[i].predicate == 0)
2142 if (predicates == NULL)
2149 /* Check the argument list of a call to printf, scanf, etc.
2150 INFO points to the function_format_info structure.
2151 PARAMS is the list of argument values. */
2154 check_format_info (status, info, params)
2156 function_format_info *info;
2162 const char *length_chars = NULL;
2163 enum format_lengths length_chars_val = FMT_LEN_none;
2164 enum format_std_version length_chars_std = STD_C89;
2171 tree main_arg_params;
2172 enum format_std_version wanted_type_std;
2173 const char *wanted_type_name;
2174 format_wanted_type width_wanted_type;
2175 format_wanted_type precision_wanted_type;
2176 format_wanted_type main_wanted_type;
2177 format_wanted_type *first_wanted_type;
2178 format_wanted_type *last_wanted_type;
2179 tree first_fillin_param;
2180 const char *format_chars;
2181 const format_kind_info *fki = NULL;
2182 const format_flag_spec *flag_specs = NULL;
2183 const format_flag_pair *bad_flag_pairs = NULL;
2184 const format_length_info *fli = NULL;
2185 const format_char_info *fci = NULL;
2186 char flag_chars[256];
2187 /* -1 if no conversions taking an operand have been found; 0 if one has
2188 and it didn't use $; 1 if $ formats are in use. */
2189 int has_operand_number = -1;
2191 /* Skip to format argument. If the argument isn't available, there's
2192 no work for us to do; prototype checking will catch the problem. */
2193 for (arg_num = 1; ; ++arg_num)
2197 if (arg_num == info->format_num)
2199 params = TREE_CHAIN (params);
2201 format_tree = TREE_VALUE (params);
2202 params = TREE_CHAIN (params);
2203 if (format_tree == 0)
2206 /* We can only check the format if it's a string constant. */
2207 while (TREE_CODE (format_tree) == NOP_EXPR)
2208 format_tree = TREE_OPERAND (format_tree, 0); /* strip coercion */
2210 if (TREE_CODE (format_tree) == CALL_EXPR
2211 && TREE_CODE (TREE_OPERAND (format_tree, 0)) == ADDR_EXPR
2212 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (format_tree, 0), 0))
2215 tree function = TREE_OPERAND (TREE_OPERAND (format_tree, 0), 0);
2217 /* See if this is a call to a known internationalization function
2218 that modifies the format arg. */
2219 international_format_info *info;
2221 for (info = international_format_list; info; info = info->next)
2222 if (info->assembler_name
2223 ? (info->assembler_name == DECL_ASSEMBLER_NAME (function))
2224 : (info->name == DECL_NAME (function)))
2229 for (inner_args = TREE_OPERAND (format_tree, 1), i = 1;
2231 inner_args = TREE_CHAIN (inner_args), i++)
2232 if (i == info->format_num)
2234 format_tree = TREE_VALUE (inner_args);
2236 while (TREE_CODE (format_tree) == NOP_EXPR)
2237 format_tree = TREE_OPERAND (format_tree, 0);
2242 if (integer_zerop (format_tree))
2244 status_warning (status, "null format string");
2247 if (TREE_CODE (format_tree) != ADDR_EXPR)
2249 /* The user may get multiple warnings if the supplied argument
2250 isn't even a string pointer. */
2251 /* Functions taking a va_list normally pass a non-literal format
2252 string. These functions typically are declared with
2253 first_arg_num == 0, so avoid warning in those cases. */
2254 if (info->first_arg_num != 0 && warn_format > 1)
2255 status_warning (status, "format not a string literal, argument types not checked");
2258 format_tree = TREE_OPERAND (format_tree, 0);
2259 if (TREE_CODE (format_tree) != STRING_CST)
2261 /* The user may get multiple warnings if the supplied argument
2262 isn't even a string pointer. */
2263 /* Functions taking a va_list normally pass a non-literal format
2264 string. These functions typically are declared with
2265 first_arg_num == 0, so avoid warning in those cases. */
2266 if (info->first_arg_num != 0 && warn_format > 1)
2267 status_warning (status, "format not a string literal, argument types not checked");
2270 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (format_tree))) != char_type_node)
2272 status_warning (status, "format is a wide character string");
2275 format_chars = TREE_STRING_POINTER (format_tree);
2276 format_length = TREE_STRING_LENGTH (format_tree);
2277 if (format_length <= 1)
2278 status_warning (status, "zero-length format string");
2279 if (format_chars[--format_length] != 0)
2281 status_warning (status, "unterminated format string");
2284 /* Skip to first argument to check. */
2285 while (arg_num + 1 < info->first_arg_num)
2289 params = TREE_CHAIN (params);
2293 first_fillin_param = params;
2294 init_dollar_format_checking (info->first_arg_num, first_fillin_param);
2295 fki = &format_types[info->format_type];
2296 flag_specs = fki->flag_specs;
2297 bad_flag_pairs = fki->bad_flag_pairs;
2301 first_wanted_type = NULL;
2302 last_wanted_type = NULL;
2303 if (*format_chars == 0)
2305 if (format_chars - TREE_STRING_POINTER (format_tree) != format_length)
2306 status_warning (status, "embedded `\\0' in format");
2307 if (info->first_arg_num != 0 && params != 0
2308 && has_operand_number <= 0)
2309 status_warning (status, "too many arguments for format");
2310 if (has_operand_number > 0)
2311 finish_dollar_format_checking (status);
2314 if (*format_chars++ != '%')
2316 if (*format_chars == 0)
2318 status_warning (status, "spurious trailing `%%' in format");
2321 if (*format_chars == '%')
2329 main_arg_params = 0;
2331 if ((fki->flags & FMT_FLAG_ARG_CONVERT) && has_operand_number != 0)
2333 /* Possibly read a $ operand number at the start of the format.
2334 If one was previously used, one is required here. If one
2335 is not used here, we can't immediately conclude this is a
2336 format without them, since it could be printf %m or scanf %*. */
2338 opnum = maybe_read_dollar_number (status, &format_chars, 0,
2345 has_operand_number = 1;
2346 main_arg_num = opnum + info->first_arg_num - 1;
2350 /* Read any format flags, but do not yet validate them beyond removing
2351 duplicates, since in general validation depends on the rest of
2353 while (*format_chars != 0 && index (fki->flag_chars, *format_chars) != 0)
2355 if (index (flag_chars, *format_chars) != 0)
2357 const format_flag_spec *s = get_flag_spec (flag_specs,
2358 *format_chars, NULL);
2359 status_warning (status, "repeated %s in format", _(s->name));
2363 i = strlen (flag_chars);
2364 flag_chars[i++] = *format_chars;
2370 /* Read any format width, possibly * or *m$. */
2371 if (fki->width_char != 0)
2373 if (fki->width_type != NULL && *format_chars == '*')
2375 i = strlen (flag_chars);
2376 flag_chars[i++] = fki->width_char;
2378 /* "...a field width...may be indicated by an asterisk.
2379 In this case, an int argument supplies the field width..." */
2383 status_warning (status, "too few arguments for format");
2386 if (has_operand_number != 0)
2389 opnum = maybe_read_dollar_number (status, &format_chars,
2390 has_operand_number == 1,
2397 has_operand_number = 1;
2398 arg_num = opnum + info->first_arg_num - 1;
2401 has_operand_number = 0;
2403 if (info->first_arg_num != 0)
2405 cur_param = TREE_VALUE (params);
2406 if (has_operand_number <= 0)
2408 params = TREE_CHAIN (params);
2411 width_wanted_type.wanted_type = *fki->width_type;
2412 width_wanted_type.wanted_type_name = NULL;
2413 width_wanted_type.pointer_count = 0;
2414 width_wanted_type.char_lenient_flag = 0;
2415 width_wanted_type.writing_in_flag = 0;
2416 width_wanted_type.name = _("field width");
2417 width_wanted_type.param = cur_param;
2418 width_wanted_type.arg_num = arg_num;
2419 width_wanted_type.next = NULL;
2420 if (last_wanted_type != 0)
2421 last_wanted_type->next = &width_wanted_type;
2422 if (first_wanted_type == 0)
2423 first_wanted_type = &width_wanted_type;
2424 last_wanted_type = &width_wanted_type;
2429 /* Possibly read a numeric width. If the width is zero,
2430 we complain; for scanf this is bad according to the
2431 standard, and for printf and strftime it cannot occur
2432 because 0 is a flag. */
2433 int non_zero_width_char = FALSE;
2434 int found_width = FALSE;
2435 while (ISDIGIT (*format_chars))
2438 if (*format_chars != '0')
2439 non_zero_width_char = TRUE;
2442 if (found_width && !non_zero_width_char)
2443 status_warning (status, "zero width in scanf format");
2446 i = strlen (flag_chars);
2447 flag_chars[i++] = fki->width_char;
2453 /* Read any format precision, possibly * or *m$. */
2454 if (fki->precision_char != 0 && *format_chars == '.')
2457 i = strlen (flag_chars);
2458 flag_chars[i++] = fki->precision_char;
2460 if (fki->precision_type != NULL && *format_chars == '*')
2462 /* "...a...precision...may be indicated by an asterisk.
2463 In this case, an int argument supplies the...precision." */
2465 if (has_operand_number != 0)
2468 opnum = maybe_read_dollar_number (status, &format_chars,
2469 has_operand_number == 1,
2476 has_operand_number = 1;
2477 arg_num = opnum + info->first_arg_num - 1;
2480 has_operand_number = 0;
2482 if (info->first_arg_num != 0)
2486 status_warning (status, "too few arguments for format");
2489 cur_param = TREE_VALUE (params);
2490 if (has_operand_number <= 0)
2492 params = TREE_CHAIN (params);
2495 precision_wanted_type.wanted_type = *fki->precision_type;
2496 precision_wanted_type.wanted_type_name = NULL;
2497 precision_wanted_type.pointer_count = 0;
2498 precision_wanted_type.char_lenient_flag = 0;
2499 precision_wanted_type.writing_in_flag = 0;
2500 precision_wanted_type.name = _("field precision");
2501 precision_wanted_type.param = cur_param;
2502 precision_wanted_type.arg_num = arg_num;
2503 precision_wanted_type.next = NULL;
2504 if (last_wanted_type != 0)
2505 last_wanted_type->next = &precision_wanted_type;
2506 if (first_wanted_type == 0)
2507 first_wanted_type = &precision_wanted_type;
2508 last_wanted_type = &precision_wanted_type;
2513 while (ISDIGIT (*format_chars))
2518 /* Read any length modifier, if this kind of format has them. */
2519 fli = fki->length_char_specs;
2520 length_chars = NULL;
2521 length_chars_val = FMT_LEN_none;
2522 length_chars_std = STD_C89;
2525 while (fli->name != 0 && fli->name[0] != *format_chars)
2530 if (fli->double_name != 0 && fli->name[0] == *format_chars)
2533 length_chars = fli->double_name;
2534 length_chars_val = fli->double_index;
2535 length_chars_std = fli->double_std;
2539 length_chars = fli->name;
2540 length_chars_val = fli->index;
2541 length_chars_std = fli->std;
2543 i = strlen (flag_chars);
2544 flag_chars[i++] = fki->length_code_char;
2549 /* Warn if the length modifier is non-standard. */
2550 if (length_chars_std == STD_EXT)
2551 status_warning (status, "ISO C does not support the `%s' %s length modifier",
2552 length_chars, fki->name);
2553 else if ((length_chars_std == STD_C99 && !flag_isoc99)
2554 || (length_chars_std == STD_C94 && !flag_isoc94))
2555 status_warning (status, "ISO C89 does not support the `%s' %s length modifier",
2556 length_chars, fki->name);
2560 /* Read any modifier (strftime E/O). */
2561 if (fki->modifier_chars != NULL)
2563 while (*format_chars != 0
2564 && index (fki->modifier_chars, *format_chars) != 0)
2566 if (index (flag_chars, *format_chars) != 0)
2568 const format_flag_spec *s = get_flag_spec (flag_specs,
2569 *format_chars, NULL);
2570 status_warning (status, "repeated %s in format", _(s->name));
2574 i = strlen (flag_chars);
2575 flag_chars[i++] = *format_chars;
2582 /* Handle the scanf allocation kludge. */
2583 if (fki->flags & FMT_FLAG_SCANF_A_KLUDGE)
2585 if (*format_chars == 'a' && !flag_isoc99)
2587 if (format_chars[1] == 's' || format_chars[1] == 'S'
2588 || format_chars[1] == '[')
2590 /* `a' is used as a flag. */
2591 i = strlen (flag_chars);
2592 flag_chars[i++] = 'a';
2599 format_char = *format_chars;
2600 if (format_char == 0
2601 || (!(fki->flags & FMT_FLAG_FANCY_PERCENT_OK) && format_char == '%'))
2603 status_warning (status, "conversion lacks type at end of format");
2607 fci = fki->conversion_specs;
2608 while (fci->format_chars != 0
2609 && index (fci->format_chars, format_char) == 0)
2611 if (fci->format_chars == 0)
2613 if (ISGRAPH(format_char))
2614 status_warning (status, "unknown conversion type character `%c' in format",
2617 status_warning (status, "unknown conversion type character 0x%x in format",
2623 if (fci->std == STD_EXT)
2624 status_warning (status, "ISO C does not support the `%%%c' %s format",
2625 format_char, fki->name);
2626 else if ((fci->std == STD_C99 && !flag_isoc99)
2627 || (fci->std == STD_C94 && !flag_isoc94))
2628 status_warning (status, "ISO C89 does not support the `%%%c' %s format",
2629 format_char, fki->name);
2632 /* Validate the individual flags used, removing any that are invalid. */
2635 for (i = 0; flag_chars[i] != 0; i++)
2637 const format_flag_spec *s = get_flag_spec (flag_specs,
2638 flag_chars[i], NULL);
2639 flag_chars[i - d] = flag_chars[i];
2640 if (flag_chars[i] == fki->length_code_char)
2642 if (index (fci->flag_chars, flag_chars[i]) == 0)
2644 status_warning (status, "%s used with `%%%c' %s format",
2645 _(s->name), format_char, fki->name);
2651 const format_flag_spec *t;
2652 if (s->std == STD_EXT)
2653 status_warning (status, "ISO C does not support %s",
2655 else if ((s->std == STD_C99 && !flag_isoc99)
2656 || (s->std == STD_C94 && !flag_isoc94))
2657 status_warning (status, "ISO C89 does not support %s",
2659 t = get_flag_spec (flag_specs, flag_chars[i], fci->flags2);
2660 if (t != NULL && t->std > s->std)
2662 const char *long_name = (t->long_name != NULL
2665 if (t->std == STD_EXT)
2666 status_warning (status, "ISO C does not support %s with the `%%%c' %s format",
2667 _(long_name), format_char, fki->name);
2668 else if ((t->std == STD_C99 && !flag_isoc99)
2669 || (t->std == STD_C94 && !flag_isoc94))
2670 status_warning (status, "ISO C89 does not support %s with the `%%%c' %s format",
2671 _(long_name), format_char, fki->name);
2675 flag_chars[i - d] = 0;
2679 if ((fki->flags & FMT_FLAG_SCANF_A_KLUDGE)
2680 && index (flag_chars, 'a') != 0)
2683 if (fki->suppression_char
2684 && index (flag_chars, fki->suppression_char) != 0)
2687 /* Validate the pairs of flags used. */
2688 for (i = 0; bad_flag_pairs[i].flag_char1 != 0; i++)
2690 const format_flag_spec *s, *t;
2691 if (index (flag_chars, bad_flag_pairs[i].flag_char1) == 0)
2693 if (index (flag_chars, bad_flag_pairs[i].flag_char2) == 0)
2695 if (bad_flag_pairs[i].predicate != 0
2696 && index (fci->flags2, bad_flag_pairs[i].predicate) == 0)
2698 s = get_flag_spec (flag_specs, bad_flag_pairs[i].flag_char1, NULL);
2699 t = get_flag_spec (flag_specs, bad_flag_pairs[i].flag_char2, NULL);
2700 if (bad_flag_pairs[i].ignored)
2702 if (bad_flag_pairs[i].predicate != 0)
2703 status_warning (status, "%s ignored with %s and `%%%c' %s format",
2704 _(s->name), _(t->name), format_char,
2707 status_warning (status, "%s ignored with %s in %s format",
2708 _(s->name), _(t->name), fki->name);
2712 if (bad_flag_pairs[i].predicate != 0)
2713 status_warning (status, "use of %s and %s together with `%%%c' %s format",
2714 _(s->name), _(t->name), format_char,
2717 status_warning (status, "use of %s and %s together in %s format",
2718 _(s->name), _(t->name), fki->name);
2722 /* Give Y2K warnings. */
2725 if (index (fci->flags2, '4') != 0)
2726 if (index (flag_chars, 'E') != 0)
2730 else if (index (fci->flags2, '3') != 0)
2732 else if (index (fci->flags2, '2') != 0)
2735 status_warning (status, "`%%%c' yields only last 2 digits of year in some locales",
2737 else if (y2k_level == 2)
2738 status_warning (status, "`%%%c' yields only last 2 digits of year", format_char);
2741 if (index (fci->flags2, '[') != 0)
2743 /* Skip over scan set, in case it happens to have '%' in it. */
2744 if (*format_chars == '^')
2746 /* Find closing bracket; if one is hit immediately, then
2747 it's part of the scan set rather than a terminator. */
2748 if (*format_chars == ']')
2750 while (*format_chars && *format_chars != ']')
2752 if (*format_chars != ']')
2753 /* The end of the format string was reached. */
2754 status_warning (status, "no closing `]' for `%%[' format");
2757 if (fki->flags & FMT_FLAG_ARG_CONVERT)
2759 wanted_type = (fci->types[length_chars_val].type
2760 ? *fci->types[length_chars_val].type : 0);
2761 wanted_type_name = fci->types[length_chars_val].name;
2762 wanted_type_std = fci->types[length_chars_val].std;
2763 if (wanted_type == 0)
2765 status_warning (status, "use of `%s' length modifier with `%c' type character",
2766 length_chars, format_char);
2767 /* Heuristic: skip one argument when an invalid length/type
2768 combination is encountered. */
2772 status_warning (status, "too few arguments for format");
2775 params = TREE_CHAIN (params);
2779 /* Warn if non-standard, provided it is more non-standard
2780 than the length and type characters that may already
2781 have been warned for. */
2782 && wanted_type_std > length_chars_std
2783 && wanted_type_std > fci->std)
2785 if (wanted_type_std == STD_EXT)
2786 status_warning (status, "ISO C does not support the `%%%s%c' %s format",
2787 length_chars, format_char, fki->name);
2788 else if ((wanted_type_std == STD_C99 && !flag_isoc99)
2789 || (wanted_type_std == STD_C94 && !flag_isoc94))
2790 status_warning (status, "ISO C89 does not support the `%%%s%c' %s format",
2791 length_chars, format_char, fki->name);
2795 /* Finally. . .check type of argument against desired type! */
2796 if (info->first_arg_num == 0)
2798 if ((fci->pointer_count == 0 && wanted_type == void_type_node)
2801 if (main_arg_num != 0)
2804 status_warning (status, "operand number specified with suppressed assignment");
2806 status_warning (status, "operand number specified for format taking no argument");
2811 if (main_arg_num != 0)
2813 arg_num = main_arg_num;
2814 params = main_arg_params;
2819 if (has_operand_number > 0)
2821 status_warning (status, "missing $ operand number in format");
2825 has_operand_number = 0;
2828 status_warning (status, "too few arguments for format");
2832 cur_param = TREE_VALUE (params);
2833 params = TREE_CHAIN (params);
2834 main_wanted_type.wanted_type = wanted_type;
2835 main_wanted_type.wanted_type_name = wanted_type_name;
2836 main_wanted_type.pointer_count = fci->pointer_count + aflag;
2837 main_wanted_type.char_lenient_flag = 0;
2838 if (index (fci->flags2, 'c') != 0)
2839 main_wanted_type.char_lenient_flag = 1;
2840 main_wanted_type.writing_in_flag = 0;
2841 if (index (fci->flags2, 'W') != 0)
2842 main_wanted_type.writing_in_flag = 1;
2843 main_wanted_type.name = NULL;
2844 main_wanted_type.param = cur_param;
2845 main_wanted_type.arg_num = arg_num;
2846 main_wanted_type.next = NULL;
2847 if (last_wanted_type != 0)
2848 last_wanted_type->next = &main_wanted_type;
2849 if (first_wanted_type == 0)
2850 first_wanted_type = &main_wanted_type;
2851 last_wanted_type = &main_wanted_type;
2854 if (first_wanted_type != 0)
2855 check_format_types (status, first_wanted_type);
2861 /* Check the argument types from a single format conversion (possibly
2862 including width and precision arguments). */
2864 check_format_types (status, types)
2866 format_wanted_type *types;
2868 for (; types != 0; types = types->next)
2878 cur_param = types->param;
2879 cur_type = TREE_TYPE (cur_param);
2880 if (TREE_CODE (cur_type) == ERROR_MARK)
2883 wanted_type = types->wanted_type;
2884 arg_num = types->arg_num;
2886 /* The following should not occur here. */
2887 if (wanted_type == 0)
2889 if (wanted_type == void_type_node && types->pointer_count == 0)
2892 if (types->pointer_count == 0)
2894 promoted_type = simple_type_promotes_to (wanted_type);
2895 if (promoted_type != NULL_TREE)
2896 wanted_type = promoted_type;
2899 STRIP_NOPS (cur_param);
2901 /* Check the types of any additional pointer arguments
2902 that precede the "real" argument. */
2903 for (i = 0; i < types->pointer_count; ++i)
2905 if (TREE_CODE (cur_type) == POINTER_TYPE)
2907 cur_type = TREE_TYPE (cur_type);
2908 if (TREE_CODE (cur_type) == ERROR_MARK)
2911 if (cur_param != 0 && TREE_CODE (cur_param) == ADDR_EXPR)
2912 cur_param = TREE_OPERAND (cur_param, 0);
2916 /* See if this is an attempt to write into a const type with
2917 scanf or with printf "%n". Note: the writing in happens
2918 at the first indirection only, if for example
2919 void * const * is passed to scanf %p; passing
2920 const void ** is simply passing an incompatible type. */
2921 if (types->writing_in_flag
2923 && (TYPE_READONLY (cur_type)
2925 && (TREE_CODE_CLASS (TREE_CODE (cur_param)) == 'c'
2926 || (DECL_P (cur_param)
2927 && TREE_READONLY (cur_param))))))
2928 status_warning (status, "writing into constant object (arg %d)", arg_num);
2930 /* If there are extra type qualifiers beyond the first
2931 indirection, then this makes the types technically
2935 && (TYPE_READONLY (cur_type)
2936 || TYPE_VOLATILE (cur_type)
2937 || TYPE_RESTRICT (cur_type)))
2938 status_warning (status, "extra type qualifiers in format argument (arg %d)",
2944 if (types->pointer_count == 1)
2945 status_warning (status, "format argument is not a pointer (arg %d)", arg_num);
2947 status_warning (status, "format argument is not a pointer to a pointer (arg %d)", arg_num);
2952 if (i < types->pointer_count)
2955 orig_cur_type = cur_type;
2956 cur_type = TYPE_MAIN_VARIANT (cur_type);
2958 /* Check whether the argument type is a character type. This leniency
2959 only applies to certain formats, flagged with 'c'.
2961 if (types->char_lenient_flag)
2962 char_type_flag = (cur_type == char_type_node
2963 || cur_type == signed_char_type_node
2964 || cur_type == unsigned_char_type_node);
2966 /* Check the type of the "real" argument, if there's a type we want. */
2967 if (wanted_type == cur_type)
2969 /* If we want `void *', allow any pointer type.
2970 (Anything else would already have got a warning.)
2971 With -pedantic, only allow pointers to void and to character
2973 if (wanted_type == void_type_node
2974 && (!pedantic || (i == 1 && char_type_flag)))
2976 /* Don't warn about differences merely in signedness, unless
2977 -pedantic. With -pedantic, warn if the type is a pointer
2978 target and not a character type, and for character types at
2979 a second level of indirection. */
2980 if (TREE_CODE (wanted_type) == INTEGER_TYPE
2981 && TREE_CODE (cur_type) == INTEGER_TYPE
2982 && (! pedantic || i == 0 || (i == 1 && char_type_flag))
2983 && (TREE_UNSIGNED (wanted_type)
2984 ? wanted_type == unsigned_type (cur_type)
2985 : wanted_type == signed_type (cur_type)))
2987 /* Likewise, "signed char", "unsigned char" and "char" are
2988 equivalent but the above test won't consider them equivalent. */
2989 if (wanted_type == char_type_node
2990 && (! pedantic || i < 2)
2993 /* Now we have a type mismatch. */
2995 register const char *this;
2996 register const char *that;
2998 this = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (wanted_type)));
3000 if (TYPE_NAME (orig_cur_type) != 0
3001 && TREE_CODE (orig_cur_type) != INTEGER_TYPE
3002 && !(TREE_CODE (orig_cur_type) == POINTER_TYPE
3003 && TREE_CODE (TREE_TYPE (orig_cur_type)) == INTEGER_TYPE))
3005 if (TREE_CODE (TYPE_NAME (orig_cur_type)) == TYPE_DECL
3006 && DECL_NAME (TYPE_NAME (orig_cur_type)) != 0)
3007 that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (orig_cur_type)));
3009 that = IDENTIFIER_POINTER (TYPE_NAME (orig_cur_type));
3012 /* A nameless type can't possibly match what the format wants.
3013 So there will be a warning for it.
3014 Make up a string to describe vaguely what it is. */
3017 if (TREE_CODE (orig_cur_type) == POINTER_TYPE)
3020 that = "different type";
3023 /* Make the warning better in case of mismatch of int vs long. */
3024 if (TREE_CODE (orig_cur_type) == INTEGER_TYPE
3025 && TREE_CODE (wanted_type) == INTEGER_TYPE
3026 && TYPE_PRECISION (orig_cur_type) == TYPE_PRECISION (wanted_type)
3027 && TYPE_NAME (orig_cur_type) != 0
3028 && TREE_CODE (TYPE_NAME (orig_cur_type)) == TYPE_DECL)
3029 that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (orig_cur_type)));
3031 if (strcmp (this, that) != 0)
3033 /* There may be a better name for the format, e.g. size_t,
3034 but we should allow for programs with a perverse typedef
3035 making size_t something other than what the compiler
3037 if (types->wanted_type_name != 0
3038 && strcmp (types->wanted_type_name, that) != 0)
3039 this = types->wanted_type_name;
3040 if (types->name != 0)
3041 status_warning (status, "%s is not type %s (arg %d)", types->name, this,
3044 status_warning (status, "%s format, %s arg (arg %d)", this, that, arg_num);
3050 /* Print a warning if a constant expression had overflow in folding.
3051 Invoke this function on every expression that the language
3052 requires to be a constant expression.
3053 Note the ANSI C standard says it is erroneous for a
3054 constant expression to overflow. */
3057 constant_expression_warning (value)
3060 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
3061 || TREE_CODE (value) == COMPLEX_CST)
3062 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
3063 pedwarn ("overflow in constant expression");
3066 /* Print a warning if an expression had overflow in folding.
3067 Invoke this function on every expression that
3068 (1) appears in the source code, and
3069 (2) might be a constant expression that overflowed, and
3070 (3) is not already checked by convert_and_check;
3071 however, do not invoke this function on operands of explicit casts. */
3074 overflow_warning (value)
3077 if ((TREE_CODE (value) == INTEGER_CST
3078 || (TREE_CODE (value) == COMPLEX_CST
3079 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
3080 && TREE_OVERFLOW (value))
3082 TREE_OVERFLOW (value) = 0;
3083 if (skip_evaluation == 0)
3084 warning ("integer overflow in expression");
3086 else if ((TREE_CODE (value) == REAL_CST
3087 || (TREE_CODE (value) == COMPLEX_CST
3088 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
3089 && TREE_OVERFLOW (value))
3091 TREE_OVERFLOW (value) = 0;
3092 if (skip_evaluation == 0)
3093 warning ("floating point overflow in expression");
3097 /* Print a warning if a large constant is truncated to unsigned,
3098 or if -Wconversion is used and a constant < 0 is converted to unsigned.
3099 Invoke this function on every expression that might be implicitly
3100 converted to an unsigned type. */
3103 unsigned_conversion_warning (result, operand)
3104 tree result, operand;
3106 if (TREE_CODE (operand) == INTEGER_CST
3107 && TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
3108 && TREE_UNSIGNED (TREE_TYPE (result))
3109 && skip_evaluation == 0
3110 && !int_fits_type_p (operand, TREE_TYPE (result)))
3112 if (!int_fits_type_p (operand, signed_type (TREE_TYPE (result))))
3113 /* This detects cases like converting -129 or 256 to unsigned char. */
3114 warning ("large integer implicitly truncated to unsigned type");
3115 else if (warn_conversion)
3116 warning ("negative integer implicitly converted to unsigned type");
3120 /* Convert EXPR to TYPE, warning about conversion problems with constants.
3121 Invoke this function on every expression that is converted implicitly,
3122 i.e. because of language rules and not because of an explicit cast. */
3125 convert_and_check (type, expr)
3128 tree t = convert (type, expr);
3129 if (TREE_CODE (t) == INTEGER_CST)
3131 if (TREE_OVERFLOW (t))
3133 TREE_OVERFLOW (t) = 0;
3135 /* Do not diagnose overflow in a constant expression merely
3136 because a conversion overflowed. */
3137 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
3139 /* No warning for converting 0x80000000 to int. */
3140 if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
3141 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
3142 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
3143 /* If EXPR fits in the unsigned version of TYPE,
3144 don't warn unless pedantic. */
3146 || TREE_UNSIGNED (type)
3147 || ! int_fits_type_p (expr, unsigned_type (type)))
3148 && skip_evaluation == 0)
3149 warning ("overflow in implicit constant conversion");
3152 unsigned_conversion_warning (t, expr);
3158 c_expand_expr_stmt (expr)
3161 /* Do default conversion if safe and possibly important,
3162 in case within ({...}). */
3163 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr))
3164 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
3165 expr = default_conversion (expr);
3167 if (TREE_TYPE (expr) != error_mark_node
3168 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
3169 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
3170 error ("expression statement has incomplete type");
3172 last_expr_type = TREE_TYPE (expr);
3173 add_stmt (build_stmt (EXPR_STMT, expr));
3176 /* Validate the expression after `case' and apply default promotions. */
3179 check_case_value (value)
3182 if (value == NULL_TREE)
3185 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3186 STRIP_TYPE_NOPS (value);
3187 /* In C++, the following is allowed:
3190 switch (...) { case i: ... }
3192 So, we try to reduce the VALUE to a constant that way. */
3193 if (c_language == clk_cplusplus)
3195 value = decl_constant_value (value);
3196 STRIP_TYPE_NOPS (value);
3197 value = fold (value);
3200 if (TREE_CODE (value) != INTEGER_CST
3201 && value != error_mark_node)
3203 error ("case label does not reduce to an integer constant");
3204 value = error_mark_node;
3207 /* Promote char or short to int. */
3208 value = default_conversion (value);
3210 constant_expression_warning (value);
3215 /* Return an integer type with BITS bits of precision,
3216 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
3219 type_for_size (bits, unsignedp)
3223 if (bits == TYPE_PRECISION (integer_type_node))
3224 return unsignedp ? unsigned_type_node : integer_type_node;
3226 if (bits == TYPE_PRECISION (signed_char_type_node))
3227 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3229 if (bits == TYPE_PRECISION (short_integer_type_node))
3230 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3232 if (bits == TYPE_PRECISION (long_integer_type_node))
3233 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3235 if (bits == TYPE_PRECISION (long_long_integer_type_node))
3236 return (unsignedp ? long_long_unsigned_type_node
3237 : long_long_integer_type_node);
3239 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
3240 return (unsignedp ? widest_unsigned_literal_type_node
3241 : widest_integer_literal_type_node);
3243 if (bits <= TYPE_PRECISION (intQI_type_node))
3244 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3246 if (bits <= TYPE_PRECISION (intHI_type_node))
3247 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3249 if (bits <= TYPE_PRECISION (intSI_type_node))
3250 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3252 if (bits <= TYPE_PRECISION (intDI_type_node))
3253 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3258 /* Return a data type that has machine mode MODE.
3259 If the mode is an integer,
3260 then UNSIGNEDP selects between signed and unsigned types. */
3263 type_for_mode (mode, unsignedp)
3264 enum machine_mode mode;
3267 if (mode == TYPE_MODE (integer_type_node))
3268 return unsignedp ? unsigned_type_node : integer_type_node;
3270 if (mode == TYPE_MODE (signed_char_type_node))
3271 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3273 if (mode == TYPE_MODE (short_integer_type_node))
3274 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3276 if (mode == TYPE_MODE (long_integer_type_node))
3277 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3279 if (mode == TYPE_MODE (long_long_integer_type_node))
3280 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
3282 if (mode == TYPE_MODE (widest_integer_literal_type_node))
3283 return unsignedp ? widest_unsigned_literal_type_node
3284 : widest_integer_literal_type_node;
3286 if (mode == TYPE_MODE (intQI_type_node))
3287 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3289 if (mode == TYPE_MODE (intHI_type_node))
3290 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3292 if (mode == TYPE_MODE (intSI_type_node))
3293 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3295 if (mode == TYPE_MODE (intDI_type_node))
3296 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3298 #if HOST_BITS_PER_WIDE_INT >= 64
3299 if (mode == TYPE_MODE (intTI_type_node))
3300 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3303 if (mode == TYPE_MODE (float_type_node))
3304 return float_type_node;
3306 if (mode == TYPE_MODE (double_type_node))
3307 return double_type_node;
3309 if (mode == TYPE_MODE (long_double_type_node))
3310 return long_double_type_node;
3312 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
3313 return build_pointer_type (char_type_node);
3315 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
3316 return build_pointer_type (integer_type_node);
3318 #ifdef VECTOR_MODE_SUPPORTED_P
3319 if (mode == TYPE_MODE (V4SF_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3320 return V4SF_type_node;
3321 if (mode == TYPE_MODE (V4SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3322 return V4SI_type_node;
3323 if (mode == TYPE_MODE (V2SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3324 return V2SI_type_node;
3325 if (mode == TYPE_MODE (V4HI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3326 return V4HI_type_node;
3327 if (mode == TYPE_MODE (V8QI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
3328 return V8QI_type_node;
3334 /* Return an unsigned type the same as TYPE in other respects. */
3336 unsigned_type (type)
3339 tree type1 = TYPE_MAIN_VARIANT (type);
3340 if (type1 == signed_char_type_node || type1 == char_type_node)
3341 return unsigned_char_type_node;
3342 if (type1 == integer_type_node)
3343 return unsigned_type_node;
3344 if (type1 == short_integer_type_node)
3345 return short_unsigned_type_node;
3346 if (type1 == long_integer_type_node)
3347 return long_unsigned_type_node;
3348 if (type1 == long_long_integer_type_node)
3349 return long_long_unsigned_type_node;
3350 if (type1 == widest_integer_literal_type_node)
3351 return widest_unsigned_literal_type_node;
3352 #if HOST_BITS_PER_WIDE_INT >= 64
3353 if (type1 == intTI_type_node)
3354 return unsigned_intTI_type_node;
3356 if (type1 == intDI_type_node)
3357 return unsigned_intDI_type_node;
3358 if (type1 == intSI_type_node)
3359 return unsigned_intSI_type_node;
3360 if (type1 == intHI_type_node)
3361 return unsigned_intHI_type_node;
3362 if (type1 == intQI_type_node)
3363 return unsigned_intQI_type_node;
3365 return signed_or_unsigned_type (1, type);
3368 /* Return a signed type the same as TYPE in other respects. */
3374 tree type1 = TYPE_MAIN_VARIANT (type);
3375 if (type1 == unsigned_char_type_node || type1 == char_type_node)
3376 return signed_char_type_node;
3377 if (type1 == unsigned_type_node)
3378 return integer_type_node;
3379 if (type1 == short_unsigned_type_node)
3380 return short_integer_type_node;
3381 if (type1 == long_unsigned_type_node)
3382 return long_integer_type_node;
3383 if (type1 == long_long_unsigned_type_node)
3384 return long_long_integer_type_node;
3385 if (type1 == widest_unsigned_literal_type_node)
3386 return widest_integer_literal_type_node;
3387 #if HOST_BITS_PER_WIDE_INT >= 64
3388 if (type1 == unsigned_intTI_type_node)
3389 return intTI_type_node;
3391 if (type1 == unsigned_intDI_type_node)
3392 return intDI_type_node;
3393 if (type1 == unsigned_intSI_type_node)
3394 return intSI_type_node;
3395 if (type1 == unsigned_intHI_type_node)
3396 return intHI_type_node;
3397 if (type1 == unsigned_intQI_type_node)
3398 return intQI_type_node;
3400 return signed_or_unsigned_type (0, type);
3403 /* Return a type the same as TYPE except unsigned or
3404 signed according to UNSIGNEDP. */
3407 signed_or_unsigned_type (unsignedp, type)
3411 if (! INTEGRAL_TYPE_P (type)
3412 || TREE_UNSIGNED (type) == unsignedp)
3415 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
3416 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3417 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
3418 return unsignedp ? unsigned_type_node : integer_type_node;
3419 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
3420 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3421 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
3422 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3423 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
3424 return (unsignedp ? long_long_unsigned_type_node
3425 : long_long_integer_type_node);
3426 if (TYPE_PRECISION (type) == TYPE_PRECISION (widest_integer_literal_type_node))
3427 return (unsignedp ? widest_unsigned_literal_type_node
3428 : widest_integer_literal_type_node);
3432 /* Return the minimum number of bits needed to represent VALUE in a
3433 signed or unsigned type, UNSIGNEDP says which. */
3436 min_precision (value, unsignedp)
3442 /* If the value is negative, compute its negative minus 1. The latter
3443 adjustment is because the absolute value of the largest negative value
3444 is one larger than the largest positive value. This is equivalent to
3445 a bit-wise negation, so use that operation instead. */
3447 if (tree_int_cst_sgn (value) < 0)
3448 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
3450 /* Return the number of bits needed, taking into account the fact
3451 that we need one more bit for a signed than unsigned type. */
3453 if (integer_zerop (value))
3456 log = tree_floor_log2 (value);
3458 return log + 1 + ! unsignedp;
3461 /* Print an error message for invalid operands to arith operation CODE.
3462 NOP_EXPR is used as a special case (see truthvalue_conversion). */
3465 binary_op_error (code)
3466 enum tree_code code;
3468 register const char *opname;
3473 error ("invalid truth-value expression");
3477 opname = "+"; break;
3479 opname = "-"; break;
3481 opname = "*"; break;
3483 opname = "max"; break;
3485 opname = "min"; break;
3487 opname = "=="; break;
3489 opname = "!="; break;
3491 opname = "<="; break;
3493 opname = ">="; break;
3495 opname = "<"; break;
3497 opname = ">"; break;
3499 opname = "<<"; break;
3501 opname = ">>"; break;
3502 case TRUNC_MOD_EXPR:
3503 case FLOOR_MOD_EXPR:
3504 opname = "%"; break;
3505 case TRUNC_DIV_EXPR:
3506 case FLOOR_DIV_EXPR:
3507 opname = "/"; break;
3509 opname = "&"; break;
3511 opname = "|"; break;
3512 case TRUTH_ANDIF_EXPR:
3513 opname = "&&"; break;
3514 case TRUTH_ORIF_EXPR:
3515 opname = "||"; break;
3517 opname = "^"; break;
3520 opname = "rotate"; break;
3522 opname = "unknown"; break;
3524 error ("invalid operands to binary %s", opname);
3527 /* Subroutine of build_binary_op, used for comparison operations.
3528 See if the operands have both been converted from subword integer types
3529 and, if so, perhaps change them both back to their original type.
3530 This function is also responsible for converting the two operands
3531 to the proper common type for comparison.
3533 The arguments of this function are all pointers to local variables
3534 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
3535 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
3537 If this function returns nonzero, it means that the comparison has
3538 a constant value. What this function returns is an expression for
3542 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
3543 tree *op0_ptr, *op1_ptr;
3545 enum tree_code *rescode_ptr;
3548 tree op0 = *op0_ptr;
3549 tree op1 = *op1_ptr;
3550 int unsignedp0, unsignedp1;
3552 tree primop0, primop1;
3553 enum tree_code code = *rescode_ptr;
3555 /* Throw away any conversions to wider types
3556 already present in the operands. */
3558 primop0 = get_narrower (op0, &unsignedp0);
3559 primop1 = get_narrower (op1, &unsignedp1);
3561 /* Handle the case that OP0 does not *contain* a conversion
3562 but it *requires* conversion to FINAL_TYPE. */
3564 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
3565 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
3566 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
3567 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
3569 /* If one of the operands must be floated, we cannot optimize. */
3570 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
3571 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
3573 /* If first arg is constant, swap the args (changing operation
3574 so value is preserved), for canonicalization. Don't do this if
3575 the second arg is 0. */
3577 if (TREE_CONSTANT (primop0)
3578 && ! integer_zerop (primop1) && ! real_zerop (primop1))
3580 register tree tem = primop0;
3581 register int temi = unsignedp0;
3589 unsignedp0 = unsignedp1;
3612 *rescode_ptr = code;
3615 /* If comparing an integer against a constant more bits wide,
3616 maybe we can deduce a value of 1 or 0 independent of the data.
3617 Or else truncate the constant now
3618 rather than extend the variable at run time.
3620 This is only interesting if the constant is the wider arg.
3621 Also, it is not safe if the constant is unsigned and the
3622 variable arg is signed, since in this case the variable
3623 would be sign-extended and then regarded as unsigned.
3624 Our technique fails in this case because the lowest/highest
3625 possible unsigned results don't follow naturally from the
3626 lowest/highest possible values of the variable operand.
3627 For just EQ_EXPR and NE_EXPR there is another technique that
3628 could be used: see if the constant can be faithfully represented
3629 in the other operand's type, by truncating it and reextending it
3630 and see if that preserves the constant's value. */
3632 if (!real1 && !real2
3633 && TREE_CODE (primop1) == INTEGER_CST
3634 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
3636 int min_gt, max_gt, min_lt, max_lt;
3637 tree maxval, minval;
3638 /* 1 if comparison is nominally unsigned. */
3639 int unsignedp = TREE_UNSIGNED (*restype_ptr);
3642 type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
3644 /* If TYPE is an enumeration, then we need to get its min/max
3645 values from it's underlying integral type, not the enumerated
3647 if (TREE_CODE (type) == ENUMERAL_TYPE)
3648 type = type_for_size (TYPE_PRECISION (type), unsignedp0);
3650 maxval = TYPE_MAX_VALUE (type);
3651 minval = TYPE_MIN_VALUE (type);
3653 if (unsignedp && !unsignedp0)
3654 *restype_ptr = signed_type (*restype_ptr);
3656 if (TREE_TYPE (primop1) != *restype_ptr)
3657 primop1 = convert (*restype_ptr, primop1);
3658 if (type != *restype_ptr)
3660 minval = convert (*restype_ptr, minval);
3661 maxval = convert (*restype_ptr, maxval);
3664 if (unsignedp && unsignedp0)
3666 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
3667 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
3668 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
3669 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
3673 min_gt = INT_CST_LT (primop1, minval);
3674 max_gt = INT_CST_LT (primop1, maxval);
3675 min_lt = INT_CST_LT (minval, primop1);
3676 max_lt = INT_CST_LT (maxval, primop1);
3680 /* This used to be a switch, but Genix compiler can't handle that. */
3681 if (code == NE_EXPR)
3683 if (max_lt || min_gt)
3684 val = boolean_true_node;
3686 else if (code == EQ_EXPR)
3688 if (max_lt || min_gt)
3689 val = boolean_false_node;
3691 else if (code == LT_EXPR)
3694 val = boolean_true_node;
3696 val = boolean_false_node;
3698 else if (code == GT_EXPR)
3701 val = boolean_true_node;
3703 val = boolean_false_node;
3705 else if (code == LE_EXPR)
3708 val = boolean_true_node;
3710 val = boolean_false_node;
3712 else if (code == GE_EXPR)
3715 val = boolean_true_node;
3717 val = boolean_false_node;
3720 /* If primop0 was sign-extended and unsigned comparison specd,
3721 we did a signed comparison above using the signed type bounds.
3722 But the comparison we output must be unsigned.
3724 Also, for inequalities, VAL is no good; but if the signed
3725 comparison had *any* fixed result, it follows that the
3726 unsigned comparison just tests the sign in reverse
3727 (positive values are LE, negative ones GE).
3728 So we can generate an unsigned comparison
3729 against an extreme value of the signed type. */
3731 if (unsignedp && !unsignedp0)
3738 primop1 = TYPE_MIN_VALUE (type);
3744 primop1 = TYPE_MAX_VALUE (type);
3751 type = unsigned_type (type);
3754 if (!max_gt && !unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
3756 /* This is the case of (char)x >?< 0x80, which people used to use
3757 expecting old C compilers to change the 0x80 into -0x80. */
3758 if (val == boolean_false_node)
3759 warning ("comparison is always false due to limited range of data type");
3760 if (val == boolean_true_node)
3761 warning ("comparison is always true due to limited range of data type");
3764 if (!min_lt && unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
3766 /* This is the case of (unsigned char)x >?< -1 or < 0. */
3767 if (val == boolean_false_node)
3768 warning ("comparison is always false due to limited range of data type");
3769 if (val == boolean_true_node)
3770 warning ("comparison is always true due to limited range of data type");
3775 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3776 if (TREE_SIDE_EFFECTS (primop0))
3777 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
3781 /* Value is not predetermined, but do the comparison
3782 in the type of the operand that is not constant.
3783 TYPE is already properly set. */
3785 else if (real1 && real2
3786 && (TYPE_PRECISION (TREE_TYPE (primop0))
3787 == TYPE_PRECISION (TREE_TYPE (primop1))))
3788 type = TREE_TYPE (primop0);
3790 /* If args' natural types are both narrower than nominal type
3791 and both extend in the same manner, compare them
3792 in the type of the wider arg.
3793 Otherwise must actually extend both to the nominal
3794 common type lest different ways of extending
3796 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
3798 else if (unsignedp0 == unsignedp1 && real1 == real2
3799 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
3800 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
3802 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3803 type = signed_or_unsigned_type (unsignedp0
3804 || TREE_UNSIGNED (*restype_ptr),
3806 /* Make sure shorter operand is extended the right way
3807 to match the longer operand. */
3808 primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
3810 primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
3815 /* Here we must do the comparison on the nominal type
3816 using the args exactly as we received them. */
3817 type = *restype_ptr;
3821 if (!real1 && !real2 && integer_zerop (primop1)
3822 && TREE_UNSIGNED (*restype_ptr))
3828 /* All unsigned values are >= 0, so we warn if extra warnings
3829 are requested. However, if OP0 is a constant that is
3830 >= 0, the signedness of the comparison isn't an issue,
3831 so suppress the warning. */
3832 if (extra_warnings && !in_system_header
3833 && ! (TREE_CODE (primop0) == INTEGER_CST
3834 && ! TREE_OVERFLOW (convert (signed_type (type),
3836 warning ("comparison of unsigned expression >= 0 is always true");
3837 value = boolean_true_node;
3841 if (extra_warnings && !in_system_header
3842 && ! (TREE_CODE (primop0) == INTEGER_CST
3843 && ! TREE_OVERFLOW (convert (signed_type (type),
3845 warning ("comparison of unsigned expression < 0 is always false");
3846 value = boolean_false_node;
3855 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3856 if (TREE_SIDE_EFFECTS (primop0))
3857 return build (COMPOUND_EXPR, TREE_TYPE (value),
3864 *op0_ptr = convert (type, primop0);
3865 *op1_ptr = convert (type, primop1);
3867 *restype_ptr = boolean_type_node;
3872 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
3873 or validate its data type for an `if' or `while' statement or ?..: exp.
3875 This preparation consists of taking the ordinary
3876 representation of an expression expr and producing a valid tree
3877 boolean expression describing whether expr is nonzero. We could
3878 simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1),
3879 but we optimize comparisons, &&, ||, and !.
3881 The resulting type should always be `boolean_type_node'. */
3884 truthvalue_conversion (expr)
3887 if (TREE_CODE (expr) == ERROR_MARK)
3890 #if 0 /* This appears to be wrong for C++. */
3891 /* These really should return error_mark_node after 2.4 is stable.
3892 But not all callers handle ERROR_MARK properly. */
3893 switch (TREE_CODE (TREE_TYPE (expr)))
3896 error ("struct type value used where scalar is required");
3897 return boolean_false_node;
3900 error ("union type value used where scalar is required");
3901 return boolean_false_node;
3904 error ("array type value used where scalar is required");
3905 return boolean_false_node;
3912 switch (TREE_CODE (expr))
3915 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
3916 case TRUTH_ANDIF_EXPR:
3917 case TRUTH_ORIF_EXPR:
3918 case TRUTH_AND_EXPR:
3920 case TRUTH_XOR_EXPR:
3921 case TRUTH_NOT_EXPR:
3922 TREE_TYPE (expr) = boolean_type_node;
3929 return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
3932 return real_zerop (expr) ? boolean_false_node : boolean_true_node;
3935 /* If we are taking the address of a external decl, it might be zero
3936 if it is weak, so we cannot optimize. */
3937 if (DECL_P (TREE_OPERAND (expr, 0))
3938 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
3941 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
3942 return build (COMPOUND_EXPR, boolean_type_node,
3943 TREE_OPERAND (expr, 0), boolean_true_node);
3945 return boolean_true_node;
3948 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3949 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3950 truthvalue_conversion (TREE_OPERAND (expr, 0)),
3951 truthvalue_conversion (TREE_OPERAND (expr, 1)),
3958 /* These don't change whether an object is non-zero or zero. */
3959 return truthvalue_conversion (TREE_OPERAND (expr, 0));
3963 /* These don't change whether an object is zero or non-zero, but
3964 we can't ignore them if their second arg has side-effects. */
3965 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3966 return build (COMPOUND_EXPR, boolean_type_node, TREE_OPERAND (expr, 1),
3967 truthvalue_conversion (TREE_OPERAND (expr, 0)));
3969 return truthvalue_conversion (TREE_OPERAND (expr, 0));
3972 /* Distribute the conversion into the arms of a COND_EXPR. */
3973 return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
3974 truthvalue_conversion (TREE_OPERAND (expr, 1)),
3975 truthvalue_conversion (TREE_OPERAND (expr, 2))));
3978 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
3979 since that affects how `default_conversion' will behave. */
3980 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
3981 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
3983 /* fall through... */
3985 /* If this is widening the argument, we can ignore it. */
3986 if (TYPE_PRECISION (TREE_TYPE (expr))
3987 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
3988 return truthvalue_conversion (TREE_OPERAND (expr, 0));
3992 /* With IEEE arithmetic, x - x may not equal 0, so we can't optimize
3994 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
3995 && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE)
3997 /* fall through... */
3999 /* This and MINUS_EXPR can be changed into a comparison of the
4001 if (TREE_TYPE (TREE_OPERAND (expr, 0))
4002 == TREE_TYPE (TREE_OPERAND (expr, 1)))
4003 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
4004 TREE_OPERAND (expr, 1), 1);
4005 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
4006 fold (build1 (NOP_EXPR,
4007 TREE_TYPE (TREE_OPERAND (expr, 0)),
4008 TREE_OPERAND (expr, 1))), 1);
4011 if (integer_onep (TREE_OPERAND (expr, 1))
4012 && TREE_TYPE (expr) != boolean_type_node)
4013 /* Using convert here would cause infinite recursion. */
4014 return build1 (NOP_EXPR, boolean_type_node, expr);
4018 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
4019 warning ("suggest parentheses around assignment used as truth value");
4026 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
4028 tree tem = save_expr (expr);
4029 return (build_binary_op
4030 ((TREE_SIDE_EFFECTS (expr)
4031 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
4032 truthvalue_conversion (build_unary_op (REALPART_EXPR, tem, 0)),
4033 truthvalue_conversion (build_unary_op (IMAGPART_EXPR, tem, 0)),
4037 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
4041 /* Read the rest of a #-directive from input stream FINPUT.
4042 In normal use, the directive name and the white space after it
4043 have already been read, so they won't be included in the result.
4044 We allow for the fact that the directive line may contain
4045 a newline embedded within a character or string literal which forms
4046 a part of the directive.
4048 The value is a string in a reusable buffer. It remains valid
4049 only until the next time this function is called.
4051 The terminating character ('\n' or EOF) is left in FINPUT for the
4052 caller to re-read. */
4055 get_directive_line (finput)
4056 register FILE *finput;
4058 static char *directive_buffer = NULL;
4059 static unsigned buffer_length = 0;
4061 register char *buffer_limit;
4062 register int looking_for = 0;
4063 register int char_escaped = 0;
4065 if (buffer_length == 0)
4067 directive_buffer = (char *)xmalloc (128);
4068 buffer_length = 128;
4071 buffer_limit = &directive_buffer[buffer_length];
4073 for (p = directive_buffer; ; )
4077 /* Make buffer bigger if it is full. */
4078 if (p >= buffer_limit)
4080 register unsigned bytes_used = (p - directive_buffer);
4084 = (char *)xrealloc (directive_buffer, buffer_length);
4085 p = &directive_buffer[bytes_used];
4086 buffer_limit = &directive_buffer[buffer_length];
4091 /* Discard initial whitespace. */
4092 if ((c == ' ' || c == '\t') && p == directive_buffer)
4095 /* Detect the end of the directive. */
4096 if (looking_for == 0
4097 && (c == '\n' || c == EOF))
4106 return directive_buffer;
4108 /* Handle string and character constant syntax. */
4111 if (looking_for == c && !char_escaped)
4112 looking_for = 0; /* Found terminator... stop looking. */
4115 if (c == '\'' || c == '"')
4116 looking_for = c; /* Don't stop buffering until we see another
4117 one of these (or an EOF). */
4119 /* Handle backslash. */
4120 char_escaped = (c == '\\' && ! char_escaped);
4123 #endif /* USE_CPPLIB */
4125 /* Make a variant type in the proper way for C/C++, propagating qualifiers
4126 down to the element type of an array. */
4129 c_build_qualified_type (type, type_quals)
4133 /* A restrict-qualified pointer type must be a pointer to object or
4134 incomplete type. Note that the use of POINTER_TYPE_P also allows
4135 REFERENCE_TYPEs, which is appropriate for C++. Unfortunately,
4136 the C++ front-end also use POINTER_TYPE for pointer-to-member
4137 values, so even though it should be illegal to use `restrict'
4138 with such an entity we don't flag that here. Thus, special case
4139 code for that case is required in the C++ front-end. */
4140 if ((type_quals & TYPE_QUAL_RESTRICT)
4141 && (!POINTER_TYPE_P (type)
4142 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
4144 error ("invalid use of `restrict'");
4145 type_quals &= ~TYPE_QUAL_RESTRICT;
4148 if (TREE_CODE (type) == ARRAY_TYPE)
4149 return build_array_type (c_build_qualified_type (TREE_TYPE (type),
4151 TYPE_DOMAIN (type));
4152 return build_qualified_type (type, type_quals);
4155 /* Apply the TYPE_QUALS to the new DECL. */
4158 c_apply_type_quals_to_decl (type_quals, decl)
4162 if ((type_quals & TYPE_QUAL_CONST)
4163 || (TREE_TYPE (decl)
4164 && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE))
4165 TREE_READONLY (decl) = 1;
4166 if (type_quals & TYPE_QUAL_VOLATILE)
4168 TREE_SIDE_EFFECTS (decl) = 1;
4169 TREE_THIS_VOLATILE (decl) = 1;
4171 if (type_quals & TYPE_QUAL_RESTRICT)
4173 if (!TREE_TYPE (decl)
4174 || !POINTER_TYPE_P (TREE_TYPE (decl))
4175 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl))))
4176 error ("invalid use of `restrict'");
4177 else if (flag_strict_aliasing)
4179 /* No two restricted pointers can point at the same thing.
4180 However, a restricted pointer can point at the same thing
4181 as an unrestricted pointer, if that unrestricted pointer
4182 is based on the restricted pointer. So, we make the
4183 alias set for the restricted pointer a subset of the
4184 alias set for the type pointed to by the type of the
4187 HOST_WIDE_INT pointed_to_alias_set
4188 = get_alias_set (TREE_TYPE (TREE_TYPE (decl)));
4190 if (pointed_to_alias_set == 0)
4191 /* It's not legal to make a subset of alias set zero. */
4195 DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
4196 record_alias_subset (pointed_to_alias_set,
4197 DECL_POINTER_ALIAS_SET (decl));
4204 /* Return the typed-based alias set for T, which may be an expression
4205 or a type. Return -1 if we don't do anything special. */
4208 lang_get_alias_set (t)
4213 /* Permit type-punning when accessing a union, provided the access
4214 is directly through the union. For example, this code does not
4215 permit taking the address of a union member and then storing
4216 through it. Even the type-punning allowed here is a GCC
4217 extension, albeit a common and useful one; the C standard says
4218 that such accesses have implementation-defined behavior. */
4220 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
4221 u = TREE_OPERAND (u, 0))
4222 if (TREE_CODE (u) == COMPONENT_REF
4223 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
4226 /* If this is a char *, the ANSI C standard says it can alias
4227 anything. Note that all references need do this. */
4228 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'r'
4229 && TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE
4230 && TYPE_PRECISION (TREE_TYPE (t)) == TYPE_PRECISION (char_type_node))
4233 /* That's all the expressions we handle specially. */
4237 /* The C standard specifically allows aliasing between signed and
4238 unsigned variants of the same type. We treat the signed
4239 variant as canonical. */
4240 if (TREE_CODE (t) == INTEGER_TYPE && TREE_UNSIGNED (t))
4242 tree t1 = signed_type (t);
4244 /* t1 == t can happen for boolean nodes which are always unsigned. */
4246 return get_alias_set (t1);
4248 else if (POINTER_TYPE_P (t))
4252 /* Unfortunately, there is no canonical form of a pointer type.
4253 In particular, if we have `typedef int I', then `int *', and
4254 `I *' are different types. So, we have to pick a canonical
4255 representative. We do this below.
4257 Technically, this approach is actually more conservative that
4258 it needs to be. In particular, `const int *' and `int *'
4259 chould be in different alias sets, according to the C and C++
4260 standard, since their types are not the same, and so,
4261 technically, an `int **' and `const int **' cannot point at
4264 But, the standard is wrong. In particular, this code is
4269 const int* const* cipp = &ip;
4271 And, it doesn't make sense for that to be legal unless you
4272 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
4273 the pointed-to types. This issue has been reported to the
4275 t1 = TYPE_MAIN_VARIANT (TREE_TYPE (t));
4276 t1 = ((TREE_CODE (t) == POINTER_TYPE)
4277 ? build_pointer_type (t1) : build_reference_type (t1));
4279 return get_alias_set (t1);
4281 /* It's not yet safe to use alias sets for classes in C++ because
4282 the TYPE_FIELDs list for a class doesn't mention base classes. */
4283 else if (c_language == clk_cplusplus && AGGREGATE_TYPE_P (t))
4289 /* Build tree nodes and builtin functions common to both C and C++ language
4291 CPLUS_MODE is nonzero if we are called from the C++ frontend, we generate
4292 some stricter prototypes in that case.
4293 NO_BUILTINS and NO_NONANSI_BUILTINS contain the respective values of
4294 the language frontend flags flag_no_builtin and
4295 flag_no_nonansi_builtin. */
4298 c_common_nodes_and_builtins (cplus_mode, no_builtins, no_nonansi_builtins)
4299 int cplus_mode, no_builtins, no_nonansi_builtins;
4302 tree memcpy_ftype, memset_ftype, strlen_ftype;
4303 tree bzero_ftype, bcmp_ftype, puts_ftype, printf_ftype;
4304 tree endlink, int_endlink, double_endlink, unsigned_endlink;
4305 tree sizetype_endlink;
4306 tree ptr_ftype, ptr_ftype_unsigned;
4307 tree void_ftype_any, void_ftype_int, int_ftype_any, sizet_ftype_any;
4308 tree double_ftype_double, double_ftype_double_double;
4309 tree float_ftype_float, ldouble_ftype_ldouble;
4310 tree int_ftype_cptr_cptr_sizet;
4311 tree int_ftype_string_string, string_ftype_ptr_ptr;
4312 tree long_ftype_long;
4313 tree longlong_ftype_longlong;
4314 /* Either char* or void*. */
4315 tree traditional_ptr_type_node;
4316 /* Either const char* or const void*. */
4317 tree traditional_cptr_type_node;
4318 tree traditional_len_type_node;
4319 tree traditional_len_endlink;
4320 tree va_list_ref_type_node;
4321 tree va_list_arg_type_node;
4323 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
4324 va_list_type_node));
4326 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
4327 ptrdiff_type_node));
4329 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
4332 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
4334 va_list_arg_type_node = va_list_ref_type_node =
4335 build_pointer_type (TREE_TYPE (va_list_type_node));
4339 va_list_arg_type_node = va_list_type_node;
4340 va_list_ref_type_node = build_reference_type (va_list_type_node);
4343 endlink = void_list_node;
4344 int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
4345 double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
4346 unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
4348 ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
4349 ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
4350 sizetype_endlink = tree_cons (NULL_TREE, TYPE_DOMAIN (sizetype), endlink);
4351 /* We realloc here because sizetype could be int or unsigned. S'ok. */
4352 ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
4354 sizet_ftype_any = build_function_type (sizetype, NULL_TREE);
4355 int_ftype_any = build_function_type (integer_type_node, NULL_TREE);
4356 void_ftype_any = build_function_type (void_type_node, NULL_TREE);
4357 void_ftype = build_function_type (void_type_node, endlink);
4358 void_ftype_int = build_function_type (void_type_node, int_endlink);
4360 = build_function_type (void_type_node,
4361 tree_cons (NULL_TREE, ptr_type_node, endlink));
4364 = build_function_type (float_type_node,
4365 tree_cons (NULL_TREE, float_type_node, endlink));
4368 = build_function_type (double_type_node, double_endlink);
4370 ldouble_ftype_ldouble
4371 = build_function_type (long_double_type_node,
4372 tree_cons (NULL_TREE, long_double_type_node,
4375 double_ftype_double_double
4376 = build_function_type (double_type_node,
4377 tree_cons (NULL_TREE, double_type_node,
4381 = build_function_type (integer_type_node, int_endlink);
4384 = build_function_type (long_integer_type_node,
4385 tree_cons (NULL_TREE, long_integer_type_node,
4388 longlong_ftype_longlong
4389 = build_function_type (long_long_integer_type_node,
4390 tree_cons (NULL_TREE, long_long_integer_type_node,
4393 int_ftype_cptr_cptr_sizet
4394 = build_function_type (integer_type_node,
4395 tree_cons (NULL_TREE, const_ptr_type_node,
4396 tree_cons (NULL_TREE, const_ptr_type_node,
4397 tree_cons (NULL_TREE,
4401 void_zero_node = build_int_2 (0, 0);
4402 TREE_TYPE (void_zero_node) = void_type_node;
4404 /* Prototype for strcpy. */
4405 string_ftype_ptr_ptr
4406 = build_function_type (string_type_node,
4407 tree_cons (NULL_TREE, string_type_node,
4408 tree_cons (NULL_TREE,
4409 const_string_type_node,
4412 traditional_len_type_node = (flag_traditional && ! cplus_mode
4413 ? integer_type_node : sizetype);
4414 traditional_len_endlink = tree_cons (NULL_TREE, traditional_len_type_node,
4417 /* Prototype for strcmp. */
4418 int_ftype_string_string
4419 = build_function_type (integer_type_node,
4420 tree_cons (NULL_TREE, const_string_type_node,
4421 tree_cons (NULL_TREE,
4422 const_string_type_node,
4425 /* Prototype for strlen. */
4427 = build_function_type (traditional_len_type_node,
4428 tree_cons (NULL_TREE, const_string_type_node,
4431 traditional_ptr_type_node = (flag_traditional && ! cplus_mode
4432 ? string_type_node : ptr_type_node);
4433 traditional_cptr_type_node = (flag_traditional && ! cplus_mode
4434 ? const_string_type_node : const_ptr_type_node);
4436 /* Prototype for memcpy. */
4438 = build_function_type (traditional_ptr_type_node,
4439 tree_cons (NULL_TREE, ptr_type_node,
4440 tree_cons (NULL_TREE, const_ptr_type_node,
4441 sizetype_endlink)));
4443 /* Prototype for memset. */
4445 = build_function_type (traditional_ptr_type_node,
4446 tree_cons (NULL_TREE, ptr_type_node,
4447 tree_cons (NULL_TREE, integer_type_node,
4448 tree_cons (NULL_TREE,
4452 /* Prototype for bzero. */
4454 = build_function_type (void_type_node,
4455 tree_cons (NULL_TREE, traditional_ptr_type_node,
4456 traditional_len_endlink));
4458 /* Prototype for bcmp. */
4460 = build_function_type (integer_type_node,
4461 tree_cons (NULL_TREE, traditional_cptr_type_node,
4462 tree_cons (NULL_TREE,
4463 traditional_cptr_type_node,
4464 traditional_len_endlink)));
4466 /* Prototype for puts. */
4468 = build_function_type (integer_type_node,
4469 tree_cons (NULL_TREE, const_string_type_node,
4472 /* Prototype for printf. */
4474 = build_function_type (integer_type_node,
4475 tree_cons (NULL_TREE, const_string_type_node,
4478 builtin_function ("__builtin_constant_p", default_function_type,
4479 BUILT_IN_CONSTANT_P, BUILT_IN_NORMAL, NULL_PTR);
4481 builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
4482 BUILT_IN_RETURN_ADDRESS, BUILT_IN_NORMAL, NULL_PTR);
4484 builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
4485 BUILT_IN_FRAME_ADDRESS, BUILT_IN_NORMAL, NULL_PTR);
4487 builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
4488 BUILT_IN_ALLOCA, BUILT_IN_NORMAL, "alloca");
4489 builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS,
4490 BUILT_IN_NORMAL, NULL_PTR);
4491 /* Define alloca, ffs as builtins.
4492 Declare _exit just to mark it as volatile. */
4493 if (! no_builtins && ! no_nonansi_builtins)
4496 temp = builtin_function ("alloca", ptr_ftype_sizetype,
4497 BUILT_IN_ALLOCA, BUILT_IN_NORMAL, NULL_PTR);
4498 /* Suppress error if redefined as a non-function. */
4499 DECL_BUILT_IN_NONANSI (temp) = 1;
4501 temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS,
4502 BUILT_IN_NORMAL, NULL_PTR);
4503 /* Suppress error if redefined as a non-function. */
4504 DECL_BUILT_IN_NONANSI (temp) = 1;
4505 temp = builtin_function ("_exit", void_ftype_int,
4506 0, NOT_BUILT_IN, NULL_PTR);
4507 TREE_THIS_VOLATILE (temp) = 1;
4508 TREE_SIDE_EFFECTS (temp) = 1;
4509 /* Suppress error if redefined as a non-function. */
4510 DECL_BUILT_IN_NONANSI (temp) = 1;
4512 /* The system prototypes for these functions have many
4513 variations, so don't specify parameters to avoid conflicts.
4514 The expand_* functions check the argument types anyway. */
4515 temp = builtin_function ("bzero", void_ftype_any,
4516 BUILT_IN_BZERO, BUILT_IN_NORMAL, NULL_PTR);
4517 DECL_BUILT_IN_NONANSI (temp) = 1;
4518 temp = builtin_function ("bcmp", int_ftype_any,
4519 BUILT_IN_BCMP, BUILT_IN_NORMAL, NULL_PTR);
4520 DECL_BUILT_IN_NONANSI (temp) = 1;
4523 builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS,
4524 BUILT_IN_NORMAL, NULL_PTR);
4525 builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
4526 BUILT_IN_NORMAL, NULL_PTR);
4527 builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
4528 BUILT_IN_NORMAL, NULL_PTR);
4529 builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
4530 BUILT_IN_NORMAL, NULL_PTR);
4531 builtin_function ("__builtin_labs", long_ftype_long, BUILT_IN_LABS,
4532 BUILT_IN_NORMAL, NULL_PTR);
4533 builtin_function ("__builtin_llabs", longlong_ftype_longlong, BUILT_IN_LLABS,
4534 BUILT_IN_NORMAL, NULL_PTR);
4535 builtin_function ("__builtin_saveregs", ptr_ftype, BUILT_IN_SAVEREGS,
4536 BUILT_IN_NORMAL, NULL_PTR);
4537 builtin_function ("__builtin_classify_type", default_function_type,
4538 BUILT_IN_CLASSIFY_TYPE, BUILT_IN_NORMAL, NULL_PTR);
4539 builtin_function ("__builtin_next_arg", ptr_ftype, BUILT_IN_NEXT_ARG,
4540 BUILT_IN_NORMAL, NULL_PTR);
4541 builtin_function ("__builtin_args_info", int_ftype_int, BUILT_IN_ARGS_INFO,
4542 BUILT_IN_NORMAL, NULL_PTR);
4543 builtin_function ("__builtin_setjmp",
4544 build_function_type (integer_type_node,
4545 tree_cons (NULL_TREE, ptr_type_node,
4547 BUILT_IN_SETJMP, BUILT_IN_NORMAL, NULL_PTR);
4548 builtin_function ("__builtin_longjmp",
4549 build_function_type (void_type_node,
4550 tree_cons (NULL_TREE, ptr_type_node,
4551 tree_cons (NULL_TREE,
4554 BUILT_IN_LONGJMP, BUILT_IN_NORMAL, NULL_PTR);
4555 builtin_function ("__builtin_trap", void_ftype, BUILT_IN_TRAP,
4556 BUILT_IN_NORMAL, NULL_PTR);
4558 /* ISO C99 IEEE Unordered compares. */
4559 builtin_function ("__builtin_isgreater", default_function_type,
4560 BUILT_IN_ISGREATER, BUILT_IN_NORMAL, NULL_PTR);
4561 builtin_function ("__builtin_isgreaterequal", default_function_type,
4562 BUILT_IN_ISGREATEREQUAL, BUILT_IN_NORMAL, NULL_PTR);
4563 builtin_function ("__builtin_isless", default_function_type,
4564 BUILT_IN_ISLESS, BUILT_IN_NORMAL, NULL_PTR);
4565 builtin_function ("__builtin_islessequal", default_function_type,
4566 BUILT_IN_ISLESSEQUAL, BUILT_IN_NORMAL, NULL_PTR);
4567 builtin_function ("__builtin_islessgreater", default_function_type,
4568 BUILT_IN_ISLESSGREATER, BUILT_IN_NORMAL, NULL_PTR);
4569 builtin_function ("__builtin_isunordered", default_function_type,
4570 BUILT_IN_ISUNORDERED, BUILT_IN_NORMAL, NULL_PTR);
4572 /* Untyped call and return. */
4573 builtin_function ("__builtin_apply_args", ptr_ftype,
4574 BUILT_IN_APPLY_ARGS, BUILT_IN_NORMAL, NULL_PTR);
4576 temp = tree_cons (NULL_TREE,
4577 build_pointer_type (build_function_type (void_type_node,
4579 tree_cons (NULL_TREE,
4581 tree_cons (NULL_TREE,
4584 builtin_function ("__builtin_apply",
4585 build_function_type (ptr_type_node, temp),
4586 BUILT_IN_APPLY, BUILT_IN_NORMAL, NULL_PTR);
4587 builtin_function ("__builtin_return", void_ftype_ptr,
4588 BUILT_IN_RETURN, BUILT_IN_NORMAL, NULL_PTR);
4590 /* Support for varargs.h and stdarg.h. */
4591 builtin_function ("__builtin_varargs_start",
4592 build_function_type (void_type_node,
4593 tree_cons (NULL_TREE,
4594 va_list_ref_type_node,
4596 BUILT_IN_VARARGS_START, BUILT_IN_NORMAL, NULL_PTR);
4598 builtin_function ("__builtin_stdarg_start",
4599 build_function_type (void_type_node,
4600 tree_cons (NULL_TREE,
4601 va_list_ref_type_node,
4603 BUILT_IN_STDARG_START, BUILT_IN_NORMAL, NULL_PTR);
4605 builtin_function ("__builtin_va_end",
4606 build_function_type (void_type_node,
4607 tree_cons (NULL_TREE,
4608 va_list_ref_type_node,
4610 BUILT_IN_VA_END, BUILT_IN_NORMAL, NULL_PTR);
4612 builtin_function ("__builtin_va_copy",
4613 build_function_type (void_type_node,
4614 tree_cons (NULL_TREE,
4615 va_list_ref_type_node,
4616 tree_cons (NULL_TREE,
4617 va_list_arg_type_node,
4619 BUILT_IN_VA_COPY, BUILT_IN_NORMAL, NULL_PTR);
4621 /* ??? Ought to be `T __builtin_expect(T, T)' for any type T. */
4622 builtin_function ("__builtin_expect",
4623 build_function_type (long_integer_type_node,
4624 tree_cons (NULL_TREE,
4625 long_integer_type_node,
4626 tree_cons (NULL_TREE,
4627 long_integer_type_node,
4629 BUILT_IN_EXPECT, BUILT_IN_NORMAL, NULL_PTR);
4631 /* Currently under experimentation. */
4632 builtin_function ("__builtin_memcpy", memcpy_ftype, BUILT_IN_MEMCPY,
4633 BUILT_IN_NORMAL, "memcpy");
4634 builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
4635 BUILT_IN_MEMCMP, BUILT_IN_NORMAL, "memcmp");
4636 builtin_function ("__builtin_memset", memset_ftype,
4637 BUILT_IN_MEMSET, BUILT_IN_NORMAL, "memset");
4638 builtin_function ("__builtin_bzero", bzero_ftype,
4639 BUILT_IN_BZERO, BUILT_IN_NORMAL, "bzero");
4640 builtin_function ("__builtin_bcmp", bcmp_ftype,
4641 BUILT_IN_BCMP, BUILT_IN_NORMAL, "bcmp");
4642 builtin_function ("__builtin_strcmp", int_ftype_string_string,
4643 BUILT_IN_STRCMP, BUILT_IN_NORMAL, "strcmp");
4644 builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
4645 BUILT_IN_STRCPY, BUILT_IN_NORMAL, "strcpy");
4646 builtin_function ("__builtin_strlen", strlen_ftype,
4647 BUILT_IN_STRLEN, BUILT_IN_NORMAL, "strlen");
4648 builtin_function ("__builtin_sqrtf", float_ftype_float,
4649 BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtf");
4650 builtin_function ("__builtin_fsqrt", double_ftype_double,
4651 BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrt");
4652 builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
4653 BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtl");
4654 builtin_function ("__builtin_sinf", float_ftype_float,
4655 BUILT_IN_SIN, BUILT_IN_NORMAL, "sinf");
4656 builtin_function ("__builtin_sin", double_ftype_double,
4657 BUILT_IN_SIN, BUILT_IN_NORMAL, "sin");
4658 builtin_function ("__builtin_sinl", ldouble_ftype_ldouble,
4659 BUILT_IN_SIN, BUILT_IN_NORMAL, "sinl");
4660 builtin_function ("__builtin_cosf", float_ftype_float,
4661 BUILT_IN_COS, BUILT_IN_NORMAL, "cosf");
4662 builtin_function ("__builtin_cos", double_ftype_double,
4663 BUILT_IN_COS, BUILT_IN_NORMAL, "cos");
4664 builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
4665 BUILT_IN_COS, BUILT_IN_NORMAL, "cosl");
4666 built_in_decls[BUILT_IN_PUTCHAR] =
4667 builtin_function ("__builtin_putchar", int_ftype_int,
4668 BUILT_IN_PUTCHAR, BUILT_IN_NORMAL, "putchar");
4669 built_in_decls[BUILT_IN_PUTS] =
4670 builtin_function ("__builtin_puts", puts_ftype,
4671 BUILT_IN_PUTS, BUILT_IN_NORMAL, "puts");
4672 builtin_function ("__builtin_printf", printf_ftype,
4673 BUILT_IN_PRINTF, BUILT_IN_FRONTEND, "printf");
4674 /* We declare these without argument so that the initial declaration
4675 for these identifiers is a builtin. That allows us to redeclare
4676 them later with argument without worrying about the explicit
4677 declarations in stdio.h being taken as the initial declaration.
4678 Also, save the _DECL for these so we can use them later. */
4679 built_in_decls[BUILT_IN_FWRITE] =
4680 builtin_function ("__builtin_fwrite", sizet_ftype_any,
4681 BUILT_IN_FWRITE, BUILT_IN_NORMAL, "fwrite");
4682 built_in_decls[BUILT_IN_FPUTC] =
4683 builtin_function ("__builtin_fputc", int_ftype_any,
4684 BUILT_IN_FPUTC, BUILT_IN_NORMAL, "fputc");
4685 built_in_decls[BUILT_IN_FPUTS] =
4686 builtin_function ("__builtin_fputs", int_ftype_any,
4687 BUILT_IN_FPUTS, BUILT_IN_NORMAL, "fputs");
4691 builtin_function ("abs", int_ftype_int, BUILT_IN_ABS,
4692 BUILT_IN_NORMAL, NULL_PTR);
4693 builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS,
4694 BUILT_IN_NORMAL, NULL_PTR);
4695 builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS,
4696 BUILT_IN_NORMAL, NULL_PTR);
4697 builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
4698 BUILT_IN_NORMAL, NULL_PTR);
4699 builtin_function ("labs", long_ftype_long, BUILT_IN_LABS,
4700 BUILT_IN_NORMAL, NULL_PTR);
4701 if (flag_isoc99 || ! no_nonansi_builtins)
4702 builtin_function ("llabs", longlong_ftype_longlong, BUILT_IN_LLABS,
4703 BUILT_IN_NORMAL, NULL_PTR);
4704 builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY,
4705 BUILT_IN_NORMAL, NULL_PTR);
4706 builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
4707 BUILT_IN_NORMAL, NULL_PTR);
4708 builtin_function ("memset", memset_ftype, BUILT_IN_MEMSET,
4709 BUILT_IN_NORMAL, NULL_PTR);
4710 builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
4711 BUILT_IN_NORMAL, NULL_PTR);
4712 builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
4713 BUILT_IN_NORMAL, NULL_PTR);
4714 builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN,
4715 BUILT_IN_NORMAL, NULL_PTR);
4716 builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT,
4717 BUILT_IN_NORMAL, NULL_PTR);
4718 builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT,
4719 BUILT_IN_NORMAL, NULL_PTR);
4720 builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
4721 BUILT_IN_NORMAL, NULL_PTR);
4722 builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN,
4723 BUILT_IN_NORMAL, NULL_PTR);
4724 builtin_function ("sin", double_ftype_double, BUILT_IN_SIN,
4725 BUILT_IN_NORMAL, NULL_PTR);
4726 builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN,
4727 BUILT_IN_NORMAL, NULL_PTR);
4728 builtin_function ("cosf", float_ftype_float, BUILT_IN_COS,
4729 BUILT_IN_NORMAL, NULL_PTR);
4730 builtin_function ("cos", double_ftype_double, BUILT_IN_COS,
4731 BUILT_IN_NORMAL, NULL_PTR);
4732 builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS,
4733 BUILT_IN_NORMAL, NULL_PTR);
4734 builtin_function ("printf", printf_ftype, BUILT_IN_PRINTF,
4735 BUILT_IN_FRONTEND, NULL_PTR);
4736 /* We declare these without argument so that the initial
4737 declaration for these identifiers is a builtin. That allows
4738 us to redeclare them later with argument without worrying
4739 about the explicit declarations in stdio.h being taken as the
4740 initial declaration. */
4741 builtin_function ("fputc", int_ftype_any, BUILT_IN_FPUTC,
4742 BUILT_IN_NORMAL, NULL_PTR);
4743 builtin_function ("fputs", int_ftype_any, BUILT_IN_FPUTS,
4744 BUILT_IN_NORMAL, NULL_PTR);
4746 /* Declare these functions volatile
4747 to avoid spurious "control drops through" warnings. */
4748 temp = builtin_function ("abort", cplus_mode ? void_ftype : void_ftype_any,
4749 0, NOT_BUILT_IN, NULL_PTR);
4750 TREE_THIS_VOLATILE (temp) = 1;
4751 TREE_SIDE_EFFECTS (temp) = 1;
4753 #if 0 /* ??? The C++ frontend used to do this. */
4754 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
4756 DECL_BUILT_IN_NONANSI (temp) = 1;
4758 temp = builtin_function ("exit",
4759 cplus_mode ? void_ftype_int : void_ftype_any,
4760 0, NOT_BUILT_IN, NULL_PTR);
4761 TREE_THIS_VOLATILE (temp) = 1;
4762 TREE_SIDE_EFFECTS (temp) = 1;
4764 #if 0 /* ??? The C++ frontend used to do this. */
4765 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
4767 DECL_BUILT_IN_NONANSI (temp) = 1;
4772 /* Support for these has not been written in either expand_builtin
4773 or build_function_call. */
4774 builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV,
4775 BUILT_IN_NORMAL, NULL_PTR);
4776 builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV,
4777 BUILT_IN_NORMAL, NULL_PTR);
4778 builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
4779 BUILT_IN_NORMAL, NULL_PTR);
4780 builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
4781 BUILT_IN_NORMAL, NULL_PTR);
4782 builtin_function ("__builtin_fmod", double_ftype_double_double,
4783 BUILT_IN_FMOD, BUILT_IN_NORMAL, NULL_PTR);
4784 builtin_function ("__builtin_frem", double_ftype_double_double,
4785 BUILT_IN_FREM, BUILT_IN_NORMAL, NULL_PTR);
4786 builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
4787 BUILT_IN_NORMAL, NULL_PTR);
4788 builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
4789 BUILT_IN_NORMAL, NULL_PTR);
4792 main_identifier_node = get_identifier ("main");
4794 /* ??? Perhaps there's a better place to do this. But it is related
4795 to __builtin_va_arg, so it isn't that off-the-wall. */
4796 lang_type_promotes_to = simple_type_promotes_to;
4800 build_va_arg (expr, type)
4803 return build1 (VA_ARG_EXPR, type, expr);
4806 /* Given a type, apply default promotions wrt unnamed function arguments
4807 and return the new type. Return NULL_TREE if no change. */
4808 /* ??? There is a function of the same name in the C++ front end that
4809 does something similar, but is more thorough and does not return NULL
4810 if no change. We could perhaps share code, but it would make the
4811 self_promoting_type property harder to identify. */
4814 simple_type_promotes_to (type)
4817 if (TYPE_MAIN_VARIANT (type) == float_type_node)
4818 return double_type_node;
4820 if (C_PROMOTING_INTEGER_TYPE_P (type))
4822 /* Traditionally, unsignedness is preserved in default promotions.
4823 Also preserve unsignedness if not really getting any wider. */
4824 if (TREE_UNSIGNED (type)
4825 && (flag_traditional
4826 || TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
4827 return unsigned_type_node;
4828 return integer_type_node;
4834 /* Return 1 if PARMS specifies a fixed number of parameters
4835 and none of their types is affected by default promotions. */
4838 self_promoting_args_p (parms)
4842 for (t = parms; t; t = TREE_CHAIN (t))
4844 register tree type = TREE_VALUE (t);
4846 if (TREE_CHAIN (t) == 0 && type != void_type_node)
4852 if (TYPE_MAIN_VARIANT (type) == float_type_node)
4855 if (C_PROMOTING_INTEGER_TYPE_P (type))
4861 /* Recognize certain built-in functions so we can make tree-codes
4862 other than CALL_EXPR. We do this when it enables fold-const.c
4863 to do something useful. */
4864 /* ??? By rights this should go in builtins.c, but only C and C++
4865 implement build_{binary,unary}_op. Not exactly sure what bits
4866 of functionality are actually needed from those functions, or
4867 where the similar functionality exists in the other front ends. */
4870 expand_tree_builtin (function, params, coerced_params)
4871 tree function, params, coerced_params;
4873 enum tree_code code;
4875 if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
4878 switch (DECL_FUNCTION_CODE (function))
4882 case BUILT_IN_LLABS:
4884 if (coerced_params == 0)
4885 return integer_zero_node;
4886 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
4888 case BUILT_IN_ISGREATER:
4889 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4895 case BUILT_IN_ISGREATEREQUAL:
4896 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4902 case BUILT_IN_ISLESS:
4903 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4909 case BUILT_IN_ISLESSEQUAL:
4910 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4916 case BUILT_IN_ISLESSGREATER:
4917 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4923 case BUILT_IN_ISUNORDERED:
4924 if (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT)
4925 return integer_zero_node;
4926 code = UNORDERED_EXPR;
4934 || TREE_CHAIN (params) == 0)
4936 error ("too few arguments to function `%s'",
4937 IDENTIFIER_POINTER (DECL_NAME (function)));
4938 return error_mark_node;
4940 else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
4942 error ("too many arguments to function `%s'",
4943 IDENTIFIER_POINTER (DECL_NAME (function)));
4944 return error_mark_node;
4947 arg0 = TREE_VALUE (params);
4948 arg1 = TREE_VALUE (TREE_CHAIN (params));
4949 arg0 = build_binary_op (code, arg0, arg1, 0);
4950 if (code != UNORDERED_EXPR)
4951 arg0 = build_unary_op (TRUTH_NOT_EXPR, arg0, 0);
4963 /* Returns non-zero if CODE is the code for a statement. */
4966 statement_code_p (code)
4967 enum tree_code code;
4990 if (lang_statement_code_p)
4991 return (*lang_statement_code_p) (code);
4996 /* Walk the statemen tree, rooted at *tp. Apply FUNC to all the
4997 sub-trees of *TP in a pre-order traversal. FUNC is called with the
4998 DATA and the address of each sub-tree. If FUNC returns a non-NULL
4999 value, the traversal is aborted, and the value returned by FUNC is
5000 returned. If FUNC sets WALK_SUBTREES to zero, then the subtrees of
5001 the node being visited are not walked.
5003 We don't need a without_duplicates variant of this one because the
5004 statement tree is a tree, not a graph. */
5007 walk_stmt_tree (tp, func, data)
5012 enum tree_code code;
5017 #define WALK_SUBTREE(NODE) \
5020 result = walk_stmt_tree (&(NODE), func, data); \
5026 /* Skip empty subtrees. */
5030 /* Skip subtrees below non-statement nodes. */
5031 if (!statement_code_p (TREE_CODE (*tp)))
5034 /* Call the function. */
5036 result = (*func) (tp, &walk_subtrees, data);
5038 /* If we found something, return it. */
5042 /* Even if we didn't, FUNC may have decided that there was nothing
5043 interesting below this point in the tree. */
5047 /* FUNC may have modified the tree, recheck that we're looking at a
5049 code = TREE_CODE (*tp);
5050 if (!statement_code_p (code))
5053 /* Walk over all the sub-trees of this operand. Statement nodes never
5054 contain RTL, and we needn't worry about TARGET_EXPRs. */
5055 len = TREE_CODE_LENGTH (code);
5057 /* Go through the subtrees. We need to do this in forward order so
5058 that the scope of a FOR_EXPR is handled properly. */
5059 for (i = 0; i < len; ++i)
5060 WALK_SUBTREE (TREE_OPERAND (*tp, i));
5062 /* Finally visit the chain. This can be tail-recursion optimized if
5063 we write it this way. */
5064 return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
5069 /* Used to compare case labels. K1 and K2 are actually tree nodes
5070 representing case labels, or NULL_TREE for a `default' label.
5071 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
5072 K2, and 0 if K1 and K2 are equal. */
5075 case_compare (k1, k2)
5079 /* Consider a NULL key (such as arises with a `default' label) to be
5080 smaller than anything else. */
5086 return tree_int_cst_compare ((tree) k1, (tree) k2);
5089 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
5090 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
5091 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
5092 case label was declared using the usual C/C++ syntax, rather than
5093 the GNU case range extension. CASES is a tree containing all the
5094 case ranges processed so far; COND is the condition for the
5095 switch-statement itself. Returns the CASE_LABEL created, or
5096 ERROR_MARK_NODE if no CASE_LABEL is created. */
5099 c_add_case_label (cases, cond, low_value, high_value)
5108 splay_tree_node node;
5110 /* Create the LABEL_DECL itself. */
5111 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
5112 DECL_CONTEXT (label) = current_function_decl;
5114 /* If there was an error processing the switch condition, bail now
5115 before we get more confused. */
5116 if (!cond || cond == error_mark_node)
5118 /* Add a label anyhow so that the back-end doesn't think that
5119 the beginning of the switch is unreachable. */
5121 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
5122 return error_mark_node;
5125 if ((low_value && TREE_TYPE (low_value)
5126 && POINTER_TYPE_P (TREE_TYPE (low_value)))
5127 || (high_value && TREE_TYPE (high_value)
5128 && POINTER_TYPE_P (TREE_TYPE (high_value))))
5129 error ("pointers are not permitted as case values");
5131 /* Case ranges are a GNU extension. */
5132 if (high_value && pedantic)
5134 if (c_language == clk_cplusplus)
5135 pedwarn ("ISO C++ forbids range expressions in switch statements");
5137 pedwarn ("ISO C forbids range expressions in switch statements");
5140 type = TREE_TYPE (cond);
5143 low_value = check_case_value (low_value);
5144 low_value = convert_and_check (type, low_value);
5148 high_value = check_case_value (high_value);
5149 high_value = convert_and_check (type, high_value);
5152 /* If an error has occurred, bail out now. */
5153 if (low_value == error_mark_node || high_value == error_mark_node)
5156 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
5157 return error_mark_node;
5160 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
5161 really a case range, even though it was written that way. Remove
5162 the HIGH_VALUE to simplify later processing. */
5163 if (tree_int_cst_equal (low_value, high_value))
5164 high_value = NULL_TREE;
5165 if (low_value && high_value
5166 && !tree_int_cst_lt (low_value, high_value))
5167 warning ("empty range specified");
5169 /* Look up the LOW_VALUE in the table of case labels we already
5171 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
5172 /* If there was not an exact match, check for overlapping ranges.
5173 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
5174 that's a `default' label and the only overlap is an exact match. */
5175 if (!node && (low_value || high_value))
5177 splay_tree_node low_bound;
5178 splay_tree_node high_bound;
5180 /* Even though there wasn't an exact match, there might be an
5181 overlap between this case range and another case range.
5182 Since we've (inductively) not allowed any overlapping case
5183 ranges, we simply need to find the greatest low case label
5184 that is smaller that LOW_VALUE, and the smallest low case
5185 label that is greater than LOW_VALUE. If there is an overlap
5186 it will occur in one of these two ranges. */
5187 low_bound = splay_tree_predecessor (cases,
5188 (splay_tree_key) low_value);
5189 high_bound = splay_tree_successor (cases,
5190 (splay_tree_key) low_value);
5192 /* Check to see if the LOW_BOUND overlaps. It is smaller than
5193 the LOW_VALUE, so there is no need to check unless the
5194 LOW_BOUND is in fact itself a case range. */
5196 && CASE_HIGH ((tree) low_bound->value)
5197 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
5200 /* Check to see if the HIGH_BOUND overlaps. The low end of that
5201 range is bigger than the low end of the current range, so we
5202 are only interested if the current range is a real range, and
5203 not an ordinary case label. */
5206 && (tree_int_cst_compare ((tree) high_bound->key,
5211 /* If there was an overlap, issue an error. */
5214 tree duplicate = CASE_LABEL_DECL ((tree) node->value);
5218 error ("duplicate (or overlapping) case value");
5219 error_with_decl (duplicate,
5220 "this is the first entry overlapping that value");
5224 error ("duplicate case value") ;
5225 error_with_decl (duplicate, "previously used here");
5229 error ("multiple default labels in one switch");
5230 error_with_decl (duplicate, "this is the first default label");
5233 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
5236 /* Add a CASE_LABEL to the statement-tree. */
5237 case_label = add_stmt (build_case_label (low_value, high_value, label));
5238 /* Register this case label in the splay tree. */
5239 splay_tree_insert (cases,
5240 (splay_tree_key) low_value,
5241 (splay_tree_value) case_label);
5246 /* Mark P (a stmt_tree) for GC. The use of a `void *' for the
5247 parameter allows this function to be used as a GC-marking
5254 stmt_tree st = (stmt_tree) p;
5256 ggc_mark_tree (st->x_last_stmt);
5257 ggc_mark_tree (st->x_last_expr_type);
5260 /* Mark LD for GC. */
5263 c_mark_lang_decl (c)
5264 struct c_lang_decl *c;
5266 ggc_mark_tree (c->saved_tree);
5269 /* Mark F for GC. */
5272 mark_c_language_function (f)
5273 struct language_function *f;
5278 mark_stmt_tree (&f->x_stmt_tree);
5279 ggc_mark_tree (f->x_scope_stmt_stack);
5282 /* Hook used by expand_expr to expand language-specific tree codes. */
5285 c_expand_expr (exp, target, tmode, modifier)
5288 enum machine_mode tmode;
5289 enum expand_modifier modifier;
5291 switch (TREE_CODE (exp))
5298 /* Since expand_expr_stmt calls free_temp_slots after every
5299 expression statement, we must call push_temp_slots here.
5300 Otherwise, any temporaries in use now would be considered
5301 out-of-scope after the first EXPR_STMT from within the
5304 rtl_expr = expand_start_stmt_expr ();
5305 expand_stmt (STMT_EXPR_STMT (exp));
5306 expand_end_stmt_expr (rtl_expr);
5307 result = expand_expr (rtl_expr, target, tmode, modifier);
5315 if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
5316 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
5318 && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
5319 && (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
5320 == BUILT_IN_FRONTEND))
5321 return c_expand_builtin (exp, target, tmode, modifier);
5335 /* Hook used by safe_from_p to handle language-specific tree codes. */
5338 c_safe_from_p (target, exp)
5342 /* We can see statements here when processing the body of a
5343 statement-expression. For a declaration statement declaring a
5344 variable, look at the variable's initializer. */
5345 if (TREE_CODE (exp) == DECL_STMT)
5347 tree decl = DECL_STMT_DECL (exp);
5349 if (TREE_CODE (decl) == VAR_DECL
5350 && DECL_INITIAL (decl)
5351 && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
5355 /* For any statement, we must follow the statement-chain. */
5356 if (statement_code_p (TREE_CODE (exp)) && TREE_CHAIN (exp))
5357 return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
5359 /* Assume everything else is safe. */
5363 /* Tree code classes. */
5365 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
5367 static char c_tree_code_type[] = {
5369 #include "c-common.def"
5373 /* Table indexed by tree code giving number of expression
5374 operands beyond the fixed part of the node structure.
5375 Not used for types or decls. */
5377 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
5379 static int c_tree_code_length[] = {
5381 #include "c-common.def"
5385 /* Names of tree components.
5386 Used for printing out the tree and error messages. */
5387 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
5389 static const char *c_tree_code_name[] = {
5391 #include "c-common.def"
5395 /* Adds the tree codes specific to the C front end to the list of all
5401 memcpy (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE,
5403 (int)LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE);
5404 memcpy (tree_code_length + (int) LAST_AND_UNUSED_TREE_CODE,
5406 (LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (int));
5407 memcpy (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE,
5409 (LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (char *));
5412 #define CALLED_AS_BUILT_IN(NODE) \
5413 (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
5416 c_expand_builtin (exp, target, tmode, modifier)
5419 enum machine_mode tmode;
5420 enum expand_modifier modifier;
5422 tree type = TREE_TYPE (exp);
5423 tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
5424 tree arglist = TREE_OPERAND (exp, 1);
5425 enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
5426 enum tree_code code = TREE_CODE (exp);
5427 const int ignore = (target == const0_rtx
5428 || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
5429 || code == CONVERT_EXPR || code == REFERENCE_EXPR
5430 || code == COND_EXPR)
5431 && TREE_CODE (type) == VOID_TYPE));
5433 if (! optimize && ! CALLED_AS_BUILT_IN (fndecl))
5434 return expand_call (exp, target, ignore);
5438 case BUILT_IN_PRINTF:
5439 target = c_expand_builtin_printf (arglist, target, tmode,
5445 default: /* just do library call, if unknown builtin */
5446 error ("built-in function `%s' not currently supported",
5447 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
5450 /* The switch statement above can drop through to cause the function
5451 to be called normally. */
5452 return expand_call (exp, target, ignore);
5455 /* Check an arglist to *printf for problems. The arglist should start
5456 at the format specifier, with the remaining arguments immediately
5459 is_valid_printf_arglist (arglist)
5462 /* Save this value so we can restore it later. */
5463 const int SAVE_pedantic = pedantic;
5464 int diagnostic_occurred = 0;
5466 /* Set this to a known value so the user setting won't affect code
5469 /* Check to make sure there are no format specifier errors. */
5470 check_function_format (&diagnostic_occurred,
5471 maybe_get_identifier("printf"),
5472 NULL_TREE, arglist);
5474 /* Restore the value of `pedantic'. */
5475 pedantic = SAVE_pedantic;
5477 /* If calling `check_function_format_ptr' produces a warning, we
5478 return false, otherwise we return true. */
5479 return ! diagnostic_occurred;
5482 /* If the arguments passed to printf are suitable for optimizations,
5483 we attempt to transform the call. */
5485 c_expand_builtin_printf (arglist, target, tmode, modifier, ignore)
5488 enum machine_mode tmode;
5489 enum expand_modifier modifier;
5492 tree fn_putchar = built_in_decls[BUILT_IN_PUTCHAR],
5493 fn_puts = built_in_decls[BUILT_IN_PUTS];
5494 tree fn, format_arg, stripped_string;
5496 /* If the return value is used, or the replacement _DECL isn't
5497 initialized, don't do the transformation. */
5498 if (!ignore || !fn_putchar || !fn_puts)
5501 /* Verify the required arguments in the original call. */
5503 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE))
5506 /* Check the specifier vs. the parameters. */
5507 if (!is_valid_printf_arglist (arglist))
5510 format_arg = TREE_VALUE (arglist);
5511 stripped_string = format_arg;
5512 STRIP_NOPS (stripped_string);
5513 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
5514 stripped_string = TREE_OPERAND (stripped_string, 0);
5516 /* If the format specifier isn't a STRING_CST, punt. */
5517 if (TREE_CODE (stripped_string) != STRING_CST)
5520 /* OK! We can attempt optimization. */
5522 /* If the format specifier was "%s\n", call __builtin_puts(arg2). */
5523 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s\n") == 0)
5525 arglist = TREE_CHAIN (arglist);
5528 /* If the format specifier was "%c", call __builtin_putchar (arg2). */
5529 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
5531 arglist = TREE_CHAIN (arglist);
5536 /* We can't handle anything else with % args or %% ... yet. */
5537 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
5540 /* If the resulting constant string has a length of 1, call
5541 putchar. Note, TREE_STRING_LENGTH includes the terminating
5542 NULL in its count. */
5543 if (TREE_STRING_LENGTH (stripped_string) == 2)
5545 /* Given printf("c"), (where c is any one character,)
5546 convert "c"[0] to an int and pass that to the replacement
5548 arglist = build_int_2 (TREE_STRING_POINTER (stripped_string)[0], 0);
5549 arglist = build_tree_list (NULL_TREE, arglist);
5553 /* If the resulting constant was "string\n", call
5554 __builtin_puts("string"). Ensure "string" has at least one
5555 character besides the trailing \n. Note, TREE_STRING_LENGTH
5556 includes the terminating NULL in its count. */
5557 else if (TREE_STRING_LENGTH (stripped_string) > 2
5558 && TREE_STRING_POINTER (stripped_string)
5559 [TREE_STRING_LENGTH (stripped_string) - 2] == '\n')
5561 /* Create a NULL-terminated string that's one char shorter
5562 than the original, stripping off the trailing '\n'. */
5563 const int newlen = TREE_STRING_LENGTH (stripped_string) - 1;
5564 char *newstr = (char *) alloca (newlen);
5565 memcpy (newstr, TREE_STRING_POINTER (stripped_string), newlen - 1);
5566 newstr[newlen - 1] = 0;
5568 arglist = combine_strings (build_string (newlen, newstr));
5569 arglist = build_tree_list (NULL_TREE, arglist);
5573 /* We'd like to arrange to call fputs(string) here, but we
5574 need stdout and don't have a way to get it ... yet. */
5578 return expand_expr (build_function_call (fn, arglist),
5579 (ignore ? const0_rtx : target),