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. */
39 cpp_options parse_options;
40 enum cpp_token cpp_token;
43 #undef WCHAR_TYPE_SIZE
44 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
46 /* The following symbols are subsumed in the c_global_trees array, and
47 listed here individually for documentation purposes.
49 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
51 tree short_integer_type_node;
52 tree long_integer_type_node;
53 tree long_long_integer_type_node;
55 tree short_unsigned_type_node;
56 tree long_unsigned_type_node;
57 tree long_long_unsigned_type_node;
59 tree boolean_type_node;
60 tree boolean_false_node;
61 tree boolean_true_node;
63 tree ptrdiff_type_node;
65 tree unsigned_char_type_node;
66 tree signed_char_type_node;
68 tree signed_wchar_type_node;
69 tree unsigned_wchar_type_node;
72 tree double_type_node;
73 tree long_double_type_node;
75 tree complex_integer_type_node;
76 tree complex_float_type_node;
77 tree complex_double_type_node;
78 tree complex_long_double_type_node;
86 tree unsigned_intQI_type_node;
87 tree unsigned_intHI_type_node;
88 tree unsigned_intSI_type_node;
89 tree unsigned_intDI_type_node;
90 tree unsigned_intTI_type_node;
92 tree widest_integer_literal_type_node;
93 tree widest_unsigned_literal_type_node;
95 Nodes for types `void *' and `const void *'.
97 tree ptr_type_node, const_ptr_type_node;
99 Nodes for types `char *' and `const char *'.
101 tree string_type_node, const_string_type_node;
103 Type `char[SOMENUMBER]'.
104 Used when an array of char is needed and the size is irrelevant.
106 tree char_array_type_node;
108 Type `int[SOMENUMBER]' or something like it.
109 Used when an array of int needed and the size is irrelevant.
111 tree int_array_type_node;
113 Type `wchar_t[SOMENUMBER]' or something like it.
114 Used when a wide string literal is created.
116 tree wchar_array_type_node;
118 Type `int ()' -- used for implicit declaration of functions.
120 tree default_function_type;
122 Function types `int (int)', etc.
128 tree ptr_ftype_sizetype;
130 A VOID_TYPE node, packaged in a TREE_LIST.
136 tree c_global_trees[CTI_MAX];
138 tree (*make_fname_decl) PARAMS ((tree, const char *, int));
140 /* Nonzero means the expression being parsed will never be evaluated.
141 This is a count, since unevaluated expressions can nest. */
144 enum attrs {A_PACKED, A_NOCOMMON, A_COMMON, A_NORETURN, A_CONST, A_T_UNION,
145 A_NO_CHECK_MEMORY_USAGE, A_NO_INSTRUMENT_FUNCTION,
146 A_CONSTRUCTOR, A_DESTRUCTOR, A_MODE, A_SECTION, A_ALIGNED,
147 A_UNUSED, A_FORMAT, A_FORMAT_ARG, A_WEAK, A_ALIAS, A_MALLOC,
148 A_NO_LIMIT_STACK, A_PURE};
150 enum format_type { printf_format_type, scanf_format_type,
151 strftime_format_type };
153 static void add_attribute PARAMS ((enum attrs, const char *,
155 static void init_attributes PARAMS ((void));
156 static void record_function_format PARAMS ((tree, tree, enum format_type,
158 static void record_international_format PARAMS ((tree, tree, int));
159 static tree c_find_base_decl PARAMS ((tree));
160 static int default_valid_lang_attribute PARAMS ((tree, tree, tree, tree));
162 /* Keep a stack of if statements. We record the number of compound
163 statements seen up to the if keyword, as well as the line number
164 and file of the if. If a potentially ambiguous else is seen, that
165 fact is recorded; the warning is issued when we can be sure that
166 the enclosing if statement does not have an else branch. */
174 static void tfaff PARAMS ((void));
176 static if_elt *if_stack;
178 /* Amount of space in the if statement stack. */
179 static int if_stack_space = 0;
182 static int if_stack_pointer = 0;
184 /* Generate RTL for the start of an if-then, and record the start of it
185 for ambiguous else detection. */
188 c_expand_start_cond (cond, exitflag, compstmt_count)
193 /* Make sure there is enough space on the stack. */
194 if (if_stack_space == 0)
197 if_stack = (if_elt *)xmalloc (10 * sizeof (if_elt));
199 else if (if_stack_space == if_stack_pointer)
201 if_stack_space += 10;
202 if_stack = (if_elt *)xrealloc (if_stack, if_stack_space * sizeof (if_elt));
205 /* Record this if statement. */
206 if_stack[if_stack_pointer].compstmt_count = compstmt_count;
207 if_stack[if_stack_pointer].file = input_filename;
208 if_stack[if_stack_pointer].line = lineno;
209 if_stack[if_stack_pointer].needs_warning = 0;
212 expand_start_cond (cond, exitflag);
215 /* Generate RTL for the end of an if-then. Optionally warn if a nested
216 if statement had an ambiguous else clause. */
222 if (if_stack[if_stack_pointer].needs_warning)
223 warning_with_file_and_line (if_stack[if_stack_pointer].file,
224 if_stack[if_stack_pointer].line,
225 "suggest explicit braces to avoid ambiguous `else'");
229 /* Generate RTL between the then-clause and the else-clause
230 of an if-then-else. */
233 c_expand_start_else ()
235 /* An ambiguous else warning must be generated for the enclosing if
236 statement, unless we see an else branch for that one, too. */
238 && if_stack_pointer > 1
239 && (if_stack[if_stack_pointer - 1].compstmt_count
240 == if_stack[if_stack_pointer - 2].compstmt_count))
241 if_stack[if_stack_pointer - 2].needs_warning = 1;
243 /* Even if a nested if statement had an else branch, it can't be
244 ambiguous if this one also has an else. So don't warn in that
245 case. Also don't warn for any if statements nested in this else. */
246 if_stack[if_stack_pointer - 1].needs_warning = 0;
247 if_stack[if_stack_pointer - 1].compstmt_count--;
249 expand_start_else ();
252 /* Make bindings for __FUNCTION__, __PRETTY_FUNCTION__, and __func__. */
255 declare_function_name ()
257 const char *name, *printable_name;
259 if (current_function_decl == NULL)
262 printable_name = "top level";
266 /* Allow functions to be nameless (such as artificial ones). */
267 if (DECL_NAME (current_function_decl))
268 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
271 printable_name = (*decl_printable_name) (current_function_decl, 2);
274 (*make_fname_decl) (get_identifier ("__FUNCTION__"), name, 0);
275 (*make_fname_decl) (get_identifier ("__PRETTY_FUNCTION__"), printable_name, 1);
276 /* The ISO C people "of course" couldn't use __FUNCTION__ in the
277 ISO C 99 standard; instead a new variable is invented. */
278 (*make_fname_decl) (get_identifier ("__func__"), name, 0);
281 /* Given a chain of STRING_CST nodes,
282 concatenate them into one STRING_CST
283 and give it a suitable array-of-chars data type. */
286 combine_strings (strings)
289 register tree value, t;
290 register int length = 1;
293 int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
296 if (TREE_CHAIN (strings))
298 /* More than one in the chain, so concatenate. */
299 register char *p, *q;
301 /* Don't include the \0 at the end of each substring,
302 except for the last one.
303 Count wide strings and ordinary strings separately. */
304 for (t = strings; t; t = TREE_CHAIN (t))
306 if (TREE_TYPE (t) == wchar_array_type_node)
308 wide_length += (TREE_STRING_LENGTH (t) - wchar_bytes);
312 length += (TREE_STRING_LENGTH (t) - 1);
315 /* If anything is wide, the non-wides will be converted,
316 which makes them take more space. */
318 length = length * wchar_bytes + wide_length;
320 p = ggc_alloc_string (NULL, length);
322 /* Copy the individual strings into the new combined string.
323 If the combined string is wide, convert the chars to ints
324 for any individual strings that are not wide. */
327 for (t = strings; t; t = TREE_CHAIN (t))
329 int len = (TREE_STRING_LENGTH (t)
330 - ((TREE_TYPE (t) == wchar_array_type_node)
332 if ((TREE_TYPE (t) == wchar_array_type_node) == wide_flag)
334 memcpy (q, TREE_STRING_POINTER (t), len);
340 for (i = 0; i < len; i++)
342 if (WCHAR_TYPE_SIZE == HOST_BITS_PER_SHORT)
343 ((short *) q)[i] = TREE_STRING_POINTER (t)[i];
345 ((int *) q)[i] = TREE_STRING_POINTER (t)[i];
347 q += len * wchar_bytes;
353 for (i = 0; i < wchar_bytes; i++)
359 value = make_node (STRING_CST);
360 TREE_STRING_POINTER (value) = p;
361 TREE_STRING_LENGTH (value) = length;
366 length = TREE_STRING_LENGTH (value);
367 if (TREE_TYPE (value) == wchar_array_type_node)
371 /* Compute the number of elements, for the array type. */
372 nchars = wide_flag ? length / wchar_bytes : length;
374 /* Create the array type for the string constant.
375 -Wwrite-strings says make the string constant an array of const char
376 so that copying it to a non-const pointer will get a warning.
377 For C++, this is the standard behavior. */
378 if (flag_const_strings
379 && (! flag_traditional && ! flag_writable_strings))
382 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
385 = build_array_type (elements,
386 build_index_type (build_int_2 (nchars - 1, 0)));
390 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
391 build_index_type (build_int_2 (nchars - 1, 0)));
393 TREE_CONSTANT (value) = 1;
394 TREE_READONLY (value) = ! flag_writable_strings;
395 TREE_STATIC (value) = 1;
399 /* To speed up processing of attributes, we maintain an array of
400 IDENTIFIER_NODES and the corresponding attribute types. */
402 /* Array to hold attribute information. */
404 static struct {enum attrs id; tree name; int min, max, decl_req;} attrtab[50];
406 static int attrtab_idx = 0;
408 /* Add an entry to the attribute table above. */
411 add_attribute (id, string, min_len, max_len, decl_req)
414 int min_len, max_len;
419 attrtab[attrtab_idx].id = id;
420 attrtab[attrtab_idx].name = get_identifier (string);
421 attrtab[attrtab_idx].min = min_len;
422 attrtab[attrtab_idx].max = max_len;
423 attrtab[attrtab_idx++].decl_req = decl_req;
425 sprintf (buf, "__%s__", string);
427 attrtab[attrtab_idx].id = id;
428 attrtab[attrtab_idx].name = get_identifier (buf);
429 attrtab[attrtab_idx].min = min_len;
430 attrtab[attrtab_idx].max = max_len;
431 attrtab[attrtab_idx++].decl_req = decl_req;
434 /* Initialize attribute table. */
439 add_attribute (A_PACKED, "packed", 0, 0, 0);
440 add_attribute (A_NOCOMMON, "nocommon", 0, 0, 1);
441 add_attribute (A_COMMON, "common", 0, 0, 1);
442 add_attribute (A_NORETURN, "noreturn", 0, 0, 1);
443 add_attribute (A_NORETURN, "volatile", 0, 0, 1);
444 add_attribute (A_UNUSED, "unused", 0, 0, 0);
445 add_attribute (A_CONST, "const", 0, 0, 1);
446 add_attribute (A_T_UNION, "transparent_union", 0, 0, 0);
447 add_attribute (A_CONSTRUCTOR, "constructor", 0, 0, 1);
448 add_attribute (A_DESTRUCTOR, "destructor", 0, 0, 1);
449 add_attribute (A_MODE, "mode", 1, 1, 1);
450 add_attribute (A_SECTION, "section", 1, 1, 1);
451 add_attribute (A_ALIGNED, "aligned", 0, 1, 0);
452 add_attribute (A_FORMAT, "format", 3, 3, 1);
453 add_attribute (A_FORMAT_ARG, "format_arg", 1, 1, 1);
454 add_attribute (A_WEAK, "weak", 0, 0, 1);
455 add_attribute (A_ALIAS, "alias", 1, 1, 1);
456 add_attribute (A_NO_INSTRUMENT_FUNCTION, "no_instrument_function", 0, 0, 1);
457 add_attribute (A_NO_CHECK_MEMORY_USAGE, "no_check_memory_usage", 0, 0, 1);
458 add_attribute (A_MALLOC, "malloc", 0, 0, 1);
459 add_attribute (A_NO_LIMIT_STACK, "no_stack_limit", 0, 0, 1);
460 add_attribute (A_PURE, "pure", 0, 0, 1);
463 /* Default implementation of valid_lang_attribute, below. By default, there
464 are no language-specific attributes. */
467 default_valid_lang_attribute (attr_name, attr_args, decl, type)
468 tree attr_name ATTRIBUTE_UNUSED;
469 tree attr_args ATTRIBUTE_UNUSED;
470 tree decl ATTRIBUTE_UNUSED;
471 tree type ATTRIBUTE_UNUSED;
476 /* Return a 1 if ATTR_NAME and ATTR_ARGS denote a valid language-specific
477 attribute for either declaration DECL or type TYPE and 0 otherwise. */
479 int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree))
480 = default_valid_lang_attribute;
482 /* Process the attributes listed in ATTRIBUTES and PREFIX_ATTRIBUTES
483 and install them in NODE, which is either a DECL (including a TYPE_DECL)
484 or a TYPE. PREFIX_ATTRIBUTES can appear after the declaration specifiers
485 and declaration modifiers but before the declaration proper. */
488 decl_attributes (node, attributes, prefix_attributes)
489 tree node, attributes, prefix_attributes;
491 tree decl = 0, type = 0;
495 if (attrtab_idx == 0)
501 type = TREE_TYPE (decl);
502 is_type = TREE_CODE (node) == TYPE_DECL;
504 else if (TYPE_P (node))
505 type = node, is_type = 1;
507 #ifdef PRAGMA_INSERT_ATTRIBUTES
508 /* If the code in c-pragma.c wants to insert some attributes then
509 allow it to do so. Do this before allowing machine back ends to
510 insert attributes, so that they have the opportunity to override
511 anything done here. */
512 PRAGMA_INSERT_ATTRIBUTES (node, & attributes, & prefix_attributes);
515 #ifdef INSERT_ATTRIBUTES
516 INSERT_ATTRIBUTES (node, & attributes, & prefix_attributes);
519 attributes = chainon (prefix_attributes, attributes);
521 for (a = attributes; a; a = TREE_CHAIN (a))
523 tree name = TREE_PURPOSE (a);
524 tree args = TREE_VALUE (a);
528 for (i = 0; i < attrtab_idx; i++)
529 if (attrtab[i].name == name)
532 if (i == attrtab_idx)
534 if (! valid_machine_attribute (name, args, decl, type)
535 && ! (* valid_lang_attribute) (name, args, decl, type))
536 warning ("`%s' attribute directive ignored",
537 IDENTIFIER_POINTER (name));
539 type = TREE_TYPE (decl);
542 else if (attrtab[i].decl_req && decl == 0)
544 warning ("`%s' attribute does not apply to types",
545 IDENTIFIER_POINTER (name));
548 else if (list_length (args) < attrtab[i].min
549 || list_length (args) > attrtab[i].max)
551 error ("wrong number of arguments specified for `%s' attribute",
552 IDENTIFIER_POINTER (name));
561 TYPE_PACKED (type) = 1;
562 else if (TREE_CODE (decl) == FIELD_DECL)
563 DECL_PACKED (decl) = 1;
564 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
565 used for DECL_REGISTER. It wouldn't mean anything anyway. */
567 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
571 if (TREE_CODE (decl) == VAR_DECL)
572 DECL_COMMON (decl) = 0;
574 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
578 if (TREE_CODE (decl) == VAR_DECL)
579 DECL_COMMON (decl) = 1;
581 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
585 if (TREE_CODE (decl) == FUNCTION_DECL)
586 TREE_THIS_VOLATILE (decl) = 1;
587 else if (TREE_CODE (type) == POINTER_TYPE
588 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
589 TREE_TYPE (decl) = type
591 (build_type_variant (TREE_TYPE (type),
592 TREE_READONLY (TREE_TYPE (type)), 1));
594 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
598 if (TREE_CODE (decl) == FUNCTION_DECL)
599 DECL_IS_MALLOC (decl) = 1;
600 /* ??? TODO: Support types. */
602 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
607 TREE_USED (type) = 1;
608 else if (TREE_CODE (decl) == PARM_DECL
609 || TREE_CODE (decl) == VAR_DECL
610 || TREE_CODE (decl) == FUNCTION_DECL
611 || TREE_CODE (decl) == LABEL_DECL)
612 TREE_USED (decl) = 1;
614 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
618 if (TREE_CODE (decl) == FUNCTION_DECL)
619 TREE_READONLY (decl) = 1;
620 else if (TREE_CODE (type) == POINTER_TYPE
621 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
622 TREE_TYPE (decl) = type
624 (build_type_variant (TREE_TYPE (type), 1,
625 TREE_THIS_VOLATILE (TREE_TYPE (type))));
627 warning ( "`%s' attribute ignored", IDENTIFIER_POINTER (name));
631 if (TREE_CODE (decl) == FUNCTION_DECL)
632 DECL_IS_PURE (decl) = 1;
633 /* ??? TODO: Support types. */
635 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
641 && TREE_CODE (type) == UNION_TYPE
643 || (TYPE_FIELDS (type) != 0
644 && TYPE_MODE (type) == DECL_MODE (TYPE_FIELDS (type)))))
645 TYPE_TRANSPARENT_UNION (type) = 1;
646 else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
647 && TREE_CODE (type) == UNION_TYPE
648 && TYPE_MODE (type) == DECL_MODE (TYPE_FIELDS (type)))
649 DECL_TRANSPARENT_UNION (decl) = 1;
651 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
655 if (TREE_CODE (decl) == FUNCTION_DECL
656 && TREE_CODE (type) == FUNCTION_TYPE
657 && decl_function_context (decl) == 0)
659 DECL_STATIC_CONSTRUCTOR (decl) = 1;
660 TREE_USED (decl) = 1;
663 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
667 if (TREE_CODE (decl) == FUNCTION_DECL
668 && TREE_CODE (type) == FUNCTION_TYPE
669 && decl_function_context (decl) == 0)
671 DECL_STATIC_DESTRUCTOR (decl) = 1;
672 TREE_USED (decl) = 1;
675 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
679 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
680 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
684 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
685 int len = strlen (p);
686 enum machine_mode mode = VOIDmode;
689 if (len > 4 && p[0] == '_' && p[1] == '_'
690 && p[len - 1] == '_' && p[len - 2] == '_')
692 char *newp = (char *) alloca (len - 1);
694 strcpy (newp, &p[2]);
695 newp[len - 4] = '\0';
699 /* Give this decl a type with the specified mode.
700 First check for the special modes. */
701 if (! strcmp (p, "byte"))
703 else if (!strcmp (p, "word"))
705 else if (! strcmp (p, "pointer"))
708 for (j = 0; j < NUM_MACHINE_MODES; j++)
709 if (!strcmp (p, GET_MODE_NAME (j)))
710 mode = (enum machine_mode) j;
712 if (mode == VOIDmode)
713 error ("unknown machine mode `%s'", p);
714 else if (0 == (typefm = type_for_mode (mode,
715 TREE_UNSIGNED (type))))
716 error ("no data type for mode `%s'", p);
719 TREE_TYPE (decl) = type = typefm;
720 DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
721 layout_decl (decl, 0);
727 #ifdef ASM_OUTPUT_SECTION_NAME
728 if ((TREE_CODE (decl) == FUNCTION_DECL
729 || TREE_CODE (decl) == VAR_DECL)
730 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
732 if (TREE_CODE (decl) == VAR_DECL
733 && current_function_decl != NULL_TREE
734 && ! TREE_STATIC (decl))
735 error_with_decl (decl,
736 "section attribute cannot be specified for local variables");
737 /* The decl may have already been given a section attribute from
738 a previous declaration. Ensure they match. */
739 else if (DECL_SECTION_NAME (decl) != NULL_TREE
740 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
741 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
742 error_with_decl (node,
743 "section of `%s' conflicts with previous declaration");
745 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
748 error_with_decl (node,
749 "section attribute not allowed for `%s'");
751 error_with_decl (node,
752 "section attributes are not supported for this target");
759 = (args ? TREE_VALUE (args)
760 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
763 /* Strip any NOPs of any kind. */
764 while (TREE_CODE (align_expr) == NOP_EXPR
765 || TREE_CODE (align_expr) == CONVERT_EXPR
766 || TREE_CODE (align_expr) == NON_LVALUE_EXPR)
767 align_expr = TREE_OPERAND (align_expr, 0);
769 if (TREE_CODE (align_expr) != INTEGER_CST)
771 error ("requested alignment is not a constant");
775 if ((i = tree_log2 (align_expr)) == -1)
776 error ("requested alignment is not a power of 2");
777 else if (i > HOST_BITS_PER_INT - 2)
778 error ("requested alignment is too large");
780 TYPE_ALIGN (type) = (1 << i) * BITS_PER_UNIT;
781 else if (TREE_CODE (decl) != VAR_DECL
782 && TREE_CODE (decl) != FIELD_DECL)
783 error_with_decl (decl,
784 "alignment may not be specified for `%s'");
786 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
792 tree format_type_id = TREE_VALUE (args);
793 tree format_num_expr = TREE_VALUE (TREE_CHAIN (args));
794 tree first_arg_num_expr
795 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (args)));
796 unsigned HOST_WIDE_INT format_num, first_arg_num;
797 enum format_type format_type;
799 unsigned int arg_num;
801 if (TREE_CODE (decl) != FUNCTION_DECL)
803 error_with_decl (decl,
804 "argument format specified for non-function `%s'");
808 if (TREE_CODE (format_type_id) != IDENTIFIER_NODE)
810 error ("unrecognized format specifier");
815 const char *p = IDENTIFIER_POINTER (format_type_id);
817 if (!strcmp (p, "printf") || !strcmp (p, "__printf__"))
818 format_type = printf_format_type;
819 else if (!strcmp (p, "scanf") || !strcmp (p, "__scanf__"))
820 format_type = scanf_format_type;
821 else if (!strcmp (p, "strftime")
822 || !strcmp (p, "__strftime__"))
823 format_type = strftime_format_type;
826 warning ("`%s' is an unrecognized format function type", p);
831 /* Strip any conversions from the string index and first arg number
832 and verify they are constants. */
833 while (TREE_CODE (format_num_expr) == NOP_EXPR
834 || TREE_CODE (format_num_expr) == CONVERT_EXPR
835 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
836 format_num_expr = TREE_OPERAND (format_num_expr, 0);
838 while (TREE_CODE (first_arg_num_expr) == NOP_EXPR
839 || TREE_CODE (first_arg_num_expr) == CONVERT_EXPR
840 || TREE_CODE (first_arg_num_expr) == NON_LVALUE_EXPR)
841 first_arg_num_expr = TREE_OPERAND (first_arg_num_expr, 0);
843 if (TREE_CODE (format_num_expr) != INTEGER_CST
844 || TREE_INT_CST_HIGH (format_num_expr) != 0
845 || TREE_CODE (first_arg_num_expr) != INTEGER_CST
846 || TREE_INT_CST_HIGH (first_arg_num_expr) != 0)
848 error ("format string has invalid operand number");
852 format_num = TREE_INT_CST_LOW (format_num_expr);
853 first_arg_num = TREE_INT_CST_LOW (first_arg_num_expr);
854 if (first_arg_num != 0 && first_arg_num <= format_num)
856 error ("format string arg follows the args to be formatted");
860 /* If a parameter list is specified, verify that the format_num
861 argument is actually a string, in case the format attribute
863 argument = TYPE_ARG_TYPES (type);
866 for (arg_num = 1; argument != 0 && arg_num != format_num;
867 ++arg_num, argument = TREE_CHAIN (argument))
871 || TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE
872 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument)))
875 error ("format string arg not a string type");
879 else if (first_arg_num != 0)
881 /* Verify that first_arg_num points to the last arg,
884 arg_num++, argument = TREE_CHAIN (argument);
886 if (arg_num != first_arg_num)
888 error ("args to be formatted is not '...'");
894 record_function_format (DECL_NAME (decl),
895 DECL_ASSEMBLER_NAME (decl),
896 format_type, format_num, first_arg_num);
902 tree format_num_expr = TREE_VALUE (args);
903 unsigned HOST_WIDE_INT format_num;
904 unsigned int arg_num;
907 if (TREE_CODE (decl) != FUNCTION_DECL)
909 error_with_decl (decl,
910 "argument format specified for non-function `%s'");
914 /* Strip any conversions from the first arg number and verify it
916 while (TREE_CODE (format_num_expr) == NOP_EXPR
917 || TREE_CODE (format_num_expr) == CONVERT_EXPR
918 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
919 format_num_expr = TREE_OPERAND (format_num_expr, 0);
921 if (TREE_CODE (format_num_expr) != INTEGER_CST
922 || TREE_INT_CST_HIGH (format_num_expr) != 0)
924 error ("format string has invalid operand number");
928 format_num = TREE_INT_CST_LOW (format_num_expr);
930 /* If a parameter list is specified, verify that the format_num
931 argument is actually a string, in case the format attribute
933 argument = TYPE_ARG_TYPES (type);
936 for (arg_num = 1; argument != 0 && arg_num != format_num;
937 ++arg_num, argument = TREE_CHAIN (argument))
941 || TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE
942 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument)))
945 error ("format string arg not a string type");
950 if (TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) != POINTER_TYPE
951 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (TREE_TYPE (decl))))
954 error ("function does not return string type");
958 record_international_format (DECL_NAME (decl),
959 DECL_ASSEMBLER_NAME (decl),
969 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
970 || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl)))
971 error_with_decl (decl,
972 "`%s' defined both normally and as an alias");
973 else if (decl_function_context (decl) == 0)
977 id = TREE_VALUE (args);
978 if (TREE_CODE (id) != STRING_CST)
980 error ("alias arg not a string");
983 id = get_identifier (TREE_STRING_POINTER (id));
984 /* This counts as a use of the object pointed to. */
987 if (TREE_CODE (decl) == FUNCTION_DECL)
988 DECL_INITIAL (decl) = error_mark_node;
990 DECL_EXTERNAL (decl) = 0;
991 assemble_alias (decl, id);
994 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
997 case A_NO_CHECK_MEMORY_USAGE:
998 if (TREE_CODE (decl) != FUNCTION_DECL)
1000 error_with_decl (decl,
1001 "`%s' attribute applies only to functions",
1002 IDENTIFIER_POINTER (name));
1004 else if (DECL_INITIAL (decl))
1006 error_with_decl (decl,
1007 "can't set `%s' attribute after definition",
1008 IDENTIFIER_POINTER (name));
1011 DECL_NO_CHECK_MEMORY_USAGE (decl) = 1;
1014 case A_NO_INSTRUMENT_FUNCTION:
1015 if (TREE_CODE (decl) != FUNCTION_DECL)
1017 error_with_decl (decl,
1018 "`%s' attribute applies only to functions",
1019 IDENTIFIER_POINTER (name));
1021 else if (DECL_INITIAL (decl))
1023 error_with_decl (decl,
1024 "can't set `%s' attribute after definition",
1025 IDENTIFIER_POINTER (name));
1028 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
1031 case A_NO_LIMIT_STACK:
1032 if (TREE_CODE (decl) != FUNCTION_DECL)
1034 error_with_decl (decl,
1035 "`%s' attribute applies only to functions",
1036 IDENTIFIER_POINTER (name));
1038 else if (DECL_INITIAL (decl))
1040 error_with_decl (decl,
1041 "can't set `%s' attribute after definition",
1042 IDENTIFIER_POINTER (name));
1045 DECL_NO_LIMIT_STACK (decl) = 1;
1051 /* Split SPECS_ATTRS, a list of declspecs and prefix attributes, into two
1052 lists. SPECS_ATTRS may also be just a typespec (eg: RECORD_TYPE).
1054 The head of the declspec list is stored in DECLSPECS.
1055 The head of the attribute list is stored in PREFIX_ATTRIBUTES.
1057 Note that attributes in SPECS_ATTRS are stored in the TREE_PURPOSE of
1058 the list elements. We drop the containing TREE_LIST nodes and link the
1059 resulting attributes together the way decl_attributes expects them. */
1062 split_specs_attrs (specs_attrs, declspecs, prefix_attributes)
1064 tree *declspecs, *prefix_attributes;
1066 tree t, s, a, next, specs, attrs;
1068 /* This can happen after an __extension__ in pedantic mode. */
1069 if (specs_attrs != NULL_TREE
1070 && TREE_CODE (specs_attrs) == INTEGER_CST)
1072 *declspecs = NULL_TREE;
1073 *prefix_attributes = NULL_TREE;
1077 /* This can happen in c++ (eg: decl: typespec initdecls ';'). */
1078 if (specs_attrs != NULL_TREE
1079 && TREE_CODE (specs_attrs) != TREE_LIST)
1081 *declspecs = specs_attrs;
1082 *prefix_attributes = NULL_TREE;
1086 /* Remember to keep the lists in the same order, element-wise. */
1088 specs = s = NULL_TREE;
1089 attrs = a = NULL_TREE;
1090 for (t = specs_attrs; t; t = next)
1092 next = TREE_CHAIN (t);
1093 /* Declspecs have a non-NULL TREE_VALUE. */
1094 if (TREE_VALUE (t) != NULL_TREE)
1096 if (specs == NULL_TREE)
1106 if (attrs == NULL_TREE)
1107 attrs = a = TREE_PURPOSE (t);
1110 TREE_CHAIN (a) = TREE_PURPOSE (t);
1111 a = TREE_PURPOSE (t);
1113 /* More attrs can be linked here, move A to the end. */
1114 while (TREE_CHAIN (a) != NULL_TREE)
1119 /* Terminate the lists. */
1121 TREE_CHAIN (s) = NULL_TREE;
1123 TREE_CHAIN (a) = NULL_TREE;
1127 *prefix_attributes = attrs;
1130 /* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes.
1131 This function is used by the parser when a rule will accept attributes
1132 in a particular position, but we don't want to support that just yet.
1134 A warning is issued for every ignored attribute. */
1137 strip_attrs (specs_attrs)
1142 split_specs_attrs (specs_attrs, &specs, &attrs);
1146 warning ("`%s' attribute ignored",
1147 IDENTIFIER_POINTER (TREE_PURPOSE (attrs)));
1148 attrs = TREE_CHAIN (attrs);
1154 /* Check a printf/fprintf/sprintf/scanf/fscanf/sscanf format against
1155 a parameter list. */
1157 #define T_I &integer_type_node
1158 #define T_L &long_integer_type_node
1159 #define T_LL &long_long_integer_type_node
1160 #define T_S &short_integer_type_node
1161 #define T_UI &unsigned_type_node
1162 #define T_UL &long_unsigned_type_node
1163 #define T_ULL &long_long_unsigned_type_node
1164 #define T_US &short_unsigned_type_node
1165 #define T_F &float_type_node
1166 #define T_D &double_type_node
1167 #define T_LD &long_double_type_node
1168 #define T_C &char_type_node
1169 #define T_UC &unsigned_char_type_node
1170 #define T_V &void_type_node
1171 #define T_W &wchar_type_node
1172 #define T_ST &sizetype
1175 const char *format_chars;
1177 /* Type of argument if no length modifier is used. */
1179 /* Type of argument if length modifier for shortening to byte is used.
1180 If NULL, then this modifier is not allowed. */
1182 /* Type of argument if length modifier for shortening is used.
1183 If NULL, then this modifier is not allowed. */
1185 /* Type of argument if length modifier `l' is used.
1186 If NULL, then this modifier is not allowed. */
1188 /* Type of argument if length modifier `q' or `ll' is used.
1189 If NULL, then this modifier is not allowed. */
1191 /* Type of argument if length modifier `L' is used.
1192 If NULL, then this modifier is not allowed. */
1194 /* Type of argument if length modifiers 'z' or `Z' is used.
1195 If NULL, then this modifier is not allowed. */
1197 /* List of other modifier characters allowed with these options. */
1198 const char *flag_chars;
1201 static format_char_info print_char_table[] = {
1202 { "di", 0, T_I, T_I, T_I, T_L, T_LL, T_LL, T_ST, "-wp0 +" },
1203 { "oxX", 0, T_UI, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0#" },
1204 { "u", 0, T_UI, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0" },
1205 /* A GNU extension. */
1206 { "m", 0, T_V, NULL, NULL, NULL, NULL, NULL, NULL, "-wp" },
1207 { "feEgGaA", 0, T_D, NULL, NULL, NULL, NULL, T_LD, NULL, "-wp0 +#" },
1208 { "c", 0, T_I, NULL, NULL, T_W, NULL, NULL, NULL, "-w" },
1209 { "C", 0, T_W, NULL, NULL, NULL, NULL, NULL, NULL, "-w" },
1210 { "s", 1, T_C, NULL, NULL, T_W, NULL, NULL, NULL, "-wp" },
1211 { "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, NULL, "-wp" },
1212 { "p", 1, T_V, NULL, NULL, NULL, NULL, NULL, NULL, "-w" },
1213 { "n", 1, T_I, NULL, T_S, T_L, T_LL, NULL, NULL, "" },
1214 { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
1217 static format_char_info scan_char_table[] = {
1218 { "di", 1, T_I, T_C, T_S, T_L, T_LL, T_LL, NULL, "*" },
1219 { "ouxX", 1, T_UI, T_UC, T_US, T_UL, T_ULL, T_ULL, NULL, "*" },
1220 { "efgEGaA", 1, T_F, NULL, NULL, T_D, NULL, T_LD, NULL, "*" },
1221 { "c", 1, T_C, NULL, NULL, T_W, NULL, NULL, NULL, "*" },
1222 { "s", 1, T_C, NULL, NULL, T_W, NULL, NULL, NULL, "*a" },
1223 { "[", 1, T_C, NULL, NULL, NULL, NULL, NULL, NULL, "*a" },
1224 { "C", 1, T_W, NULL, NULL, NULL, NULL, NULL, NULL, "*" },
1225 { "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, NULL, "*a" },
1226 { "p", 2, T_V, NULL, NULL, NULL, NULL, NULL, NULL, "*" },
1227 { "n", 1, T_I, T_C, T_S, T_L, T_LL, NULL, NULL, "" },
1228 { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
1231 /* Handle format characters recognized by glibc's strftime.c.
1232 '2' - MUST do years as only two digits
1233 '3' - MAY do years as only two digits (depending on locale)
1234 'E' - E modifier is acceptable
1235 'O' - O modifier is acceptable to Standard C
1236 'o' - O modifier is acceptable as a GNU extension
1237 'G' - other GNU extensions */
1239 static format_char_info time_char_table[] = {
1240 { "y", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "2EO-_0w" },
1241 { "D", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "2" },
1242 { "g", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "2O-_0w" },
1243 { "cx", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "3E" },
1244 { "%RTXnrt", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "" },
1245 { "P", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "G" },
1246 { "HIMSUWdemw", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0Ow" },
1247 { "Vju", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0Oow" },
1248 { "Gklsz", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0OGw" },
1249 { "ABZa", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "^#" },
1250 { "p", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "#" },
1251 { "bh", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "^" },
1252 { "CY", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0EOw" },
1253 { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
1256 typedef struct function_format_info
1258 struct function_format_info *next; /* next structure on the list */
1259 tree name; /* identifier such as "printf" */
1260 tree assembler_name; /* optional mangled identifier (for C++) */
1261 enum format_type format_type; /* type of format (printf, scanf, etc.) */
1262 int format_num; /* number of format argument */
1263 int first_arg_num; /* number of first arg (zero for varargs) */
1264 } function_format_info;
1266 static function_format_info *function_format_list = NULL;
1268 typedef struct international_format_info
1270 struct international_format_info *next; /* next structure on the list */
1271 tree name; /* identifier such as "gettext" */
1272 tree assembler_name; /* optional mangled identifier (for C++) */
1273 int format_num; /* number of format argument */
1274 } international_format_info;
1276 static international_format_info *international_format_list = NULL;
1278 static void check_format_info PARAMS ((function_format_info *, tree));
1280 /* Initialize the table of functions to perform format checking on.
1281 The ANSI functions are always checked (whether <stdio.h> is
1282 included or not), since it is common to call printf without
1283 including <stdio.h>. There shouldn't be a problem with this,
1284 since ANSI reserves these function names whether you include the
1285 header file or not. In any case, the checking is harmless.
1287 Also initialize the name of function that modify the format string for
1288 internationalization purposes. */
1291 init_function_format_info ()
1293 record_function_format (get_identifier ("printf"), NULL_TREE,
1294 printf_format_type, 1, 2);
1295 record_function_format (get_identifier ("fprintf"), NULL_TREE,
1296 printf_format_type, 2, 3);
1297 record_function_format (get_identifier ("sprintf"), NULL_TREE,
1298 printf_format_type, 2, 3);
1299 record_function_format (get_identifier ("scanf"), NULL_TREE,
1300 scanf_format_type, 1, 2);
1301 record_function_format (get_identifier ("fscanf"), NULL_TREE,
1302 scanf_format_type, 2, 3);
1303 record_function_format (get_identifier ("sscanf"), NULL_TREE,
1304 scanf_format_type, 2, 3);
1305 record_function_format (get_identifier ("vprintf"), NULL_TREE,
1306 printf_format_type, 1, 0);
1307 record_function_format (get_identifier ("vfprintf"), NULL_TREE,
1308 printf_format_type, 2, 0);
1309 record_function_format (get_identifier ("vsprintf"), NULL_TREE,
1310 printf_format_type, 2, 0);
1311 record_function_format (get_identifier ("strftime"), NULL_TREE,
1312 strftime_format_type, 3, 0);
1314 record_international_format (get_identifier ("gettext"), NULL_TREE, 1);
1315 record_international_format (get_identifier ("dgettext"), NULL_TREE, 2);
1316 record_international_format (get_identifier ("dcgettext"), NULL_TREE, 2);
1319 /* Record information for argument format checking. FUNCTION_IDENT is
1320 the identifier node for the name of the function to check (its decl
1321 need not exist yet).
1322 FORMAT_TYPE specifies the type of format checking. FORMAT_NUM is the number
1323 of the argument which is the format control string (starting from 1).
1324 FIRST_ARG_NUM is the number of the first actual argument to check
1325 against the format string, or zero if no checking is not be done
1326 (e.g. for varargs such as vfprintf). */
1329 record_function_format (name, assembler_name, format_type,
1330 format_num, first_arg_num)
1332 tree assembler_name;
1333 enum format_type format_type;
1337 function_format_info *info;
1339 /* Re-use existing structure if it's there. */
1341 for (info = function_format_list; info; info = info->next)
1343 if (info->name == name && info->assembler_name == assembler_name)
1348 info = (function_format_info *) xmalloc (sizeof (function_format_info));
1349 info->next = function_format_list;
1350 function_format_list = info;
1353 info->assembler_name = assembler_name;
1356 info->format_type = format_type;
1357 info->format_num = format_num;
1358 info->first_arg_num = first_arg_num;
1361 /* Record information for the names of function that modify the format
1362 argument to format functions. FUNCTION_IDENT is the identifier node for
1363 the name of the function (its decl need not exist yet) and FORMAT_NUM is
1364 the number of the argument which is the format control string (starting
1368 record_international_format (name, assembler_name, format_num)
1370 tree assembler_name;
1373 international_format_info *info;
1375 /* Re-use existing structure if it's there. */
1377 for (info = international_format_list; info; info = info->next)
1379 if (info->name == name && info->assembler_name == assembler_name)
1386 = (international_format_info *)
1387 xmalloc (sizeof (international_format_info));
1388 info->next = international_format_list;
1389 international_format_list = info;
1392 info->assembler_name = assembler_name;
1395 info->format_num = format_num;
1401 warning ("too few arguments for format");
1404 /* Check the argument list of a call to printf, scanf, etc.
1405 NAME is the function identifier.
1406 ASSEMBLER_NAME is the function's assembler identifier.
1407 (Either NAME or ASSEMBLER_NAME, but not both, may be NULL_TREE.)
1408 PARAMS is the list of argument values. */
1411 check_function_format (name, assembler_name, params)
1413 tree assembler_name;
1416 function_format_info *info;
1418 /* See if this function is a format function. */
1419 for (info = function_format_list; info; info = info->next)
1421 if (info->assembler_name
1422 ? (info->assembler_name == assembler_name)
1423 : (info->name == name))
1425 /* Yup; check it. */
1426 check_format_info (info, params);
1432 /* Check the argument list of a call to printf, scanf, etc.
1433 INFO points to the function_format_info structure.
1434 PARAMS is the list of argument values. */
1437 check_format_info (info, params)
1438 function_format_info *info;
1443 int suppressed, wide, precise;
1444 int length_char = 0;
1451 tree first_fillin_param;
1452 const char *format_chars;
1453 format_char_info *fci = NULL;
1455 int has_operand_number = 0;
1457 /* Skip to format argument. If the argument isn't available, there's
1458 no work for us to do; prototype checking will catch the problem. */
1459 for (arg_num = 1; ; ++arg_num)
1463 if (arg_num == info->format_num)
1465 params = TREE_CHAIN (params);
1467 format_tree = TREE_VALUE (params);
1468 params = TREE_CHAIN (params);
1469 if (format_tree == 0)
1472 /* We can only check the format if it's a string constant. */
1473 while (TREE_CODE (format_tree) == NOP_EXPR)
1474 format_tree = TREE_OPERAND (format_tree, 0); /* strip coercion */
1476 if (TREE_CODE (format_tree) == CALL_EXPR
1477 && TREE_CODE (TREE_OPERAND (format_tree, 0)) == ADDR_EXPR
1478 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (format_tree, 0), 0))
1481 tree function = TREE_OPERAND (TREE_OPERAND (format_tree, 0), 0);
1483 /* See if this is a call to a known internationalization function
1484 that modifies the format arg. */
1485 international_format_info *info;
1487 for (info = international_format_list; info; info = info->next)
1488 if (info->assembler_name
1489 ? (info->assembler_name == DECL_ASSEMBLER_NAME (function))
1490 : (info->name == DECL_NAME (function)))
1495 for (inner_args = TREE_OPERAND (format_tree, 1), i = 1;
1497 inner_args = TREE_CHAIN (inner_args), i++)
1498 if (i == info->format_num)
1500 format_tree = TREE_VALUE (inner_args);
1502 while (TREE_CODE (format_tree) == NOP_EXPR)
1503 format_tree = TREE_OPERAND (format_tree, 0);
1508 if (integer_zerop (format_tree))
1510 warning ("null format string");
1513 if (TREE_CODE (format_tree) != ADDR_EXPR)
1515 /* The user may get multiple warnings if the supplied argument
1516 isn't even a string pointer. */
1517 /* Functions taking a va_list normally pass a non-literal format
1518 string. These functions typically are declared with
1519 first_arg_num == 0, so avoid warning in those cases. */
1520 if (info->first_arg_num != 0 && warn_format > 1)
1521 warning ("format not a string literal, argument types not checked");
1524 format_tree = TREE_OPERAND (format_tree, 0);
1525 if (TREE_CODE (format_tree) != STRING_CST)
1527 /* The user may get multiple warnings if the supplied argument
1528 isn't even a string pointer. */
1529 /* Functions taking a va_list normally pass a non-literal format
1530 string. These functions typically are declared with
1531 first_arg_num == 0, so avoid warning in those cases. */
1532 if (info->first_arg_num != 0 && warn_format > 1)
1533 warning ("format not a string literal, argument types not checked");
1536 format_chars = TREE_STRING_POINTER (format_tree);
1537 format_length = TREE_STRING_LENGTH (format_tree);
1538 if (format_length <= 1)
1539 warning ("zero-length format string");
1540 if (format_chars[--format_length] != 0)
1542 warning ("unterminated format string");
1545 /* Skip to first argument to check. */
1546 while (arg_num + 1 < info->first_arg_num)
1550 params = TREE_CHAIN (params);
1554 first_fillin_param = params;
1558 if (*format_chars == 0)
1560 if (format_chars - TREE_STRING_POINTER (format_tree) != format_length)
1561 warning ("embedded `\\0' in format");
1562 if (info->first_arg_num != 0 && params != 0 && ! has_operand_number)
1563 warning ("too many arguments for format");
1566 if (*format_chars++ != '%')
1568 if (*format_chars == 0)
1570 warning ("spurious trailing `%%' in format");
1573 if (*format_chars == '%')
1579 suppressed = wide = precise = FALSE;
1580 if (info->format_type == scanf_format_type)
1582 suppressed = *format_chars == '*';
1585 while (ISDIGIT (*format_chars))
1588 else if (info->format_type == strftime_format_type)
1590 while (*format_chars != 0 && index ("_-0^#", *format_chars) != 0)
1593 warning ("ANSI C does not support the strftime `%c' flag",
1595 if (index (flag_chars, *format_chars) != 0)
1597 warning ("repeated `%c' flag in format",
1603 i = strlen (flag_chars);
1604 flag_chars[i++] = *format_chars++;
1608 while (ISDIGIT ((unsigned char) *format_chars))
1613 if (wide && pedantic)
1614 warning ("ANSI C does not support strftime format width");
1615 if (*format_chars == 'E' || *format_chars == 'O')
1617 i = strlen (flag_chars);
1618 flag_chars[i++] = *format_chars++;
1620 if (*format_chars == 'E' || *format_chars == 'O')
1622 warning ("multiple E/O modifiers in format");
1623 while (*format_chars == 'E' || *format_chars == 'O')
1628 else if (info->format_type == printf_format_type)
1630 /* See if we have a number followed by a dollar sign. If we do,
1631 it is an operand number, so set PARAMS to that operand. */
1632 if (*format_chars >= '0' && *format_chars <= '9')
1634 const char *p = format_chars;
1636 while (*p >= '0' && *p++ <= '9')
1641 int opnum = atoi (format_chars);
1643 params = first_fillin_param;
1644 format_chars = p + 1;
1645 has_operand_number = 1;
1647 for (i = 1; i < opnum && params != 0; i++)
1648 params = TREE_CHAIN (params);
1650 if (opnum == 0 || params == 0)
1652 warning ("operand number out of range in format");
1658 while (*format_chars != 0 && index (" +#0-", *format_chars) != 0)
1660 if (index (flag_chars, *format_chars) != 0)
1661 warning ("repeated `%c' flag in format", *format_chars++);
1664 i = strlen (flag_chars);
1665 flag_chars[i++] = *format_chars++;
1669 /* "If the space and + flags both appear,
1670 the space flag will be ignored." */
1671 if (index (flag_chars, ' ') != 0
1672 && index (flag_chars, '+') != 0)
1673 warning ("use of both ` ' and `+' flags in format");
1674 /* "If the 0 and - flags both appear,
1675 the 0 flag will be ignored." */
1676 if (index (flag_chars, '0') != 0
1677 && index (flag_chars, '-') != 0)
1678 warning ("use of both `0' and `-' flags in format");
1679 if (*format_chars == '*')
1682 /* "...a field width...may be indicated by an asterisk.
1683 In this case, an int argument supplies the field width..." */
1690 if (info->first_arg_num != 0)
1692 cur_param = TREE_VALUE (params);
1693 params = TREE_CHAIN (params);
1695 /* size_t is generally not valid here.
1696 It will work on most machines, because size_t and int
1697 have the same mode. But might as well warn anyway,
1698 since it will fail on other machines. */
1699 if ((TYPE_MAIN_VARIANT (TREE_TYPE (cur_param))
1700 != integer_type_node)
1702 (TYPE_MAIN_VARIANT (TREE_TYPE (cur_param))
1703 != unsigned_type_node))
1704 warning ("field width is not type int (arg %d)", arg_num);
1709 while (ISDIGIT (*format_chars))
1715 if (*format_chars == '.')
1719 if (*format_chars != '*' && !ISDIGIT (*format_chars))
1720 warning ("`.' not followed by `*' or digit in format");
1721 /* "...a...precision...may be indicated by an asterisk.
1722 In this case, an int argument supplies the...precision." */
1723 if (*format_chars == '*')
1725 if (info->first_arg_num != 0)
1733 cur_param = TREE_VALUE (params);
1734 params = TREE_CHAIN (params);
1736 if (TYPE_MAIN_VARIANT (TREE_TYPE (cur_param))
1737 != integer_type_node)
1738 warning ("field width is not type int (arg %d)",
1744 while (ISDIGIT (*format_chars))
1752 if (info->format_type != strftime_format_type)
1754 if (*format_chars == 'h' || *format_chars == 'l')
1755 length_char = *format_chars++;
1756 else if (*format_chars == 'q' || *format_chars == 'L')
1758 length_char = *format_chars++;
1760 warning ("ANSI C does not support the `%c' length modifier",
1763 else if (*format_chars == 'Z' || *format_chars == 'z')
1765 length_char = *format_chars++;
1766 if (pedantic && (length_char == 'Z' || !flag_isoc99))
1767 warning ("ANSI C does not support the `%c' length modifier",
1772 if (length_char == 'l' && *format_chars == 'l')
1774 length_char = 'q', format_chars++;
1775 if (pedantic && !flag_isoc99)
1776 warning ("ANSI C does not support the `ll' length modifier");
1778 else if (length_char == 'h' && *format_chars == 'h')
1780 length_char = 'H', format_chars++;
1781 if (pedantic && !flag_isoc99)
1782 warning ("ANSI C does not support the `hh' length modifier");
1784 if (*format_chars == 'a' && info->format_type == scanf_format_type)
1786 if (format_chars[1] == 's' || format_chars[1] == 'S'
1787 || format_chars[1] == '[')
1789 /* `a' is used as a flag. */
1794 if (suppressed && length_char != 0)
1795 warning ("use of `*' and `%c' together in format", length_char);
1797 format_char = *format_chars;
1798 if (format_char == 0
1799 || (info->format_type != strftime_format_type && format_char == '%'))
1801 warning ("conversion lacks type at end of format");
1804 /* The m, C, and S formats are GNU extensions. */
1805 if (pedantic && info->format_type != strftime_format_type
1806 && (format_char == 'm' || format_char == 'C' || format_char == 'S'))
1807 warning ("ANSI C does not support the `%c' format", format_char);
1808 /* The a and A formats are C99 extensions. */
1809 if (pedantic && info->format_type != strftime_format_type
1810 && (format_char == 'a' || format_char == 'A')
1812 warning ("ANSI C does not support the `%c' format", format_char);
1814 switch (info->format_type)
1816 case printf_format_type:
1817 fci = print_char_table;
1819 case scanf_format_type:
1820 fci = scan_char_table;
1822 case strftime_format_type:
1823 fci = time_char_table;
1828 while (fci->format_chars != 0
1829 && index (fci->format_chars, format_char) == 0)
1831 if (fci->format_chars == 0)
1833 if (ISGRAPH(format_char))
1834 warning ("unknown conversion type character `%c' in format",
1837 warning ("unknown conversion type character 0x%x in format",
1843 if (index (fci->flag_chars, 'G') != 0)
1844 warning ("ANSI C does not support `%%%c'", format_char);
1845 if (index (fci->flag_chars, 'o') != 0
1846 && index (flag_chars, 'O') != 0)
1847 warning ("ANSI C does not support `%%O%c'", format_char);
1849 if (wide && index (fci->flag_chars, 'w') == 0)
1850 warning ("width used with `%c' format", format_char);
1851 if (index (fci->flag_chars, '2') != 0)
1852 warning ("`%%%c' yields only last 2 digits of year", format_char);
1853 else if (index (fci->flag_chars, '3') != 0)
1854 warning ("`%%%c' yields only last 2 digits of year in some locales",
1856 if (precise && index (fci->flag_chars, 'p') == 0)
1857 warning ("precision used with `%c' format", format_char);
1858 if (aflag && index (fci->flag_chars, 'a') == 0)
1860 warning ("`a' flag used with `%c' format", format_char);
1861 /* To simplify the following code. */
1864 /* The a flag is a GNU extension. */
1865 else if (pedantic && aflag)
1866 warning ("ANSI C does not support the `a' flag");
1867 if (info->format_type == scanf_format_type && format_char == '[')
1869 /* Skip over scan set, in case it happens to have '%' in it. */
1870 if (*format_chars == '^')
1872 /* Find closing bracket; if one is hit immediately, then
1873 it's part of the scan set rather than a terminator. */
1874 if (*format_chars == ']')
1876 while (*format_chars && *format_chars != ']')
1878 if (*format_chars != ']')
1879 /* The end of the format string was reached. */
1880 warning ("no closing `]' for `%%[' format");
1884 if (index (fci->flag_chars, '*') == 0)
1885 warning ("suppression of `%c' conversion in format", format_char);
1888 for (i = 0; flag_chars[i] != 0; ++i)
1890 if (index (fci->flag_chars, flag_chars[i]) == 0)
1891 warning ("flag `%c' used with type `%c'",
1892 flag_chars[i], format_char);
1894 if (info->format_type == strftime_format_type)
1896 if (precise && index (flag_chars, '0') != 0
1897 && (format_char == 'd' || format_char == 'i'
1898 || format_char == 'o' || format_char == 'u'
1899 || format_char == 'x' || format_char == 'X'))
1900 warning ("`0' flag ignored with precision specifier and `%c' format",
1902 switch (length_char)
1904 default: wanted_type = fci->nolen ? *(fci->nolen) : 0; break;
1905 case 'H': wanted_type = fci->hhlen ? *(fci->hhlen) : 0; break;
1906 case 'h': wanted_type = fci->hlen ? *(fci->hlen) : 0; break;
1907 case 'l': wanted_type = fci->llen ? *(fci->llen) : 0; break;
1908 case 'q': wanted_type = fci->qlen ? *(fci->qlen) : 0; break;
1909 case 'L': wanted_type = fci->bigllen ? *(fci->bigllen) : 0; break;
1910 case 'z': case 'Z': wanted_type = fci->zlen ? *fci->zlen : 0; break;
1912 if (wanted_type == 0)
1913 warning ("use of `%c' length character with `%c' type character",
1914 length_char, format_char);
1916 /* Finally. . .check type of argument against desired type! */
1917 if (info->first_arg_num == 0)
1919 if (fci->pointer_count == 0 && wanted_type == void_type_node)
1920 /* This specifier takes no argument. */
1927 cur_param = TREE_VALUE (params);
1928 params = TREE_CHAIN (params);
1930 cur_type = TREE_TYPE (cur_param);
1932 STRIP_NOPS (cur_param);
1934 /* Check the types of any additional pointer arguments
1935 that precede the "real" argument. */
1936 for (i = 0; i < fci->pointer_count + aflag; ++i)
1938 if (TREE_CODE (cur_type) == POINTER_TYPE)
1940 cur_type = TREE_TYPE (cur_type);
1942 if (cur_param != 0 && TREE_CODE (cur_param) == ADDR_EXPR)
1943 cur_param = TREE_OPERAND (cur_param, 0);
1949 if (TREE_CODE (cur_type) != ERROR_MARK)
1951 if (fci->pointer_count + aflag == 1)
1952 warning ("format argument is not a pointer (arg %d)", arg_num);
1954 warning ("format argument is not a pointer to a pointer (arg %d)", arg_num);
1959 /* See if this is an attempt to write into a const type with
1960 scanf or with printf "%n". */
1961 if ((info->format_type == scanf_format_type
1962 || (info->format_type == printf_format_type
1963 && format_char == 'n'))
1964 && i == fci->pointer_count + aflag
1966 && TREE_CODE (cur_type) != ERROR_MARK
1967 && (TYPE_READONLY (cur_type)
1969 && (TREE_CODE_CLASS (TREE_CODE (cur_param)) == 'c'
1970 || (DECL_P (cur_param) && TREE_READONLY (cur_param))))))
1971 warning ("writing into constant object (arg %d)", arg_num);
1973 /* Check the type of the "real" argument, if there's a type we want. */
1974 if (i == fci->pointer_count + aflag && wanted_type != 0
1975 && TREE_CODE (cur_type) != ERROR_MARK
1976 && wanted_type != TYPE_MAIN_VARIANT (cur_type)
1977 /* If we want `void *', allow any pointer type.
1978 (Anything else would already have got a warning.) */
1979 && ! (wanted_type == void_type_node
1980 && fci->pointer_count > 0)
1981 /* Don't warn about differences merely in signedness. */
1982 && !(TREE_CODE (wanted_type) == INTEGER_TYPE
1983 && TREE_CODE (TYPE_MAIN_VARIANT (cur_type)) == INTEGER_TYPE
1984 && (TREE_UNSIGNED (wanted_type)
1985 ? wanted_type == (cur_type = unsigned_type (cur_type))
1986 : wanted_type == (cur_type = signed_type (cur_type))))
1987 /* Likewise, "signed char", "unsigned char" and "char" are
1988 equivalent but the above test won't consider them equivalent. */
1989 && ! (wanted_type == char_type_node
1990 && (TYPE_MAIN_VARIANT (cur_type) == signed_char_type_node
1991 || TYPE_MAIN_VARIANT (cur_type) == unsigned_char_type_node)))
1993 register const char *this;
1994 register const char *that;
1996 this = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (wanted_type)));
1998 if (TREE_CODE (cur_type) != ERROR_MARK
1999 && TYPE_NAME (cur_type) != 0
2000 && TREE_CODE (cur_type) != INTEGER_TYPE
2001 && !(TREE_CODE (cur_type) == POINTER_TYPE
2002 && TREE_CODE (TREE_TYPE (cur_type)) == INTEGER_TYPE))
2004 if (TREE_CODE (TYPE_NAME (cur_type)) == TYPE_DECL
2005 && DECL_NAME (TYPE_NAME (cur_type)) != 0)
2006 that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (cur_type)));
2008 that = IDENTIFIER_POINTER (TYPE_NAME (cur_type));
2011 /* A nameless type can't possibly match what the format wants.
2012 So there will be a warning for it.
2013 Make up a string to describe vaguely what it is. */
2016 if (TREE_CODE (cur_type) == POINTER_TYPE)
2019 that = "different type";
2022 /* Make the warning better in case of mismatch of int vs long. */
2023 if (TREE_CODE (cur_type) == INTEGER_TYPE
2024 && TREE_CODE (wanted_type) == INTEGER_TYPE
2025 && TYPE_PRECISION (cur_type) == TYPE_PRECISION (wanted_type)
2026 && TYPE_NAME (cur_type) != 0
2027 && TREE_CODE (TYPE_NAME (cur_type)) == TYPE_DECL)
2028 that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (cur_type)));
2030 if (strcmp (this, that) != 0)
2031 warning ("%s format, %s arg (arg %d)", this, that, arg_num);
2036 /* Print a warning if a constant expression had overflow in folding.
2037 Invoke this function on every expression that the language
2038 requires to be a constant expression.
2039 Note the ANSI C standard says it is erroneous for a
2040 constant expression to overflow. */
2043 constant_expression_warning (value)
2046 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
2047 || TREE_CODE (value) == COMPLEX_CST)
2048 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
2049 pedwarn ("overflow in constant expression");
2052 /* Print a warning if an expression had overflow in folding.
2053 Invoke this function on every expression that
2054 (1) appears in the source code, and
2055 (2) might be a constant expression that overflowed, and
2056 (3) is not already checked by convert_and_check;
2057 however, do not invoke this function on operands of explicit casts. */
2060 overflow_warning (value)
2063 if ((TREE_CODE (value) == INTEGER_CST
2064 || (TREE_CODE (value) == COMPLEX_CST
2065 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
2066 && TREE_OVERFLOW (value))
2068 TREE_OVERFLOW (value) = 0;
2069 if (skip_evaluation == 0)
2070 warning ("integer overflow in expression");
2072 else if ((TREE_CODE (value) == REAL_CST
2073 || (TREE_CODE (value) == COMPLEX_CST
2074 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
2075 && TREE_OVERFLOW (value))
2077 TREE_OVERFLOW (value) = 0;
2078 if (skip_evaluation == 0)
2079 warning ("floating point overflow in expression");
2083 /* Print a warning if a large constant is truncated to unsigned,
2084 or if -Wconversion is used and a constant < 0 is converted to unsigned.
2085 Invoke this function on every expression that might be implicitly
2086 converted to an unsigned type. */
2089 unsigned_conversion_warning (result, operand)
2090 tree result, operand;
2092 if (TREE_CODE (operand) == INTEGER_CST
2093 && TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
2094 && TREE_UNSIGNED (TREE_TYPE (result))
2095 && skip_evaluation == 0
2096 && !int_fits_type_p (operand, TREE_TYPE (result)))
2098 if (!int_fits_type_p (operand, signed_type (TREE_TYPE (result))))
2099 /* This detects cases like converting -129 or 256 to unsigned char. */
2100 warning ("large integer implicitly truncated to unsigned type");
2101 else if (warn_conversion)
2102 warning ("negative integer implicitly converted to unsigned type");
2106 /* Convert EXPR to TYPE, warning about conversion problems with constants.
2107 Invoke this function on every expression that is converted implicitly,
2108 i.e. because of language rules and not because of an explicit cast. */
2111 convert_and_check (type, expr)
2114 tree t = convert (type, expr);
2115 if (TREE_CODE (t) == INTEGER_CST)
2117 if (TREE_OVERFLOW (t))
2119 TREE_OVERFLOW (t) = 0;
2121 /* Do not diagnose overflow in a constant expression merely
2122 because a conversion overflowed. */
2123 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
2125 /* No warning for converting 0x80000000 to int. */
2126 if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
2127 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
2128 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
2129 /* If EXPR fits in the unsigned version of TYPE,
2130 don't warn unless pedantic. */
2132 || TREE_UNSIGNED (type)
2133 || ! int_fits_type_p (expr, unsigned_type (type)))
2134 && skip_evaluation == 0)
2135 warning ("overflow in implicit constant conversion");
2138 unsigned_conversion_warning (t, expr);
2144 c_expand_expr_stmt (expr)
2147 /* Do default conversion if safe and possibly important,
2148 in case within ({...}). */
2149 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr))
2150 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
2151 expr = default_conversion (expr);
2153 if (TREE_TYPE (expr) != error_mark_node
2154 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
2155 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
2156 error ("expression statement has incomplete type");
2158 expand_expr_stmt (expr);
2161 /* Validate the expression after `case' and apply default promotions. */
2164 check_case_value (value)
2167 if (value == NULL_TREE)
2170 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
2171 STRIP_TYPE_NOPS (value);
2173 if (TREE_CODE (value) != INTEGER_CST
2174 && value != error_mark_node)
2176 error ("case label does not reduce to an integer constant");
2177 value = error_mark_node;
2180 /* Promote char or short to int. */
2181 value = default_conversion (value);
2183 constant_expression_warning (value);
2188 /* Return an integer type with BITS bits of precision,
2189 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
2192 type_for_size (bits, unsignedp)
2196 if (bits == TYPE_PRECISION (integer_type_node))
2197 return unsignedp ? unsigned_type_node : integer_type_node;
2199 if (bits == TYPE_PRECISION (signed_char_type_node))
2200 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2202 if (bits == TYPE_PRECISION (short_integer_type_node))
2203 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2205 if (bits == TYPE_PRECISION (long_integer_type_node))
2206 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2208 if (bits == TYPE_PRECISION (long_long_integer_type_node))
2209 return (unsignedp ? long_long_unsigned_type_node
2210 : long_long_integer_type_node);
2212 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
2213 return (unsignedp ? widest_unsigned_literal_type_node
2214 : widest_integer_literal_type_node);
2216 if (bits <= TYPE_PRECISION (intQI_type_node))
2217 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2219 if (bits <= TYPE_PRECISION (intHI_type_node))
2220 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2222 if (bits <= TYPE_PRECISION (intSI_type_node))
2223 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2225 if (bits <= TYPE_PRECISION (intDI_type_node))
2226 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2231 /* Return a data type that has machine mode MODE.
2232 If the mode is an integer,
2233 then UNSIGNEDP selects between signed and unsigned types. */
2236 type_for_mode (mode, unsignedp)
2237 enum machine_mode mode;
2240 if (mode == TYPE_MODE (integer_type_node))
2241 return unsignedp ? unsigned_type_node : integer_type_node;
2243 if (mode == TYPE_MODE (signed_char_type_node))
2244 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2246 if (mode == TYPE_MODE (short_integer_type_node))
2247 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2249 if (mode == TYPE_MODE (long_integer_type_node))
2250 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2252 if (mode == TYPE_MODE (long_long_integer_type_node))
2253 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2255 if (mode == TYPE_MODE (widest_integer_literal_type_node))
2256 return unsignedp ? widest_unsigned_literal_type_node
2257 : widest_integer_literal_type_node;
2259 if (mode == TYPE_MODE (intQI_type_node))
2260 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2262 if (mode == TYPE_MODE (intHI_type_node))
2263 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2265 if (mode == TYPE_MODE (intSI_type_node))
2266 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2268 if (mode == TYPE_MODE (intDI_type_node))
2269 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2271 #if HOST_BITS_PER_WIDE_INT >= 64
2272 if (mode == TYPE_MODE (intTI_type_node))
2273 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2276 if (mode == TYPE_MODE (float_type_node))
2277 return float_type_node;
2279 if (mode == TYPE_MODE (double_type_node))
2280 return double_type_node;
2282 if (mode == TYPE_MODE (long_double_type_node))
2283 return long_double_type_node;
2285 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2286 return build_pointer_type (char_type_node);
2288 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2289 return build_pointer_type (integer_type_node);
2294 /* Return an unsigned type the same as TYPE in other respects. */
2296 unsigned_type (type)
2299 tree type1 = TYPE_MAIN_VARIANT (type);
2300 if (type1 == signed_char_type_node || type1 == char_type_node)
2301 return unsigned_char_type_node;
2302 if (type1 == integer_type_node)
2303 return unsigned_type_node;
2304 if (type1 == short_integer_type_node)
2305 return short_unsigned_type_node;
2306 if (type1 == long_integer_type_node)
2307 return long_unsigned_type_node;
2308 if (type1 == long_long_integer_type_node)
2309 return long_long_unsigned_type_node;
2310 if (type1 == widest_integer_literal_type_node)
2311 return widest_unsigned_literal_type_node;
2312 #if HOST_BITS_PER_WIDE_INT >= 64
2313 if (type1 == intTI_type_node)
2314 return unsigned_intTI_type_node;
2316 if (type1 == intDI_type_node)
2317 return unsigned_intDI_type_node;
2318 if (type1 == intSI_type_node)
2319 return unsigned_intSI_type_node;
2320 if (type1 == intHI_type_node)
2321 return unsigned_intHI_type_node;
2322 if (type1 == intQI_type_node)
2323 return unsigned_intQI_type_node;
2325 return signed_or_unsigned_type (1, type);
2328 /* Return a signed type the same as TYPE in other respects. */
2334 tree type1 = TYPE_MAIN_VARIANT (type);
2335 if (type1 == unsigned_char_type_node || type1 == char_type_node)
2336 return signed_char_type_node;
2337 if (type1 == unsigned_type_node)
2338 return integer_type_node;
2339 if (type1 == short_unsigned_type_node)
2340 return short_integer_type_node;
2341 if (type1 == long_unsigned_type_node)
2342 return long_integer_type_node;
2343 if (type1 == long_long_unsigned_type_node)
2344 return long_long_integer_type_node;
2345 if (type1 == widest_unsigned_literal_type_node)
2346 return widest_integer_literal_type_node;
2347 #if HOST_BITS_PER_WIDE_INT >= 64
2348 if (type1 == unsigned_intTI_type_node)
2349 return intTI_type_node;
2351 if (type1 == unsigned_intDI_type_node)
2352 return intDI_type_node;
2353 if (type1 == unsigned_intSI_type_node)
2354 return intSI_type_node;
2355 if (type1 == unsigned_intHI_type_node)
2356 return intHI_type_node;
2357 if (type1 == unsigned_intQI_type_node)
2358 return intQI_type_node;
2360 return signed_or_unsigned_type (0, type);
2363 /* Return a type the same as TYPE except unsigned or
2364 signed according to UNSIGNEDP. */
2367 signed_or_unsigned_type (unsignedp, type)
2371 if (! INTEGRAL_TYPE_P (type)
2372 || TREE_UNSIGNED (type) == unsignedp)
2375 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
2376 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2377 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
2378 return unsignedp ? unsigned_type_node : integer_type_node;
2379 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
2380 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2381 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
2382 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2383 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
2384 return (unsignedp ? long_long_unsigned_type_node
2385 : long_long_integer_type_node);
2386 if (TYPE_PRECISION (type) == TYPE_PRECISION (widest_integer_literal_type_node))
2387 return (unsignedp ? widest_unsigned_literal_type_node
2388 : widest_integer_literal_type_node);
2392 /* Return the minimum number of bits needed to represent VALUE in a
2393 signed or unsigned type, UNSIGNEDP says which. */
2396 min_precision (value, unsignedp)
2402 /* If the value is negative, compute its negative minus 1. The latter
2403 adjustment is because the absolute value of the largest negative value
2404 is one larger than the largest positive value. This is equivalent to
2405 a bit-wise negation, so use that operation instead. */
2407 if (tree_int_cst_sgn (value) < 0)
2408 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
2410 /* Return the number of bits needed, taking into account the fact
2411 that we need one more bit for a signed than unsigned type. */
2413 if (integer_zerop (value))
2416 log = tree_floor_log2 (value);
2418 return log + 1 + ! unsignedp;
2421 /* Print an error message for invalid operands to arith operation CODE.
2422 NOP_EXPR is used as a special case (see truthvalue_conversion). */
2425 binary_op_error (code)
2426 enum tree_code code;
2428 register const char *opname;
2433 error ("invalid truth-value expression");
2437 opname = "+"; break;
2439 opname = "-"; break;
2441 opname = "*"; break;
2443 opname = "max"; break;
2445 opname = "min"; break;
2447 opname = "=="; break;
2449 opname = "!="; break;
2451 opname = "<="; break;
2453 opname = ">="; break;
2455 opname = "<"; break;
2457 opname = ">"; break;
2459 opname = "<<"; break;
2461 opname = ">>"; break;
2462 case TRUNC_MOD_EXPR:
2463 case FLOOR_MOD_EXPR:
2464 opname = "%"; break;
2465 case TRUNC_DIV_EXPR:
2466 case FLOOR_DIV_EXPR:
2467 opname = "/"; break;
2469 opname = "&"; break;
2471 opname = "|"; break;
2472 case TRUTH_ANDIF_EXPR:
2473 opname = "&&"; break;
2474 case TRUTH_ORIF_EXPR:
2475 opname = "||"; break;
2477 opname = "^"; break;
2480 opname = "rotate"; break;
2482 opname = "unknown"; break;
2484 error ("invalid operands to binary %s", opname);
2487 /* Subroutine of build_binary_op, used for comparison operations.
2488 See if the operands have both been converted from subword integer types
2489 and, if so, perhaps change them both back to their original type.
2490 This function is also responsible for converting the two operands
2491 to the proper common type for comparison.
2493 The arguments of this function are all pointers to local variables
2494 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2495 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2497 If this function returns nonzero, it means that the comparison has
2498 a constant value. What this function returns is an expression for
2502 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
2503 tree *op0_ptr, *op1_ptr;
2505 enum tree_code *rescode_ptr;
2508 tree op0 = *op0_ptr;
2509 tree op1 = *op1_ptr;
2510 int unsignedp0, unsignedp1;
2512 tree primop0, primop1;
2513 enum tree_code code = *rescode_ptr;
2515 /* Throw away any conversions to wider types
2516 already present in the operands. */
2518 primop0 = get_narrower (op0, &unsignedp0);
2519 primop1 = get_narrower (op1, &unsignedp1);
2521 /* Handle the case that OP0 does not *contain* a conversion
2522 but it *requires* conversion to FINAL_TYPE. */
2524 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2525 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
2526 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2527 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
2529 /* If one of the operands must be floated, we cannot optimize. */
2530 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2531 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2533 /* If first arg is constant, swap the args (changing operation
2534 so value is preserved), for canonicalization. Don't do this if
2535 the second arg is 0. */
2537 if (TREE_CONSTANT (primop0)
2538 && ! integer_zerop (primop1) && ! real_zerop (primop1))
2540 register tree tem = primop0;
2541 register int temi = unsignedp0;
2549 unsignedp0 = unsignedp1;
2572 *rescode_ptr = code;
2575 /* If comparing an integer against a constant more bits wide,
2576 maybe we can deduce a value of 1 or 0 independent of the data.
2577 Or else truncate the constant now
2578 rather than extend the variable at run time.
2580 This is only interesting if the constant is the wider arg.
2581 Also, it is not safe if the constant is unsigned and the
2582 variable arg is signed, since in this case the variable
2583 would be sign-extended and then regarded as unsigned.
2584 Our technique fails in this case because the lowest/highest
2585 possible unsigned results don't follow naturally from the
2586 lowest/highest possible values of the variable operand.
2587 For just EQ_EXPR and NE_EXPR there is another technique that
2588 could be used: see if the constant can be faithfully represented
2589 in the other operand's type, by truncating it and reextending it
2590 and see if that preserves the constant's value. */
2592 if (!real1 && !real2
2593 && TREE_CODE (primop1) == INTEGER_CST
2594 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2596 int min_gt, max_gt, min_lt, max_lt;
2597 tree maxval, minval;
2598 /* 1 if comparison is nominally unsigned. */
2599 int unsignedp = TREE_UNSIGNED (*restype_ptr);
2602 type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
2604 /* If TYPE is an enumeration, then we need to get its min/max
2605 values from it's underlying integral type, not the enumerated
2607 if (TREE_CODE (type) == ENUMERAL_TYPE)
2608 type = type_for_size (TYPE_PRECISION (type), unsignedp0);
2610 maxval = TYPE_MAX_VALUE (type);
2611 minval = TYPE_MIN_VALUE (type);
2613 if (unsignedp && !unsignedp0)
2614 *restype_ptr = signed_type (*restype_ptr);
2616 if (TREE_TYPE (primop1) != *restype_ptr)
2617 primop1 = convert (*restype_ptr, primop1);
2618 if (type != *restype_ptr)
2620 minval = convert (*restype_ptr, minval);
2621 maxval = convert (*restype_ptr, maxval);
2624 if (unsignedp && unsignedp0)
2626 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2627 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2628 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2629 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2633 min_gt = INT_CST_LT (primop1, minval);
2634 max_gt = INT_CST_LT (primop1, maxval);
2635 min_lt = INT_CST_LT (minval, primop1);
2636 max_lt = INT_CST_LT (maxval, primop1);
2640 /* This used to be a switch, but Genix compiler can't handle that. */
2641 if (code == NE_EXPR)
2643 if (max_lt || min_gt)
2644 val = boolean_true_node;
2646 else if (code == EQ_EXPR)
2648 if (max_lt || min_gt)
2649 val = boolean_false_node;
2651 else if (code == LT_EXPR)
2654 val = boolean_true_node;
2656 val = boolean_false_node;
2658 else if (code == GT_EXPR)
2661 val = boolean_true_node;
2663 val = boolean_false_node;
2665 else if (code == LE_EXPR)
2668 val = boolean_true_node;
2670 val = boolean_false_node;
2672 else if (code == GE_EXPR)
2675 val = boolean_true_node;
2677 val = boolean_false_node;
2680 /* If primop0 was sign-extended and unsigned comparison specd,
2681 we did a signed comparison above using the signed type bounds.
2682 But the comparison we output must be unsigned.
2684 Also, for inequalities, VAL is no good; but if the signed
2685 comparison had *any* fixed result, it follows that the
2686 unsigned comparison just tests the sign in reverse
2687 (positive values are LE, negative ones GE).
2688 So we can generate an unsigned comparison
2689 against an extreme value of the signed type. */
2691 if (unsignedp && !unsignedp0)
2698 primop1 = TYPE_MIN_VALUE (type);
2704 primop1 = TYPE_MAX_VALUE (type);
2711 type = unsigned_type (type);
2714 if (!max_gt && !unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
2716 /* This is the case of (char)x >?< 0x80, which people used to use
2717 expecting old C compilers to change the 0x80 into -0x80. */
2718 if (val == boolean_false_node)
2719 warning ("comparison is always false due to limited range of data type");
2720 if (val == boolean_true_node)
2721 warning ("comparison is always true due to limited range of data type");
2724 if (!min_lt && unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
2726 /* This is the case of (unsigned char)x >?< -1 or < 0. */
2727 if (val == boolean_false_node)
2728 warning ("comparison is always false due to limited range of data type");
2729 if (val == boolean_true_node)
2730 warning ("comparison is always true due to limited range of data type");
2735 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2736 if (TREE_SIDE_EFFECTS (primop0))
2737 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2741 /* Value is not predetermined, but do the comparison
2742 in the type of the operand that is not constant.
2743 TYPE is already properly set. */
2745 else if (real1 && real2
2746 && (TYPE_PRECISION (TREE_TYPE (primop0))
2747 == TYPE_PRECISION (TREE_TYPE (primop1))))
2748 type = TREE_TYPE (primop0);
2750 /* If args' natural types are both narrower than nominal type
2751 and both extend in the same manner, compare them
2752 in the type of the wider arg.
2753 Otherwise must actually extend both to the nominal
2754 common type lest different ways of extending
2756 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2758 else if (unsignedp0 == unsignedp1 && real1 == real2
2759 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2760 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2762 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2763 type = signed_or_unsigned_type (unsignedp0
2764 || TREE_UNSIGNED (*restype_ptr),
2766 /* Make sure shorter operand is extended the right way
2767 to match the longer operand. */
2768 primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
2770 primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
2775 /* Here we must do the comparison on the nominal type
2776 using the args exactly as we received them. */
2777 type = *restype_ptr;
2781 if (!real1 && !real2 && integer_zerop (primop1)
2782 && TREE_UNSIGNED (*restype_ptr))
2788 /* All unsigned values are >= 0, so we warn if extra warnings
2789 are requested. However, if OP0 is a constant that is
2790 >= 0, the signedness of the comparison isn't an issue,
2791 so suppress the warning. */
2793 && ! (TREE_CODE (primop0) == INTEGER_CST
2794 && ! TREE_OVERFLOW (convert (signed_type (type),
2796 warning ("comparison of unsigned expression >= 0 is always true");
2797 value = boolean_true_node;
2802 && ! (TREE_CODE (primop0) == INTEGER_CST
2803 && ! TREE_OVERFLOW (convert (signed_type (type),
2805 warning ("comparison of unsigned expression < 0 is always false");
2806 value = boolean_false_node;
2815 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2816 if (TREE_SIDE_EFFECTS (primop0))
2817 return build (COMPOUND_EXPR, TREE_TYPE (value),
2824 *op0_ptr = convert (type, primop0);
2825 *op1_ptr = convert (type, primop1);
2827 *restype_ptr = boolean_type_node;
2832 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2833 or validate its data type for an `if' or `while' statement or ?..: exp.
2835 This preparation consists of taking the ordinary
2836 representation of an expression expr and producing a valid tree
2837 boolean expression describing whether expr is nonzero. We could
2838 simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1),
2839 but we optimize comparisons, &&, ||, and !.
2841 The resulting type should always be `boolean_type_node'. */
2844 truthvalue_conversion (expr)
2847 if (TREE_CODE (expr) == ERROR_MARK)
2850 #if 0 /* This appears to be wrong for C++. */
2851 /* These really should return error_mark_node after 2.4 is stable.
2852 But not all callers handle ERROR_MARK properly. */
2853 switch (TREE_CODE (TREE_TYPE (expr)))
2856 error ("struct type value used where scalar is required");
2857 return boolean_false_node;
2860 error ("union type value used where scalar is required");
2861 return boolean_false_node;
2864 error ("array type value used where scalar is required");
2865 return boolean_false_node;
2872 switch (TREE_CODE (expr))
2875 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2876 case TRUTH_ANDIF_EXPR:
2877 case TRUTH_ORIF_EXPR:
2878 case TRUTH_AND_EXPR:
2880 case TRUTH_XOR_EXPR:
2881 case TRUTH_NOT_EXPR:
2882 TREE_TYPE (expr) = boolean_type_node;
2889 return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
2892 return real_zerop (expr) ? boolean_false_node : boolean_true_node;
2895 /* If we are taking the address of a external decl, it might be zero
2896 if it is weak, so we cannot optimize. */
2897 if (DECL_P (TREE_OPERAND (expr, 0))
2898 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2901 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
2902 return build (COMPOUND_EXPR, boolean_type_node,
2903 TREE_OPERAND (expr, 0), boolean_true_node);
2905 return boolean_true_node;
2908 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2909 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2910 truthvalue_conversion (TREE_OPERAND (expr, 0)),
2911 truthvalue_conversion (TREE_OPERAND (expr, 1)),
2918 /* These don't change whether an object is non-zero or zero. */
2919 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2923 /* These don't change whether an object is zero or non-zero, but
2924 we can't ignore them if their second arg has side-effects. */
2925 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2926 return build (COMPOUND_EXPR, boolean_type_node, TREE_OPERAND (expr, 1),
2927 truthvalue_conversion (TREE_OPERAND (expr, 0)));
2929 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2932 /* Distribute the conversion into the arms of a COND_EXPR. */
2933 return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
2934 truthvalue_conversion (TREE_OPERAND (expr, 1)),
2935 truthvalue_conversion (TREE_OPERAND (expr, 2))));
2938 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2939 since that affects how `default_conversion' will behave. */
2940 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2941 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2943 /* fall through... */
2945 /* If this is widening the argument, we can ignore it. */
2946 if (TYPE_PRECISION (TREE_TYPE (expr))
2947 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2948 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2952 /* With IEEE arithmetic, x - x may not equal 0, so we can't optimize
2954 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
2955 && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE)
2957 /* fall through... */
2959 /* This and MINUS_EXPR can be changed into a comparison of the
2961 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2962 == TREE_TYPE (TREE_OPERAND (expr, 1)))
2963 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2964 TREE_OPERAND (expr, 1), 1);
2965 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2966 fold (build1 (NOP_EXPR,
2967 TREE_TYPE (TREE_OPERAND (expr, 0)),
2968 TREE_OPERAND (expr, 1))), 1);
2971 if (integer_onep (TREE_OPERAND (expr, 1))
2972 && TREE_TYPE (expr) != boolean_type_node)
2973 /* Using convert here would cause infinite recursion. */
2974 return build1 (NOP_EXPR, boolean_type_node, expr);
2978 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
2979 warning ("suggest parentheses around assignment used as truth value");
2986 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2988 tree tem = save_expr (expr);
2989 return (build_binary_op
2990 ((TREE_SIDE_EFFECTS (expr)
2991 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2992 truthvalue_conversion (build_unary_op (REALPART_EXPR, tem, 0)),
2993 truthvalue_conversion (build_unary_op (IMAGPART_EXPR, tem, 0)),
2997 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3001 /* Read the rest of a #-directive from input stream FINPUT.
3002 In normal use, the directive name and the white space after it
3003 have already been read, so they won't be included in the result.
3004 We allow for the fact that the directive line may contain
3005 a newline embedded within a character or string literal which forms
3006 a part of the directive.
3008 The value is a string in a reusable buffer. It remains valid
3009 only until the next time this function is called. */
3010 unsigned char *yy_cur, *yy_lim;
3012 #define GETC() (yy_cur < yy_lim ? *yy_cur++ : yy_get_token ())
3013 #define UNGETC(c) ((c) == EOF ? 0 : yy_cur--)
3020 parse_in.limit = parse_in.token_buffer;
3021 cpp_token = cpp_get_token (&parse_in);
3022 if (cpp_token == CPP_EOF)
3024 yy_lim = CPP_PWRITTEN (&parse_in);
3025 yy_cur = parse_in.token_buffer;
3026 if (yy_cur < yy_lim)
3032 get_directive_line ()
3034 static char *directive_buffer = NULL;
3035 static unsigned buffer_length = 0;
3037 register char *buffer_limit;
3038 register int looking_for = 0;
3039 register int char_escaped = 0;
3041 if (buffer_length == 0)
3043 directive_buffer = (char *)xmalloc (128);
3044 buffer_length = 128;
3047 buffer_limit = &directive_buffer[buffer_length];
3049 for (p = directive_buffer; ; )
3053 /* Make buffer bigger if it is full. */
3054 if (p >= buffer_limit)
3056 register unsigned bytes_used = (p - directive_buffer);
3060 = (char *)xrealloc (directive_buffer, buffer_length);
3061 p = &directive_buffer[bytes_used];
3062 buffer_limit = &directive_buffer[buffer_length];
3067 /* Discard initial whitespace. */
3068 if ((c == ' ' || c == '\t') && p == directive_buffer)
3071 /* Detect the end of the directive. */
3072 if (c == '\n' && looking_for == 0)
3081 return directive_buffer;
3083 /* Handle string and character constant syntax. */
3086 if (looking_for == c && !char_escaped)
3087 looking_for = 0; /* Found terminator... stop looking. */
3090 if (c == '\'' || c == '"')
3091 looking_for = c; /* Don't stop buffering until we see another
3092 another one of these (or an EOF). */
3094 /* Handle backslash. */
3095 char_escaped = (c == '\\' && ! char_escaped);
3099 /* Read the rest of a #-directive from input stream FINPUT.
3100 In normal use, the directive name and the white space after it
3101 have already been read, so they won't be included in the result.
3102 We allow for the fact that the directive line may contain
3103 a newline embedded within a character or string literal which forms
3104 a part of the directive.
3106 The value is a string in a reusable buffer. It remains valid
3107 only until the next time this function is called.
3109 The terminating character ('\n' or EOF) is left in FINPUT for the
3110 caller to re-read. */
3113 get_directive_line (finput)
3114 register FILE *finput;
3116 static char *directive_buffer = NULL;
3117 static unsigned buffer_length = 0;
3119 register char *buffer_limit;
3120 register int looking_for = 0;
3121 register int char_escaped = 0;
3123 if (buffer_length == 0)
3125 directive_buffer = (char *)xmalloc (128);
3126 buffer_length = 128;
3129 buffer_limit = &directive_buffer[buffer_length];
3131 for (p = directive_buffer; ; )
3135 /* Make buffer bigger if it is full. */
3136 if (p >= buffer_limit)
3138 register unsigned bytes_used = (p - directive_buffer);
3142 = (char *)xrealloc (directive_buffer, buffer_length);
3143 p = &directive_buffer[bytes_used];
3144 buffer_limit = &directive_buffer[buffer_length];
3149 /* Discard initial whitespace. */
3150 if ((c == ' ' || c == '\t') && p == directive_buffer)
3153 /* Detect the end of the directive. */
3154 if (looking_for == 0
3155 && (c == '\n' || c == EOF))
3164 return directive_buffer;
3166 /* Handle string and character constant syntax. */
3169 if (looking_for == c && !char_escaped)
3170 looking_for = 0; /* Found terminator... stop looking. */
3173 if (c == '\'' || c == '"')
3174 looking_for = c; /* Don't stop buffering until we see another
3175 one of these (or an EOF). */
3177 /* Handle backslash. */
3178 char_escaped = (c == '\\' && ! char_escaped);
3181 #endif /* !USE_CPPLIB */
3183 /* Make a variant type in the proper way for C/C++, propagating qualifiers
3184 down to the element type of an array. */
3187 c_build_qualified_type (type, type_quals)
3191 /* A restrict-qualified pointer type must be a pointer to object or
3192 incomplete type. Note that the use of POINTER_TYPE_P also allows
3193 REFERENCE_TYPEs, which is appropriate for C++. Unfortunately,
3194 the C++ front-end also use POINTER_TYPE for pointer-to-member
3195 values, so even though it should be illegal to use `restrict'
3196 with such an entity we don't flag that here. Thus, special case
3197 code for that case is required in the C++ front-end. */
3198 if ((type_quals & TYPE_QUAL_RESTRICT)
3199 && (!POINTER_TYPE_P (type)
3200 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
3202 error ("invalid use of `restrict'");
3203 type_quals &= ~TYPE_QUAL_RESTRICT;
3206 if (TREE_CODE (type) == ARRAY_TYPE)
3207 return build_array_type (c_build_qualified_type (TREE_TYPE (type),
3209 TYPE_DOMAIN (type));
3210 return build_qualified_type (type, type_quals);
3213 /* Apply the TYPE_QUALS to the new DECL. */
3216 c_apply_type_quals_to_decl (type_quals, decl)
3220 if ((type_quals & TYPE_QUAL_CONST)
3221 || (TREE_TYPE (decl)
3222 && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE))
3223 TREE_READONLY (decl) = 1;
3224 if (type_quals & TYPE_QUAL_VOLATILE)
3226 TREE_SIDE_EFFECTS (decl) = 1;
3227 TREE_THIS_VOLATILE (decl) = 1;
3229 if (type_quals & TYPE_QUAL_RESTRICT)
3231 if (!TREE_TYPE (decl)
3232 || !POINTER_TYPE_P (TREE_TYPE (decl))
3233 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl))))
3234 error ("invalid use of `restrict'");
3235 else if (flag_strict_aliasing)
3237 /* No two restricted pointers can point at the same thing.
3238 However, a restricted pointer can point at the same thing
3239 as an unrestricted pointer, if that unrestricted pointer
3240 is based on the restricted pointer. So, we make the
3241 alias set for the restricted pointer a subset of the
3242 alias set for the type pointed to by the type of the
3245 int pointed_to_alias_set
3246 = get_alias_set (TREE_TYPE (TREE_TYPE (decl)));
3248 if (!pointed_to_alias_set)
3249 /* It's not legal to make a subset of alias set zero. */
3253 DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
3254 record_alias_subset (pointed_to_alias_set,
3255 DECL_POINTER_ALIAS_SET (decl));
3261 /* T is an expression with pointer type. Find the DECL on which this
3262 expression is based. (For example, in `a[i]' this would be `a'.)
3263 If there is no such DECL, or a unique decl cannot be determined,
3264 NULL_TREE is retured. */
3267 c_find_base_decl (t)
3273 if (t == NULL_TREE || t == error_mark_node)
3276 if (!POINTER_TYPE_P (TREE_TYPE (t)))
3281 if (TREE_CODE (t) == FIELD_DECL
3282 || TREE_CODE (t) == PARM_DECL
3283 || TREE_CODE (t) == VAR_DECL)
3284 /* Aha, we found a pointer-typed declaration. */
3287 /* It would be nice to deal with COMPONENT_REFs here. If we could
3288 tell that `a' and `b' were the same, then `a->f' and `b->f' are
3291 /* Handle general expressions. */
3292 switch (TREE_CODE_CLASS (TREE_CODE (t)))
3297 for (i = tree_code_length [(int) TREE_CODE (t)]; --i >= 0;)
3299 tree d = c_find_base_decl (TREE_OPERAND (t, i));
3304 else if (d && d != decl)
3305 /* Two different declarations. That's confusing; let's
3306 just assume we don't know what's going on. */
3319 /* Return the typed-based alias set for T, which may be an expression
3329 if (t == error_mark_node)
3332 type = (TYPE_P (t)) ? t : TREE_TYPE (t);
3334 if (type == error_mark_node)
3337 /* Deal with special cases first; for certain kinds of references
3338 we're interested in more than just the type. */
3340 if (TREE_CODE (t) == BIT_FIELD_REF)
3341 /* Perhaps reads and writes to this piece of data alias fields
3342 neighboring the bitfield. Perhaps that's impossible. For now,
3343 let's just assume that bitfields can alias everything, which is
3344 the conservative assumption. */
3347 /* Permit type-punning when accessing a union, provided the access
3348 is directly through the union. For example, this code does not
3349 permit taking the address of a union member and then storing
3350 through it. Even the type-punning allowed here is a GCC
3351 extension, albeit a common and useful one; the C standard says
3352 that such accesses have implementation-defined behavior. */
3354 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3355 u = TREE_OPERAND (u, 0))
3356 if (TREE_CODE (u) == COMPONENT_REF
3357 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3360 if (TREE_CODE (t) == INDIRECT_REF)
3362 /* Check for accesses through restrict-qualified pointers. */
3363 tree decl = c_find_base_decl (TREE_OPERAND (t, 0));
3365 if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl))
3366 /* We use the alias set indicated in the declaration. */
3367 return DECL_POINTER_ALIAS_SET (decl);
3370 /* From here on, only the type matters. */
3372 if (TREE_CODE (t) == COMPONENT_REF
3373 && DECL_BIT_FIELD_TYPE (TREE_OPERAND (t, 1)))
3374 /* Since build_modify_expr calls get_unwidened for stores to
3375 component references, the type of a bit field can be changed
3376 from (say) `unsigned int : 16' to `unsigned short' or from
3377 `enum E : 16' to `short'. We want the real type of the
3378 bit-field in this case, not some the integral equivalent. */
3379 type = DECL_BIT_FIELD_TYPE (TREE_OPERAND (t, 1));
3381 if (TYPE_ALIAS_SET_KNOWN_P (type))
3382 /* If we've already calculated the value, just return it. */
3383 return TYPE_ALIAS_SET (type);
3384 else if (TYPE_MAIN_VARIANT (type) != type)
3385 /* The C standard specifically allows aliasing between
3386 cv-qualified variants of types. */
3387 TYPE_ALIAS_SET (type) = c_get_alias_set (TYPE_MAIN_VARIANT (type));
3388 else if (TREE_CODE (type) == INTEGER_TYPE)
3390 tree signed_variant;
3392 /* The C standard specifically allows aliasing between signed and
3393 unsigned variants of the same type. We treat the signed
3394 variant as canonical. */
3395 signed_variant = signed_type (type);
3397 if (signed_variant != type)
3398 TYPE_ALIAS_SET (type) = c_get_alias_set (signed_variant);
3399 else if (signed_variant == signed_char_type_node)
3400 /* The C standard guarantess that any object may be accessed
3401 via an lvalue that has character type. We don't have to
3402 check for unsigned_char_type_node or char_type_node because
3403 we are specifically looking at the signed variant. */
3404 TYPE_ALIAS_SET (type) = 0;
3406 else if (TREE_CODE (type) == ARRAY_TYPE)
3407 /* Anything that can alias one of the array elements can alias
3408 the entire array as well. */
3409 TYPE_ALIAS_SET (type) = c_get_alias_set (TREE_TYPE (type));
3410 else if (TREE_CODE (type) == FUNCTION_TYPE)
3411 /* There are no objects of FUNCTION_TYPE, so there's no point in
3412 using up an alias set for them. (There are, of course,
3413 pointers and references to functions, but that's
3415 TYPE_ALIAS_SET (type) = 0;
3416 else if (TREE_CODE (type) == RECORD_TYPE
3417 || TREE_CODE (type) == UNION_TYPE)
3418 /* If TYPE is a struct or union type then we're reading or
3419 writing an entire struct. Thus, we don't know anything about
3420 aliasing. (In theory, such an access can only alias objects
3421 whose type is the same as one of the fields, recursively, but
3422 we don't yet make any use of that information.) */
3423 TYPE_ALIAS_SET (type) = 0;
3424 else if (TREE_CODE (type) == POINTER_TYPE
3425 || TREE_CODE (type) == REFERENCE_TYPE)
3429 /* Unfortunately, there is no canonical form of a pointer type.
3430 In particular, if we have `typedef int I', then `int *', and
3431 `I *' are different types. So, we have to pick a canonical
3432 representative. We do this below.
3434 Technically, this approach is actually more conservative that
3435 it needs to be. In particular, `const int *' and `int *'
3436 chould be in different alias sets, according to the C and C++
3437 standard, since their types are not the same, and so,
3438 technically, an `int **' and `const int **' cannot point at
3441 But, the standard is wrong. In particular, this code is
3446 const int* const* cipp = &ip;
3448 And, it doesn't make sense for that to be legal unless you
3449 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3450 the pointed-to types. This issue has been reported to the
3452 t = TYPE_MAIN_VARIANT (TREE_TYPE (type));
3453 t = ((TREE_CODE (type) == POINTER_TYPE)
3454 ? build_pointer_type (t) : build_reference_type (t));
3456 TYPE_ALIAS_SET (type) = c_get_alias_set (t);
3459 if (!TYPE_ALIAS_SET_KNOWN_P (type))
3460 /* TYPE is something we haven't seen before. Put it in a new
3462 TYPE_ALIAS_SET (type) = new_alias_set ();
3464 return TYPE_ALIAS_SET (type);
3467 /* Build tree nodes and builtin functions common to both C and C++ language
3469 CPLUS_MODE is nonzero if we are called from the C++ frontend, we generate
3470 some stricter prototypes in that case.
3471 NO_BUILTINS and NO_NONANSI_BUILTINS contain the respective values of
3472 the language frontend flags flag_no_builtin and
3473 flag_no_nonansi_builtin. */
3475 c_common_nodes_and_builtins (cplus_mode, no_builtins, no_nonansi_builtins)
3476 int cplus_mode, no_builtins, no_nonansi_builtins;
3479 tree memcpy_ftype, memset_ftype, strlen_ftype;
3480 tree bzero_ftype, bcmp_ftype;
3481 tree endlink, int_endlink, double_endlink, unsigned_endlink;
3482 tree sizetype_endlink;
3483 tree ptr_ftype, ptr_ftype_unsigned;
3484 tree void_ftype_any, void_ftype_int, int_ftype_any;
3485 tree double_ftype_double, double_ftype_double_double;
3486 tree float_ftype_float, ldouble_ftype_ldouble;
3487 tree int_ftype_cptr_cptr_sizet;
3488 tree int_ftype_string_string, string_ftype_ptr_ptr;
3489 tree long_ftype_long;
3490 /* Either char* or void*. */
3491 tree traditional_ptr_type_node;
3492 /* Either const char* or const void*. */
3493 tree traditional_cptr_type_node;
3494 tree traditional_len_type_node;
3495 tree traditional_len_endlink;
3496 tree va_list_ref_type_node;
3497 tree va_list_arg_type_node;
3499 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3500 va_list_type_node));
3502 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
3503 ptrdiff_type_node));
3505 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
3508 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3510 va_list_arg_type_node = va_list_ref_type_node =
3511 build_pointer_type (TREE_TYPE (va_list_type_node));
3515 va_list_arg_type_node = va_list_type_node;
3516 va_list_ref_type_node = build_reference_type (va_list_type_node);
3519 endlink = void_list_node;
3520 int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
3521 double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
3522 unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
3524 ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
3525 ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
3526 sizetype_endlink = tree_cons (NULL_TREE, TYPE_DOMAIN (sizetype), endlink);
3527 /* We realloc here because sizetype could be int or unsigned. S'ok. */
3528 ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
3530 int_ftype_any = build_function_type (integer_type_node, NULL_TREE);
3531 void_ftype_any = build_function_type (void_type_node, NULL_TREE);
3532 void_ftype = build_function_type (void_type_node, endlink);
3533 void_ftype_int = build_function_type (void_type_node, int_endlink);
3535 = build_function_type (void_type_node,
3536 tree_cons (NULL_TREE, ptr_type_node, endlink));
3539 = build_function_type (float_type_node,
3540 tree_cons (NULL_TREE, float_type_node, endlink));
3543 = build_function_type (double_type_node, double_endlink);
3545 ldouble_ftype_ldouble
3546 = build_function_type (long_double_type_node,
3547 tree_cons (NULL_TREE, long_double_type_node,
3550 double_ftype_double_double
3551 = build_function_type (double_type_node,
3552 tree_cons (NULL_TREE, double_type_node,
3556 = build_function_type (integer_type_node, int_endlink);
3559 = build_function_type (long_integer_type_node,
3560 tree_cons (NULL_TREE, long_integer_type_node,
3563 int_ftype_cptr_cptr_sizet
3564 = build_function_type (integer_type_node,
3565 tree_cons (NULL_TREE, const_ptr_type_node,
3566 tree_cons (NULL_TREE, const_ptr_type_node,
3567 tree_cons (NULL_TREE,
3571 /* Prototype for strcpy. */
3572 string_ftype_ptr_ptr
3573 = build_function_type (string_type_node,
3574 tree_cons (NULL_TREE, string_type_node,
3575 tree_cons (NULL_TREE,
3576 const_string_type_node,
3579 traditional_len_type_node = (flag_traditional && ! cplus_mode
3580 ? integer_type_node : sizetype);
3581 traditional_len_endlink = tree_cons (NULL_TREE, traditional_len_type_node,
3584 /* Prototype for strcmp. */
3585 int_ftype_string_string
3586 = build_function_type (integer_type_node,
3587 tree_cons (NULL_TREE, const_string_type_node,
3588 tree_cons (NULL_TREE,
3589 const_string_type_node,
3592 /* Prototype for strlen. */
3594 = build_function_type (traditional_len_type_node,
3595 tree_cons (NULL_TREE, const_string_type_node,
3598 traditional_ptr_type_node = (flag_traditional && ! cplus_mode
3599 ? string_type_node : ptr_type_node);
3600 traditional_cptr_type_node = (flag_traditional && ! cplus_mode
3601 ? const_string_type_node : const_ptr_type_node);
3603 /* Prototype for memcpy. */
3605 = build_function_type (traditional_ptr_type_node,
3606 tree_cons (NULL_TREE, ptr_type_node,
3607 tree_cons (NULL_TREE, const_ptr_type_node,
3608 sizetype_endlink)));
3610 /* Prototype for memset. */
3612 = build_function_type (traditional_ptr_type_node,
3613 tree_cons (NULL_TREE, ptr_type_node,
3614 tree_cons (NULL_TREE, integer_type_node,
3615 tree_cons (NULL_TREE,
3619 /* Prototype for bzero. */
3621 = build_function_type (void_type_node,
3622 tree_cons (NULL_TREE, traditional_ptr_type_node,
3623 traditional_len_endlink));
3625 /* Prototype for bcmp. */
3627 = build_function_type (integer_type_node,
3628 tree_cons (NULL_TREE, traditional_cptr_type_node,
3629 tree_cons (NULL_TREE,
3630 traditional_cptr_type_node,
3631 traditional_len_endlink)));
3633 builtin_function ("__builtin_constant_p", default_function_type,
3634 BUILT_IN_CONSTANT_P, BUILT_IN_NORMAL, NULL_PTR);
3636 builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
3637 BUILT_IN_RETURN_ADDRESS, BUILT_IN_NORMAL, NULL_PTR);
3639 builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
3640 BUILT_IN_FRAME_ADDRESS, BUILT_IN_NORMAL, NULL_PTR);
3642 builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
3643 BUILT_IN_ALLOCA, BUILT_IN_NORMAL, "alloca");
3644 builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS,
3645 BUILT_IN_NORMAL, NULL_PTR);
3646 /* Define alloca, ffs as builtins.
3647 Declare _exit just to mark it as volatile. */
3648 if (! no_builtins && ! no_nonansi_builtins)
3651 temp = builtin_function ("alloca", ptr_ftype_sizetype,
3652 BUILT_IN_ALLOCA, BUILT_IN_NORMAL, NULL_PTR);
3653 /* Suppress error if redefined as a non-function. */
3654 DECL_BUILT_IN_NONANSI (temp) = 1;
3656 temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS,
3657 BUILT_IN_NORMAL, NULL_PTR);
3658 /* Suppress error if redefined as a non-function. */
3659 DECL_BUILT_IN_NONANSI (temp) = 1;
3660 temp = builtin_function ("_exit", void_ftype_int,
3661 0, NOT_BUILT_IN, NULL_PTR);
3662 TREE_THIS_VOLATILE (temp) = 1;
3663 TREE_SIDE_EFFECTS (temp) = 1;
3664 /* Suppress error if redefined as a non-function. */
3665 DECL_BUILT_IN_NONANSI (temp) = 1;
3667 /* The system prototypes for these functions have many
3668 variations, so don't specify parameters to avoid conflicts.
3669 The expand_* functions check the argument types anyway. */
3670 temp = builtin_function ("bzero", void_ftype_any,
3671 BUILT_IN_BZERO, BUILT_IN_NORMAL, NULL_PTR);
3672 DECL_BUILT_IN_NONANSI (temp) = 1;
3673 temp = builtin_function ("bcmp", int_ftype_any,
3674 BUILT_IN_BCMP, BUILT_IN_NORMAL, NULL_PTR);
3675 DECL_BUILT_IN_NONANSI (temp) = 1;
3678 builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS,
3679 BUILT_IN_NORMAL, NULL_PTR);
3680 builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
3681 BUILT_IN_NORMAL, NULL_PTR);
3682 builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
3683 BUILT_IN_NORMAL, NULL_PTR);
3684 builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
3685 BUILT_IN_NORMAL, NULL_PTR);
3686 builtin_function ("__builtin_labs", long_ftype_long, BUILT_IN_LABS,
3687 BUILT_IN_NORMAL, NULL_PTR);
3688 builtin_function ("__builtin_saveregs", ptr_ftype, BUILT_IN_SAVEREGS,
3689 BUILT_IN_NORMAL, NULL_PTR);
3690 builtin_function ("__builtin_classify_type", default_function_type,
3691 BUILT_IN_CLASSIFY_TYPE, BUILT_IN_NORMAL, NULL_PTR);
3692 builtin_function ("__builtin_next_arg", ptr_ftype, BUILT_IN_NEXT_ARG,
3693 BUILT_IN_NORMAL, NULL_PTR);
3694 builtin_function ("__builtin_args_info", int_ftype_int, BUILT_IN_ARGS_INFO,
3695 BUILT_IN_NORMAL, NULL_PTR);
3696 builtin_function ("__builtin_setjmp",
3697 build_function_type (integer_type_node,
3698 tree_cons (NULL_TREE, ptr_type_node,
3700 BUILT_IN_SETJMP, BUILT_IN_NORMAL, NULL_PTR);
3701 builtin_function ("__builtin_longjmp",
3702 build_function_type (void_type_node,
3703 tree_cons (NULL_TREE, ptr_type_node,
3704 tree_cons (NULL_TREE,
3707 BUILT_IN_LONGJMP, BUILT_IN_NORMAL, NULL_PTR);
3708 builtin_function ("__builtin_trap", void_ftype, BUILT_IN_TRAP,
3709 BUILT_IN_NORMAL, NULL_PTR);
3711 /* ISO C99 IEEE Unordered compares. */
3712 builtin_function ("__builtin_isgreater", default_function_type,
3713 BUILT_IN_ISGREATER, BUILT_IN_NORMAL, NULL_PTR);
3714 builtin_function ("__builtin_isgreaterequal", default_function_type,
3715 BUILT_IN_ISGREATEREQUAL, BUILT_IN_NORMAL, NULL_PTR);
3716 builtin_function ("__builtin_isless", default_function_type,
3717 BUILT_IN_ISLESS, BUILT_IN_NORMAL, NULL_PTR);
3718 builtin_function ("__builtin_islessequal", default_function_type,
3719 BUILT_IN_ISLESSEQUAL, BUILT_IN_NORMAL, NULL_PTR);
3720 builtin_function ("__builtin_islessgreater", default_function_type,
3721 BUILT_IN_ISLESSGREATER, BUILT_IN_NORMAL, NULL_PTR);
3722 builtin_function ("__builtin_isunordered", default_function_type,
3723 BUILT_IN_ISUNORDERED, BUILT_IN_NORMAL, NULL_PTR);
3725 /* Untyped call and return. */
3726 builtin_function ("__builtin_apply_args", ptr_ftype,
3727 BUILT_IN_APPLY_ARGS, BUILT_IN_NORMAL, NULL_PTR);
3729 temp = tree_cons (NULL_TREE,
3730 build_pointer_type (build_function_type (void_type_node,
3732 tree_cons (NULL_TREE,
3734 tree_cons (NULL_TREE,
3737 builtin_function ("__builtin_apply",
3738 build_function_type (ptr_type_node, temp),
3739 BUILT_IN_APPLY, BUILT_IN_NORMAL, NULL_PTR);
3740 builtin_function ("__builtin_return", void_ftype_ptr,
3741 BUILT_IN_RETURN, BUILT_IN_NORMAL, NULL_PTR);
3743 /* Support for varargs.h and stdarg.h. */
3744 builtin_function ("__builtin_varargs_start",
3745 build_function_type (void_type_node,
3746 tree_cons (NULL_TREE,
3747 va_list_ref_type_node,
3749 BUILT_IN_VARARGS_START, BUILT_IN_NORMAL, NULL_PTR);
3751 builtin_function ("__builtin_stdarg_start",
3752 build_function_type (void_type_node,
3753 tree_cons (NULL_TREE,
3754 va_list_ref_type_node,
3756 BUILT_IN_STDARG_START, BUILT_IN_NORMAL, NULL_PTR);
3758 builtin_function ("__builtin_va_end",
3759 build_function_type (void_type_node,
3760 tree_cons (NULL_TREE,
3761 va_list_ref_type_node,
3763 BUILT_IN_VA_END, BUILT_IN_NORMAL, NULL_PTR);
3765 builtin_function ("__builtin_va_copy",
3766 build_function_type (void_type_node,
3767 tree_cons (NULL_TREE,
3768 va_list_ref_type_node,
3769 tree_cons (NULL_TREE,
3770 va_list_arg_type_node,
3772 BUILT_IN_VA_COPY, BUILT_IN_NORMAL, NULL_PTR);
3774 /* ??? Ought to be `T __builtin_expect(T, T)' for any type T. */
3775 builtin_function ("__builtin_expect",
3776 build_function_type (long_integer_type_node,
3777 tree_cons (NULL_TREE,
3778 long_integer_type_node,
3779 tree_cons (NULL_TREE,
3780 long_integer_type_node,
3782 BUILT_IN_EXPECT, BUILT_IN_NORMAL, NULL_PTR);
3784 /* Currently under experimentation. */
3785 builtin_function ("__builtin_memcpy", memcpy_ftype, BUILT_IN_MEMCPY,
3786 BUILT_IN_NORMAL, "memcpy");
3787 builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
3788 BUILT_IN_MEMCMP, BUILT_IN_NORMAL, "memcmp");
3789 builtin_function ("__builtin_memset", memset_ftype,
3790 BUILT_IN_MEMSET, BUILT_IN_NORMAL, "memset");
3791 builtin_function ("__builtin_bzero", bzero_ftype,
3792 BUILT_IN_BZERO, BUILT_IN_NORMAL, "bzero");
3793 builtin_function ("__builtin_bcmp", bcmp_ftype,
3794 BUILT_IN_BCMP, BUILT_IN_NORMAL, "bcmp");
3795 builtin_function ("__builtin_strcmp", int_ftype_string_string,
3796 BUILT_IN_STRCMP, BUILT_IN_NORMAL, "strcmp");
3797 builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
3798 BUILT_IN_STRCPY, BUILT_IN_NORMAL, "strcpy");
3799 builtin_function ("__builtin_strlen", strlen_ftype,
3800 BUILT_IN_STRLEN, BUILT_IN_NORMAL, "strlen");
3801 builtin_function ("__builtin_sqrtf", float_ftype_float,
3802 BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtf");
3803 builtin_function ("__builtin_fsqrt", double_ftype_double,
3804 BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrt");
3805 builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
3806 BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtl");
3807 builtin_function ("__builtin_sinf", float_ftype_float,
3808 BUILT_IN_SIN, BUILT_IN_NORMAL, "sinf");
3809 builtin_function ("__builtin_sin", double_ftype_double,
3810 BUILT_IN_SIN, BUILT_IN_NORMAL, "sin");
3811 builtin_function ("__builtin_sinl", ldouble_ftype_ldouble,
3812 BUILT_IN_SIN, BUILT_IN_NORMAL, "sinl");
3813 builtin_function ("__builtin_cosf", float_ftype_float,
3814 BUILT_IN_COS, BUILT_IN_NORMAL, "cosf");
3815 builtin_function ("__builtin_cos", double_ftype_double,
3816 BUILT_IN_COS, BUILT_IN_NORMAL, "cos");
3817 builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
3818 BUILT_IN_COS, BUILT_IN_NORMAL, "cosl");
3822 builtin_function ("abs", int_ftype_int, BUILT_IN_ABS,
3823 BUILT_IN_NORMAL, NULL_PTR);
3824 builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS,
3825 BUILT_IN_NORMAL, NULL_PTR);
3826 builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS,
3827 BUILT_IN_NORMAL, NULL_PTR);
3828 builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
3829 BUILT_IN_NORMAL, NULL_PTR);
3830 builtin_function ("labs", long_ftype_long, BUILT_IN_LABS,
3831 BUILT_IN_NORMAL, NULL_PTR);
3832 builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY,
3833 BUILT_IN_NORMAL, NULL_PTR);
3834 builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
3835 BUILT_IN_NORMAL, NULL_PTR);
3836 builtin_function ("memset", memset_ftype, BUILT_IN_MEMSET,
3837 BUILT_IN_NORMAL, NULL_PTR);
3838 builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
3839 BUILT_IN_NORMAL, NULL_PTR);
3840 builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
3841 BUILT_IN_NORMAL, NULL_PTR);
3842 builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN,
3843 BUILT_IN_NORMAL, NULL_PTR);
3844 builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT,
3845 BUILT_IN_NORMAL, NULL_PTR);
3846 builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT,
3847 BUILT_IN_NORMAL, NULL_PTR);
3848 builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
3849 BUILT_IN_NORMAL, NULL_PTR);
3850 builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN,
3851 BUILT_IN_NORMAL, NULL_PTR);
3852 builtin_function ("sin", double_ftype_double, BUILT_IN_SIN,
3853 BUILT_IN_NORMAL, NULL_PTR);
3854 builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN,
3855 BUILT_IN_NORMAL, NULL_PTR);
3856 builtin_function ("cosf", float_ftype_float, BUILT_IN_COS,
3857 BUILT_IN_NORMAL, NULL_PTR);
3858 builtin_function ("cos", double_ftype_double, BUILT_IN_COS,
3859 BUILT_IN_NORMAL, NULL_PTR);
3860 builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS,
3861 BUILT_IN_NORMAL, NULL_PTR);
3863 /* Declare these functions volatile
3864 to avoid spurious "control drops through" warnings. */
3865 temp = builtin_function ("abort", cplus_mode ? void_ftype : void_ftype_any,
3866 0, NOT_BUILT_IN, NULL_PTR);
3867 TREE_THIS_VOLATILE (temp) = 1;
3868 TREE_SIDE_EFFECTS (temp) = 1;
3870 #if 0 /* ??? The C++ frontend used to do this. */
3871 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
3873 DECL_BUILT_IN_NONANSI (temp) = 1;
3875 temp = builtin_function ("exit",
3876 cplus_mode ? void_ftype_int : void_ftype_any,
3877 0, NOT_BUILT_IN, NULL_PTR);
3878 TREE_THIS_VOLATILE (temp) = 1;
3879 TREE_SIDE_EFFECTS (temp) = 1;
3881 #if 0 /* ??? The C++ frontend used to do this. */
3882 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
3884 DECL_BUILT_IN_NONANSI (temp) = 1;
3889 /* Support for these has not been written in either expand_builtin
3890 or build_function_call. */
3891 builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV,
3892 BUILT_IN_NORMAL, NULL_PTR);
3893 builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV,
3894 BUILT_IN_NORMAL, NULL_PTR);
3895 builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
3896 BUILT_IN_NORMAL, NULL_PTR);
3897 builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
3898 BUILT_IN_NORMAL, NULL_PTR);
3899 builtin_function ("__builtin_fmod", double_ftype_double_double,
3900 BUILT_IN_FMOD, BUILT_IN_NORMAL, NULL_PTR);
3901 builtin_function ("__builtin_frem", double_ftype_double_double,
3902 BUILT_IN_FREM, BUILT_IN_NORMAL, NULL_PTR);
3903 builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
3904 BUILT_IN_NORMAL, NULL_PTR);
3905 builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
3906 BUILT_IN_NORMAL, NULL_PTR);
3909 /* ??? Perhaps there's a better place to do this. But it is related
3910 to __builtin_va_arg, so it isn't that off-the-wall. */
3911 lang_type_promotes_to = simple_type_promotes_to;
3915 build_va_arg (expr, type)
3918 return build1 (VA_ARG_EXPR, type, expr);
3921 /* Given a type, apply default promotions wrt unnamed function arguments
3922 and return the new type. Return NULL_TREE if no change. */
3923 /* ??? There is a function of the same name in the C++ front end that
3924 does something similar, but is more thorough and does not return NULL
3925 if no change. We could perhaps share code, but it would make the
3926 self_promoting_type property harder to identify. */
3929 simple_type_promotes_to (type)
3932 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3933 return double_type_node;
3935 if (C_PROMOTING_INTEGER_TYPE_P (type))
3937 /* Traditionally, unsignedness is preserved in default promotions.
3938 Also preserve unsignedness if not really getting any wider. */
3939 if (TREE_UNSIGNED (type)
3940 && (flag_traditional
3941 || TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
3942 return unsigned_type_node;
3943 return integer_type_node;
3949 /* Return 1 if PARMS specifies a fixed number of parameters
3950 and none of their types is affected by default promotions. */
3953 self_promoting_args_p (parms)
3957 for (t = parms; t; t = TREE_CHAIN (t))
3959 register tree type = TREE_VALUE (t);
3961 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3967 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3970 if (C_PROMOTING_INTEGER_TYPE_P (type))
3976 /* Recognize certain built-in functions so we can make tree-codes
3977 other than CALL_EXPR. We do this when it enables fold-const.c
3978 to do something useful. */
3979 /* ??? By rights this should go in builtins.c, but only C and C++
3980 implement build_{binary,unary}_op. Not exactly sure what bits
3981 of functionality are actually needed from those functions, or
3982 where the similar functionality exists in the other front ends. */
3985 expand_tree_builtin (function, params, coerced_params)
3986 tree function, params, coerced_params;
3988 enum tree_code code;
3990 if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
3993 switch (DECL_FUNCTION_CODE (function))
3998 if (coerced_params == 0)
3999 return integer_zero_node;
4000 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
4002 case BUILT_IN_ISGREATER:
4003 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4009 case BUILT_IN_ISGREATEREQUAL:
4010 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4016 case BUILT_IN_ISLESS:
4017 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4023 case BUILT_IN_ISLESSEQUAL:
4024 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4030 case BUILT_IN_ISLESSGREATER:
4031 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
4037 case BUILT_IN_ISUNORDERED:
4038 if (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT)
4039 return integer_zero_node;
4040 code = UNORDERED_EXPR;
4048 || TREE_CHAIN (params) == 0)
4050 error ("too few arguments to function `%s'",
4051 IDENTIFIER_POINTER (DECL_NAME (function)));
4052 return error_mark_node;
4054 else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
4056 error ("too many arguments to function `%s'",
4057 IDENTIFIER_POINTER (DECL_NAME (function)));
4058 return error_mark_node;
4061 arg0 = TREE_VALUE (params);
4062 arg1 = TREE_VALUE (TREE_CHAIN (params));
4063 arg0 = build_binary_op (code, arg0, arg1, 0);
4064 if (code != UNORDERED_EXPR)
4065 arg0 = build_unary_op (TRUTH_NOT_EXPR, arg0, 0);