1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
4 This file is part of GNU CC.
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
29 extern struct obstack permanent_obstack;
31 enum attrs {A_PACKED, A_NORETURN, A_CONST, A_T_UNION, A_CONSTRUCTOR,
32 A_DESTRUCTOR, A_MODE, A_SECTION, A_ALIGNED, A_FORMAT};
34 static void declare_hidden_char_array PROTO((char *, char *));
35 static void add_attribute PROTO((enum attrs, char *,
37 static void init_attributes PROTO((void));
39 /* Make bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
42 declare_function_name ()
44 char *name, *printable_name;
46 if (current_function_decl == NULL)
49 printable_name = "top level";
53 char *kind = "function";
54 if (TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE)
56 /* Allow functions to be nameless (such as artificial ones). */
57 if (DECL_NAME (current_function_decl))
58 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
61 printable_name = (*decl_printable_name) (current_function_decl, &kind);
64 declare_hidden_char_array ("__FUNCTION__", name);
65 declare_hidden_char_array ("__PRETTY_FUNCTION__", printable_name);
69 declare_hidden_char_array (name, value)
72 tree decl, type, init;
75 /* If the default size of char arrays isn't big enough for the name,
76 or if we want to give warnings for large objects, make a bigger one. */
77 vlen = strlen (value) + 1;
78 type = char_array_type_node;
79 if (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TREE_TYPE (type))) < vlen
81 type = build_array_type (char_type_node,
82 build_index_type (build_int_2 (vlen, 0)));
83 push_obstacks_nochange ();
84 decl = build_decl (VAR_DECL, get_identifier (name), type);
85 TREE_STATIC (decl) = 1;
86 TREE_READONLY (decl) = 1;
87 TREE_ASM_WRITTEN (decl) = 1;
88 DECL_SOURCE_LINE (decl) = 0;
89 DECL_IN_SYSTEM_HEADER (decl) = 1;
90 DECL_IGNORED_P (decl) = 1;
91 init = build_string (vlen, value);
92 TREE_TYPE (init) = type;
93 DECL_INITIAL (decl) = init;
94 finish_decl (pushdecl (decl), init, NULL_TREE);
97 /* Given a chain of STRING_CST nodes,
98 concatenate them into one STRING_CST
99 and give it a suitable array-of-chars data type. */
102 combine_strings (strings)
105 register tree value, t;
106 register int length = 1;
109 int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
112 if (TREE_CHAIN (strings))
114 /* More than one in the chain, so concatenate. */
115 register char *p, *q;
117 /* Don't include the \0 at the end of each substring,
118 except for the last one.
119 Count wide strings and ordinary strings separately. */
120 for (t = strings; t; t = TREE_CHAIN (t))
122 if (TREE_TYPE (t) == wchar_array_type_node)
124 wide_length += (TREE_STRING_LENGTH (t) - wchar_bytes);
128 length += (TREE_STRING_LENGTH (t) - 1);
131 /* If anything is wide, the non-wides will be converted,
132 which makes them take more space. */
134 length = length * wchar_bytes + wide_length;
136 p = savealloc (length);
138 /* Copy the individual strings into the new combined string.
139 If the combined string is wide, convert the chars to ints
140 for any individual strings that are not wide. */
143 for (t = strings; t; t = TREE_CHAIN (t))
145 int len = (TREE_STRING_LENGTH (t)
146 - ((TREE_TYPE (t) == wchar_array_type_node)
148 if ((TREE_TYPE (t) == wchar_array_type_node) == wide_flag)
150 bcopy (TREE_STRING_POINTER (t), q, len);
156 for (i = 0; i < len; i++)
157 ((int *) q)[i] = TREE_STRING_POINTER (t)[i];
158 q += len * wchar_bytes;
164 for (i = 0; i < wchar_bytes; i++)
170 value = make_node (STRING_CST);
171 TREE_STRING_POINTER (value) = p;
172 TREE_STRING_LENGTH (value) = length;
173 TREE_CONSTANT (value) = 1;
178 length = TREE_STRING_LENGTH (value);
179 if (TREE_TYPE (value) == wchar_array_type_node)
183 /* Compute the number of elements, for the array type. */
184 nchars = wide_flag ? length / wchar_bytes : length;
186 /* Create the array type for the string constant.
187 -Wwrite-strings says make the string constant an array of const char
188 so that copying it to a non-const pointer will get a warning. */
189 if (warn_write_strings
190 && (! flag_traditional && ! flag_writable_strings))
193 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
196 = build_array_type (elements,
197 build_index_type (build_int_2 (nchars - 1, 0)));
201 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
202 build_index_type (build_int_2 (nchars - 1, 0)));
203 TREE_CONSTANT (value) = 1;
204 TREE_STATIC (value) = 1;
208 /* To speed up processing of attributes, we maintain an array of
209 IDENTIFIER_NODES and the corresponding attribute types. */
211 /* Array to hold attribute information. */
213 static struct {enum attrs id; tree name; int min, max, decl_req;} attrtab[50];
215 static int attrtab_idx = 0;
217 /* Add an entry to the attribute table above. */
220 add_attribute (id, string, min_len, max_len, decl_req)
223 int min_len, max_len;
228 attrtab[attrtab_idx].id = id;
229 attrtab[attrtab_idx].name = get_identifier (string);
230 attrtab[attrtab_idx].min = min_len;
231 attrtab[attrtab_idx].max = max_len;
232 attrtab[attrtab_idx++].decl_req = decl_req;
234 sprintf (buf, "__%s__", string);
236 attrtab[attrtab_idx].id = id;
237 attrtab[attrtab_idx].name = get_identifier (buf);
238 attrtab[attrtab_idx].min = min_len;
239 attrtab[attrtab_idx].max = max_len;
240 attrtab[attrtab_idx++].decl_req = decl_req;
243 /* Initialize attribute table. */
248 add_attribute (A_PACKED, "packed", 0, 0, 1);
249 add_attribute (A_NORETURN, "noreturn", 0, 0, 1);
250 add_attribute (A_NORETURN, "volatile", 0, 0, 1);
251 add_attribute (A_CONST, "const", 0, 0, 1);
252 add_attribute (A_T_UNION, "transparent_union", 0, 0, 0);
253 add_attribute (A_CONSTRUCTOR, "constructor", 0, 0, 1);
254 add_attribute (A_DESTRUCTOR, "destructor", 0, 0, 1);
255 add_attribute (A_MODE, "mode", 1, 1, 1);
256 add_attribute (A_SECTION, "section", 1, 1, 1);
257 add_attribute (A_ALIGNED, "aligned", 0, 1, 0);
258 add_attribute (A_FORMAT, "format", 3, 3, 1);
261 /* Process the attributes listed in ATTRIBUTES and PREFIX_ATTRIBUTES
262 and install them in NODE, which is either a DECL (including a TYPE_DECL)
263 or a TYPE. PREFIX_ATTRIBUTES can appear after the declaration specifiers
264 and declaration modifiers but before the declaration proper. */
267 decl_attributes (node, attributes, prefix_attributes)
268 tree node, attributes, prefix_attributes;
274 if (attrtab_idx == 0)
277 if (TREE_CODE_CLASS (TREE_CODE (node)) == 'd')
280 type = TREE_TYPE (decl);
281 is_type = TREE_CODE (node) == TYPE_DECL;
283 else if (TREE_CODE_CLASS (TREE_CODE (node)) == 't')
284 type = node, is_type = 1;
286 attributes = chainon (prefix_attributes, attributes);
288 for (a = attributes; a; a = TREE_CHAIN (a))
290 tree name = TREE_PURPOSE (a);
291 tree args = TREE_VALUE (a);
295 for (i = 0; i < attrtab_idx; i++)
296 if (attrtab[i].name == name)
300 && ! valid_machine_attribute (name, args, decl, type))
302 warning ("`%s' attribute directive ignored",
303 IDENTIFIER_POINTER (name));
306 else if (attrtab[i].decl_req && decl == 0)
308 warning ("`%s' attribute does not apply to types",
309 IDENTIFIER_POINTER (name));
312 else if (list_length (args) < attrtab[i].min
313 || list_length (args) > attrtab[i].max)
315 error ("wrong number of arguments specified for `%s' attribute",
316 IDENTIFIER_POINTER (name));
324 if (TREE_CODE (decl) == FIELD_DECL)
325 DECL_PACKED (decl) = 1;
326 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
327 used for DECL_REGISTER. It wouldn't mean anything anyway. */
329 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
333 if (TREE_CODE (decl) == FUNCTION_DECL)
334 TREE_THIS_VOLATILE (decl) = 1;
335 else if (TREE_CODE (type) == POINTER_TYPE
336 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
337 TREE_TYPE (decl) = type
339 (build_type_variant (TREE_TYPE (type),
340 TREE_READONLY (TREE_TYPE (type)), 1));
342 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
346 if (TREE_CODE (decl) == FUNCTION_DECL)
347 TREE_READONLY (decl) = 1;
348 else if (TREE_CODE (type) == POINTER_TYPE
349 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
350 TREE_TYPE (decl) = type
352 (build_type_variant (TREE_TYPE (type), 1,
353 TREE_THIS_VOLATILE (TREE_TYPE (type))));
355 warning ( "`%s' attribute ignored", IDENTIFIER_POINTER (name));
359 if (decl != 0 && TREE_CODE (decl) == PARM_DECL
360 && TREE_CODE (type) == UNION_TYPE
361 && TYPE_MODE (type) == DECL_MODE (TYPE_FIELDS (type)))
362 DECL_TRANSPARENT_UNION (decl) = 1;
364 && TREE_CODE (type) == UNION_TYPE
365 && TYPE_MODE (type) == DECL_MODE (TYPE_FIELDS (type)))
366 TYPE_TRANSPARENT_UNION (type) = 1;
368 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
372 if (TREE_CODE (decl) == FUNCTION_DECL
373 && TREE_CODE (type) == FUNCTION_TYPE
374 && decl_function_context (decl) == 0)
375 DECL_STATIC_CONSTRUCTOR (decl) = 1;
377 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
381 if (TREE_CODE (decl) == FUNCTION_DECL
382 && TREE_CODE (type) == FUNCTION_TYPE
383 && decl_function_context (decl) == 0)
384 DECL_STATIC_DESTRUCTOR (decl) = 1;
386 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
390 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
391 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
395 char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
396 int len = strlen (p);
397 enum machine_mode mode = VOIDmode;
400 if (len > 4 && p[0] == '_' && p[1] == '_'
401 && p[len - 1] == '_' && p[len - 2] == '_')
403 char *newp = (char *) alloca (len - 2);
405 strcpy (newp, &p[2]);
406 newp[len - 4] = '\0';
410 /* Give this decl a type with the specified mode.
411 First check for the special modes. */
412 if (! strcmp (p, "byte"))
414 else if (!strcmp (p, "word"))
416 else if (! strcmp (p, "pointer"))
419 for (j = 0; j < NUM_MACHINE_MODES; j++)
420 if (!strcmp (p, GET_MODE_NAME (j)))
421 mode = (enum machine_mode) j;
423 if (mode == VOIDmode)
424 error ("unknown machine mode `%s'", p);
425 else if (0 == (typefm = type_for_mode (mode,
426 TREE_UNSIGNED (type))))
427 error ("no data type for mode `%s'", p);
430 TREE_TYPE (decl) = type = typefm;
431 DECL_SIZE (decl) = 0;
432 layout_decl (decl, 0);
438 #ifdef ASM_OUTPUT_SECTION_NAME
439 if ((TREE_CODE (decl) == FUNCTION_DECL
440 || TREE_CODE (decl) == VAR_DECL)
441 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
443 if (TREE_CODE (decl) == VAR_DECL
444 && current_function_decl != NULL_TREE)
445 error_with_decl (decl,
446 "section attribute cannot be specified for local variables");
447 /* The decl may have already been given a section attribute from
448 a previous declaration. Ensure they match. */
449 else if (DECL_SECTION_NAME (decl) != NULL_TREE
450 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
451 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
452 error_with_decl (node,
453 "section of `%s' conflicts with previous declaration");
455 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
458 error_with_decl (node,
459 "section attribute not allowed for `%s'");
461 error_with_decl (node,
462 "section attributes are not supported for this target");
469 = args ? TREE_VALUE (args) : size_int (BIGGEST_ALIGNMENT);
472 /* Strip any NOPs of any kind. */
473 while (TREE_CODE (align_expr) == NOP_EXPR
474 || TREE_CODE (align_expr) == CONVERT_EXPR
475 || TREE_CODE (align_expr) == NON_LVALUE_EXPR)
476 align_expr = TREE_OPERAND (align_expr, 0);
478 if (TREE_CODE (align_expr) != INTEGER_CST)
480 error ("requested alignment is not a constant");
484 align = TREE_INT_CST_LOW (align_expr) * BITS_PER_UNIT;
486 if (exact_log2 (align) == -1)
487 error ("requested alignment is not a power of 2");
489 TYPE_ALIGN (TREE_TYPE (decl)) = align;
490 else if (TREE_CODE (decl) != VAR_DECL
491 && TREE_CODE (decl) != FIELD_DECL)
492 error_with_decl (decl,
493 "alignment may not be specified for `%s'");
495 DECL_ALIGN (decl) = align;
501 tree format_type = TREE_VALUE (args);
502 tree format_num_expr = TREE_VALUE (TREE_CHAIN (args));
503 tree first_arg_num_expr
504 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (args)));
511 if (TREE_CODE (decl) != FUNCTION_DECL)
513 error_with_decl (decl,
514 "argument format specified for non-function `%s'");
518 if (TREE_CODE (format_type) == IDENTIFIER_NODE
519 && (!strcmp (IDENTIFIER_POINTER (format_type), "printf")
520 || !strcmp (IDENTIFIER_POINTER (format_type),
523 else if (TREE_CODE (format_type) == IDENTIFIER_NODE
524 && (!strcmp (IDENTIFIER_POINTER (format_type), "scanf")
525 || !strcmp (IDENTIFIER_POINTER (format_type),
530 error ("unrecognized format specifier for `%s'");
534 /* Strip any conversions from the string index and first arg number
535 and verify they are constants. */
536 while (TREE_CODE (format_num_expr) == NOP_EXPR
537 || TREE_CODE (format_num_expr) == CONVERT_EXPR
538 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
539 format_num_expr = TREE_OPERAND (format_num_expr, 0);
541 while (TREE_CODE (first_arg_num_expr) == NOP_EXPR
542 || TREE_CODE (first_arg_num_expr) == CONVERT_EXPR
543 || TREE_CODE (first_arg_num_expr) == NON_LVALUE_EXPR)
544 first_arg_num_expr = TREE_OPERAND (first_arg_num_expr, 0);
546 if (TREE_CODE (format_num_expr) != INTEGER_CST
547 || TREE_CODE (first_arg_num_expr) != INTEGER_CST)
549 error ("format string has non-constant operand number");
553 format_num = TREE_INT_CST_LOW (format_num_expr);
554 first_arg_num = TREE_INT_CST_LOW (first_arg_num_expr);
555 if (first_arg_num != 0 && first_arg_num <= format_num)
557 error ("format string arg follows the args to be formatted");
561 /* If a parameter list is specified, verify that the format_num
562 argument is actually a string, in case the format attribute
564 argument = TYPE_ARG_TYPES (type);
567 for (arg_num = 1; ; ++arg_num)
569 if (argument == 0 || arg_num == format_num)
571 argument = TREE_CHAIN (argument);
574 || TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE
575 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument)))
578 error ("format string arg not a string type");
581 if (first_arg_num != 0)
583 /* Verify that first_arg_num points to the last arg,
586 arg_num++, argument = TREE_CHAIN (argument);
587 if (arg_num != first_arg_num)
589 error ("args to be formatted is not ...");
595 record_function_format (DECL_NAME (decl),
596 DECL_ASSEMBLER_NAME (decl),
597 is_scan, format_num, first_arg_num);
604 /* Check a printf/fprintf/sprintf/scanf/fscanf/sscanf format against
607 #define T_I &integer_type_node
608 #define T_L &long_integer_type_node
609 #define T_LL &long_long_integer_type_node
610 #define T_S &short_integer_type_node
611 #define T_UI &unsigned_type_node
612 #define T_UL &long_unsigned_type_node
613 #define T_ULL &long_long_unsigned_type_node
614 #define T_US &short_unsigned_type_node
615 #define T_F &float_type_node
616 #define T_D &double_type_node
617 #define T_LD &long_double_type_node
618 #define T_C &char_type_node
619 #define T_V &void_type_node
620 #define T_W &wchar_type_node
621 #define T_ST &sizetype
626 /* Type of argument if no length modifier is used. */
628 /* Type of argument if length modifier for shortening is used.
629 If NULL, then this modifier is not allowed. */
631 /* Type of argument if length modifier `l' is used.
632 If NULL, then this modifier is not allowed. */
634 /* Type of argument if length modifier `q' or `ll' is used.
635 If NULL, then this modifier is not allowed. */
637 /* Type of argument if length modifier `L' is used.
638 If NULL, then this modifier is not allowed. */
640 /* List of other modifier characters allowed with these options. */
644 static format_char_info print_char_table[] = {
645 { "di", 0, T_I, T_I, T_L, T_LL, T_LL, "-wp0 +" },
646 { "oxX", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, "-wp0#" },
647 { "u", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, "-wp0" },
648 /* Two GNU extensions. */
649 { "Z", 0, T_ST, NULL, NULL, NULL, NULL, "-wp0" },
650 { "m", 0, T_UI, T_UI, T_UL, NULL, NULL, "-wp" },
651 { "feEgG", 0, T_D, NULL, NULL, NULL, T_LD, "-wp0 +#" },
652 { "c", 0, T_I, NULL, T_W, NULL, NULL, "-w" },
653 { "C", 0, T_W, NULL, NULL, NULL, NULL, "-w" },
654 { "s", 1, T_C, NULL, T_W, NULL, NULL, "-wp" },
655 { "S", 1, T_W, NULL, NULL, NULL, NULL, "-wp" },
656 { "p", 1, T_V, NULL, NULL, NULL, NULL, "-w" },
657 { "n", 1, T_I, T_S, T_L, T_LL, NULL, "" },
661 static format_char_info scan_char_table[] = {
662 { "di", 1, T_I, T_S, T_L, T_LL, T_LL, "*" },
663 { "ouxX", 1, T_UI, T_US, T_UL, T_ULL, T_ULL, "*" },
664 { "efgEG", 1, T_F, NULL, T_D, NULL, T_LD, "*" },
665 { "sc", 1, T_C, NULL, T_W, NULL, NULL, "*a" },
666 { "[", 1, T_C, NULL, NULL, NULL, NULL, "*a" },
667 { "C", 1, T_W, NULL, NULL, NULL, NULL, "*" },
668 { "S", 1, T_W, NULL, NULL, NULL, NULL, "*" },
669 { "p", 2, T_V, NULL, NULL, NULL, NULL, "*" },
670 { "n", 1, T_I, T_S, T_L, T_LL, NULL, "" },
674 typedef struct function_format_info {
675 struct function_format_info *next; /* next structure on the list */
676 tree name; /* identifier such as "printf" */
677 tree assembler_name; /* optional mangled identifier (for C++) */
678 int is_scan; /* TRUE if *scanf */
679 int format_num; /* number of format argument */
680 int first_arg_num; /* number of first arg (zero for varargs) */
681 } function_format_info;
683 static function_format_info *function_format_list = NULL;
685 static void check_format_info PROTO((function_format_info *, tree));
687 /* Initialize the table of functions to perform format checking on.
688 The ANSI functions are always checked (whether <stdio.h> is
689 included or not), since it is common to call printf without
690 including <stdio.h>. There shouldn't be a problem with this,
691 since ANSI reserves these function names whether you include the
692 header file or not. In any case, the checking is harmless. */
695 init_function_format_info ()
697 record_function_format (get_identifier ("printf"), NULL_TREE, 0, 1, 2);
698 record_function_format (get_identifier ("fprintf"), NULL_TREE, 0, 2, 3);
699 record_function_format (get_identifier ("sprintf"), NULL_TREE, 0, 2, 3);
700 record_function_format (get_identifier ("scanf"), NULL_TREE, 1, 1, 2);
701 record_function_format (get_identifier ("fscanf"), NULL_TREE, 1, 2, 3);
702 record_function_format (get_identifier ("sscanf"), NULL_TREE, 1, 2, 3);
703 record_function_format (get_identifier ("vprintf"), NULL_TREE, 0, 1, 0);
704 record_function_format (get_identifier ("vfprintf"), NULL_TREE, 0, 2, 0);
705 record_function_format (get_identifier ("vsprintf"), NULL_TREE, 0, 2, 0);
708 /* Record information for argument format checking. FUNCTION_IDENT is
709 the identifier node for the name of the function to check (its decl
710 need not exist yet). IS_SCAN is true for scanf-type format checking;
711 false indicates printf-style format checking. FORMAT_NUM is the number
712 of the argument which is the format control string (starting from 1).
713 FIRST_ARG_NUM is the number of the first actual argument to check
714 against teh format string, or zero if no checking is not be done
715 (e.g. for varargs such as vfprintf). */
718 record_function_format (name, assembler_name, is_scan,
719 format_num, first_arg_num)
726 function_format_info *info;
728 /* Re-use existing structure if it's there. */
730 for (info = function_format_list; info; info = info->next)
732 if (info->name == name && info->assembler_name == assembler_name)
737 info = (function_format_info *) xmalloc (sizeof (function_format_info));
738 info->next = function_format_list;
739 function_format_list = info;
742 info->assembler_name = assembler_name;
745 info->is_scan = is_scan;
746 info->format_num = format_num;
747 info->first_arg_num = first_arg_num;
750 static char tfaff[] = "too few arguments for format";
752 /* Check the argument list of a call to printf, scanf, etc.
753 NAME is the function identifier.
754 ASSEMBLER_NAME is the function's assembler identifier.
755 (Either NAME or ASSEMBLER_NAME, but not both, may be NULL_TREE.)
756 PARAMS is the list of argument values. */
759 check_function_format (name, assembler_name, params)
764 function_format_info *info;
766 /* See if this function is a format function. */
767 for (info = function_format_list; info; info = info->next)
769 if (info->assembler_name
770 ? (info->assembler_name == assembler_name)
771 : (info->name == name))
774 check_format_info (info, params);
780 /* Check the argument list of a call to printf, scanf, etc.
781 INFO points to the function_format_info structure.
782 PARAMS is the list of argument values. */
785 check_format_info (info, params)
786 function_format_info *info;
791 int suppressed, wide, precise;
799 tree first_fillin_param;
801 format_char_info *fci;
802 static char message[132];
804 int has_operand_number = 0;
806 /* Skip to format argument. If the argument isn't available, there's
807 no work for us to do; prototype checking will catch the problem. */
808 for (arg_num = 1; ; ++arg_num)
812 if (arg_num == info->format_num)
814 params = TREE_CHAIN (params);
816 format_tree = TREE_VALUE (params);
817 params = TREE_CHAIN (params);
818 if (format_tree == 0)
820 /* We can only check the format if it's a string constant. */
821 while (TREE_CODE (format_tree) == NOP_EXPR)
822 format_tree = TREE_OPERAND (format_tree, 0); /* strip coercion */
823 if (format_tree == null_pointer_node)
825 warning ("null format string");
828 if (TREE_CODE (format_tree) != ADDR_EXPR)
830 format_tree = TREE_OPERAND (format_tree, 0);
831 if (TREE_CODE (format_tree) != STRING_CST)
833 format_chars = TREE_STRING_POINTER (format_tree);
834 format_length = TREE_STRING_LENGTH (format_tree);
835 if (format_length <= 1)
836 warning ("zero-length format string");
837 if (format_chars[--format_length] != 0)
839 warning ("unterminated format string");
842 /* Skip to first argument to check. */
843 while (arg_num + 1 < info->first_arg_num)
847 params = TREE_CHAIN (params);
851 first_fillin_param = params;
855 if (*format_chars == 0)
857 if (format_chars - TREE_STRING_POINTER (format_tree) != format_length)
858 warning ("embedded `\\0' in format");
859 if (info->first_arg_num != 0 && params != 0 && ! has_operand_number)
860 warning ("too many arguments for format");
863 if (*format_chars++ != '%')
865 if (*format_chars == 0)
867 warning ("spurious trailing `%%' in format");
870 if (*format_chars == '%')
876 suppressed = wide = precise = FALSE;
879 suppressed = *format_chars == '*';
882 while (isdigit (*format_chars))
887 /* See if we have a number followed by a dollar sign. If we do,
888 it is an operand number, so set PARAMS to that operand. */
889 if (*format_chars >= '0' && *format_chars <= '9')
891 char *p = format_chars;
893 while (*p >= '0' && *p++ <= '9')
898 int opnum = atoi (format_chars);
900 params = first_fillin_param;
901 format_chars = p + 1;
902 has_operand_number = 1;
904 for (i = 1; i < opnum && params != 0; i++)
905 params = TREE_CHAIN (params);
907 if (opnum == 0 || params == 0)
909 warning ("operand number out of range in format");
915 while (*format_chars != 0 && index (" +#0-", *format_chars) != 0)
917 if (index (flag_chars, *format_chars) != 0)
919 sprintf (message, "repeated `%c' flag in format",
923 i = strlen (flag_chars);
924 flag_chars[i++] = *format_chars++;
927 /* "If the space and + flags both appear,
928 the space flag will be ignored." */
929 if (index (flag_chars, ' ') != 0
930 && index (flag_chars, '+') != 0)
931 warning ("use of both ` ' and `+' flags in format");
932 /* "If the 0 and - flags both appear,
933 the 0 flag will be ignored." */
934 if (index (flag_chars, '0') != 0
935 && index (flag_chars, '-') != 0)
936 warning ("use of both `0' and `-' flags in format");
937 if (*format_chars == '*')
940 /* "...a field width...may be indicated by an asterisk.
941 In this case, an int argument supplies the field width..." */
948 if (info->first_arg_num != 0)
950 cur_param = TREE_VALUE (params);
951 params = TREE_CHAIN (params);
953 /* size_t is generally not valid here.
954 It will work on most machines, because size_t and int
955 have the same mode. But might as well warn anyway,
956 since it will fail on other machines. */
957 if ((TYPE_MAIN_VARIANT (TREE_TYPE (cur_param))
958 != integer_type_node)
960 (TYPE_MAIN_VARIANT (TREE_TYPE (cur_param))
961 != unsigned_type_node))
964 "field width is not type int (arg %d)",
972 while (isdigit (*format_chars))
978 if (*format_chars == '.')
982 if (*format_chars != '*' && !isdigit (*format_chars))
983 warning ("`.' not followed by `*' or digit in format");
984 /* "...a...precision...may be indicated by an asterisk.
985 In this case, an int argument supplies the...precision." */
986 if (*format_chars == '*')
988 if (info->first_arg_num != 0)
996 cur_param = TREE_VALUE (params);
997 params = TREE_CHAIN (params);
999 if (TYPE_MAIN_VARIANT (TREE_TYPE (cur_param))
1000 != integer_type_node)
1003 "field width is not type int (arg %d)",
1011 while (isdigit (*format_chars))
1016 if (*format_chars == 'h' || *format_chars == 'l' || *format_chars == 'q' ||
1017 *format_chars == 'L')
1018 length_char = *format_chars++;
1021 if (length_char == 'l' && *format_chars == 'l')
1022 length_char = 'q', format_chars++;
1024 if (*format_chars == 'a')
1029 if (suppressed && length_char != 0)
1032 "use of `*' and `%c' together in format",
1036 format_char = *format_chars;
1037 if (format_char == 0)
1039 warning ("conversion lacks type at end of format");
1043 fci = info->is_scan ? scan_char_table : print_char_table;
1044 while (fci->format_chars != 0
1045 && index (fci->format_chars, format_char) == 0)
1047 if (fci->format_chars == 0)
1049 if (format_char >= 040 && format_char < 0177)
1051 "unknown conversion type character `%c' in format",
1055 "unknown conversion type character 0x%x in format",
1060 if (wide && index (fci->flag_chars, 'w') == 0)
1062 sprintf (message, "width used with `%c' format",
1066 if (precise && index (fci->flag_chars, 'p') == 0)
1068 sprintf (message, "precision used with `%c' format",
1072 if (aflag && index (fci->flag_chars, 'a') == 0)
1074 sprintf (message, "`a' flag used with `%c' format",
1078 if (info->is_scan && format_char == '[')
1080 /* Skip over scan set, in case it happens to have '%' in it. */
1081 if (*format_chars == '^')
1083 /* Find closing bracket; if one is hit immediately, then
1084 it's part of the scan set rather than a terminator. */
1085 if (*format_chars == ']')
1087 while (*format_chars && *format_chars != ']')
1089 if (*format_chars != ']')
1090 /* The end of the format string was reached. */
1091 warning ("no closing `]' for `%%[' format");
1095 if (index (fci->flag_chars, '*') == 0)
1098 "suppression of `%c' conversion in format",
1104 for (i = 0; flag_chars[i] != 0; ++i)
1106 if (index (fci->flag_chars, flag_chars[i]) == 0)
1108 sprintf (message, "flag `%c' used with type `%c'",
1109 flag_chars[i], format_char);
1113 if (precise && index (flag_chars, '0') != 0
1114 && (format_char == 'd' || format_char == 'i'
1115 || format_char == 'o' || format_char == 'u'
1116 || format_char == 'x' || format_char == 'x'))
1119 "precision and `0' flag not both allowed with `%c' format",
1123 switch (length_char)
1125 default: wanted_type = fci->nolen ? *(fci->nolen) : 0; break;
1126 case 'h': wanted_type = fci->hlen ? *(fci->hlen) : 0; break;
1127 case 'l': wanted_type = fci->llen ? *(fci->llen) : 0; break;
1128 case 'q': wanted_type = fci->qlen ? *(fci->qlen) : 0; break;
1129 case 'L': wanted_type = fci->bigllen ? *(fci->bigllen) : 0; break;
1131 if (wanted_type == 0)
1134 "use of `%c' length character with `%c' type character",
1135 length_char, format_char);
1140 ** XXX -- should kvetch about stuff such as
1144 ** scanf ("%d", &i);
1148 /* Finally. . .check type of argument against desired type! */
1149 if (info->first_arg_num == 0)
1156 cur_param = TREE_VALUE (params);
1157 params = TREE_CHAIN (params);
1159 cur_type = TREE_TYPE (cur_param);
1161 /* Check the types of any additional pointer arguments
1162 that precede the "real" argument. */
1163 for (i = 0; i < fci->pointer_count; ++i)
1165 if (TREE_CODE (cur_type) == POINTER_TYPE)
1167 cur_type = TREE_TYPE (cur_type);
1171 "format argument is not a %s (arg %d)",
1172 ((fci->pointer_count == 1) ? "pointer" : "pointer to a pointer"),
1178 /* Check the type of the "real" argument, if there's a type we want. */
1179 if (i == fci->pointer_count && wanted_type != 0
1180 && wanted_type != TYPE_MAIN_VARIANT (cur_type)
1181 /* If we want `void *', allow any pointer type.
1182 (Anything else would already have got a warning.) */
1183 && ! (wanted_type == void_type_node
1184 && fci->pointer_count > 0)
1185 /* Don't warn about differences merely in signedness. */
1186 && !(TREE_CODE (wanted_type) == INTEGER_TYPE
1187 && TREE_CODE (TYPE_MAIN_VARIANT (cur_type)) == INTEGER_TYPE
1188 && (TREE_UNSIGNED (wanted_type)
1189 ? wanted_type == (cur_type = unsigned_type (cur_type))
1190 : wanted_type == (cur_type = signed_type (cur_type))))
1191 /* Likewise, "signed char", "unsigned char" and "char" are
1192 equivalent but the above test won't consider them equivalent. */
1193 && ! (wanted_type == char_type_node
1194 && (TYPE_MAIN_VARIANT (cur_type) == signed_char_type_node
1195 || TYPE_MAIN_VARIANT (cur_type) == unsigned_char_type_node)))
1197 register char *this;
1198 register char *that;
1200 this = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (wanted_type)));
1202 if (TREE_CODE (cur_type) != ERROR_MARK
1203 && TYPE_NAME (cur_type) != 0
1204 && TREE_CODE (cur_type) != INTEGER_TYPE
1205 && !(TREE_CODE (cur_type) == POINTER_TYPE
1206 && TREE_CODE (TREE_TYPE (cur_type)) == INTEGER_TYPE))
1208 if (TREE_CODE (TYPE_NAME (cur_type)) == TYPE_DECL
1209 && DECL_NAME (TYPE_NAME (cur_type)) != 0)
1210 that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (cur_type)));
1212 that = IDENTIFIER_POINTER (TYPE_NAME (cur_type));
1215 /* A nameless type can't possibly match what the format wants.
1216 So there will be a warning for it.
1217 Make up a string to describe vaguely what it is. */
1220 if (TREE_CODE (cur_type) == POINTER_TYPE)
1223 that = "different type";
1226 /* Make the warning better in case of mismatch of int vs long. */
1227 if (TREE_CODE (cur_type) == INTEGER_TYPE
1228 && TREE_CODE (wanted_type) == INTEGER_TYPE
1229 && TYPE_PRECISION (cur_type) == TYPE_PRECISION (wanted_type)
1230 && TYPE_NAME (cur_type) != 0
1231 && TREE_CODE (TYPE_NAME (cur_type)) == TYPE_DECL)
1232 that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (cur_type)));
1234 if (strcmp (this, that) != 0)
1236 sprintf (message, "%s format, %s arg (arg %d)",
1237 this, that, arg_num);
1244 /* Print a warning if a constant expression had overflow in folding.
1245 Invoke this function on every expression that the language
1246 requires to be a constant expression.
1247 Note the ANSI C standard says it is erroneous for a
1248 constant expression to overflow. */
1251 constant_expression_warning (value)
1254 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1255 || TREE_CODE (value) == COMPLEX_CST)
1256 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
1257 pedwarn ("overflow in constant expression");
1260 /* Print a warning if an expression had overflow in folding.
1261 Invoke this function on every expression that
1262 (1) appears in the source code, and
1263 (2) might be a constant expression that overflowed, and
1264 (3) is not already checked by convert_and_check;
1265 however, do not invoke this function on operands of explicit casts. */
1268 overflow_warning (value)
1271 if ((TREE_CODE (value) == INTEGER_CST
1272 || (TREE_CODE (value) == COMPLEX_CST
1273 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
1274 && TREE_OVERFLOW (value))
1276 TREE_OVERFLOW (value) = 0;
1277 warning ("integer overflow in expression");
1279 else if ((TREE_CODE (value) == REAL_CST
1280 || (TREE_CODE (value) == COMPLEX_CST
1281 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
1282 && TREE_OVERFLOW (value))
1284 TREE_OVERFLOW (value) = 0;
1285 warning ("floating-pointer overflow in expression");
1289 /* Print a warning if a large constant is truncated to unsigned,
1290 or if -Wconversion is used and a constant < 0 is converted to unsigned.
1291 Invoke this function on every expression that might be implicitly
1292 converted to an unsigned type. */
1295 unsigned_conversion_warning (result, operand)
1296 tree result, operand;
1298 if (TREE_CODE (operand) == INTEGER_CST
1299 && TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
1300 && TREE_UNSIGNED (TREE_TYPE (result))
1301 && !int_fits_type_p (operand, TREE_TYPE (result)))
1303 if (!int_fits_type_p (operand, signed_type (TREE_TYPE (result))))
1304 /* This detects cases like converting -129 or 256 to unsigned char. */
1305 warning ("large integer implicitly truncated to unsigned type");
1306 else if (warn_conversion)
1307 warning ("negative integer implicitly converted to unsigned type");
1311 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1312 Invoke this function on every expression that is converted implicitly,
1313 i.e. because of language rules and not because of an explicit cast. */
1316 convert_and_check (type, expr)
1319 tree t = convert (type, expr);
1320 if (TREE_CODE (t) == INTEGER_CST)
1322 if (TREE_OVERFLOW (t))
1324 TREE_OVERFLOW (t) = 0;
1326 /* No warning for converting 0x80000000 to int. */
1327 if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
1328 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1329 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
1330 /* If EXPR fits in the unsigned version of TYPE,
1331 don't warn unless pedantic. */
1333 || TREE_UNSIGNED (type)
1334 || ! int_fits_type_p (expr, unsigned_type (type)))
1335 warning ("overflow in implicit constant conversion");
1338 unsigned_conversion_warning (t, expr);
1344 c_expand_expr_stmt (expr)
1347 /* Do default conversion if safe and possibly important,
1348 in case within ({...}). */
1349 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr))
1350 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
1351 expr = default_conversion (expr);
1353 if (TREE_TYPE (expr) != error_mark_node
1354 && TYPE_SIZE (TREE_TYPE (expr)) == 0
1355 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
1356 error ("expression statement has incomplete type");
1358 expand_expr_stmt (expr);
1361 /* Validate the expression after `case' and apply default promotions. */
1364 check_case_value (value)
1367 if (value == NULL_TREE)
1370 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1371 STRIP_TYPE_NOPS (value);
1373 if (TREE_CODE (value) != INTEGER_CST
1374 && value != error_mark_node)
1376 error ("case label does not reduce to an integer constant");
1377 value = error_mark_node;
1380 /* Promote char or short to int. */
1381 value = default_conversion (value);
1383 constant_expression_warning (value);
1388 /* Return an integer type with BITS bits of precision,
1389 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1392 type_for_size (bits, unsignedp)
1396 if (bits == TYPE_PRECISION (integer_type_node))
1397 return unsignedp ? unsigned_type_node : integer_type_node;
1399 if (bits == TYPE_PRECISION (signed_char_type_node))
1400 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1402 if (bits == TYPE_PRECISION (short_integer_type_node))
1403 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1405 if (bits == TYPE_PRECISION (long_integer_type_node))
1406 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1408 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1409 return (unsignedp ? long_long_unsigned_type_node
1410 : long_long_integer_type_node);
1412 if (bits <= TYPE_PRECISION (intQI_type_node))
1413 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1415 if (bits <= TYPE_PRECISION (intHI_type_node))
1416 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1418 if (bits <= TYPE_PRECISION (intSI_type_node))
1419 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1421 if (bits <= TYPE_PRECISION (intDI_type_node))
1422 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1427 /* Return a data type that has machine mode MODE.
1428 If the mode is an integer,
1429 then UNSIGNEDP selects between signed and unsigned types. */
1432 type_for_mode (mode, unsignedp)
1433 enum machine_mode mode;
1436 if (mode == TYPE_MODE (integer_type_node))
1437 return unsignedp ? unsigned_type_node : integer_type_node;
1439 if (mode == TYPE_MODE (signed_char_type_node))
1440 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1442 if (mode == TYPE_MODE (short_integer_type_node))
1443 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1445 if (mode == TYPE_MODE (long_integer_type_node))
1446 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1448 if (mode == TYPE_MODE (long_long_integer_type_node))
1449 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1451 if (mode == TYPE_MODE (intQI_type_node))
1452 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1454 if (mode == TYPE_MODE (intHI_type_node))
1455 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1457 if (mode == TYPE_MODE (intSI_type_node))
1458 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1460 if (mode == TYPE_MODE (intDI_type_node))
1461 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1463 if (mode == TYPE_MODE (float_type_node))
1464 return float_type_node;
1466 if (mode == TYPE_MODE (double_type_node))
1467 return double_type_node;
1469 if (mode == TYPE_MODE (long_double_type_node))
1470 return long_double_type_node;
1472 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1473 return build_pointer_type (char_type_node);
1475 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1476 return build_pointer_type (integer_type_node);
1481 /* Return the minimum number of bits needed to represent VALUE in a
1482 signed or unsigned type, UNSIGNEDP says which. */
1485 min_precision (value, unsignedp)
1491 /* If the value is negative, compute its negative minus 1. The latter
1492 adjustment is because the absolute value of the largest negative value
1493 is one larger than the largest positive value. This is equivalent to
1494 a bit-wise negation, so use that operation instead. */
1496 if (tree_int_cst_sgn (value) < 0)
1497 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
1499 /* Return the number of bits needed, taking into account the fact
1500 that we need one more bit for a signed than unsigned type. */
1502 if (integer_zerop (value))
1504 else if (TREE_INT_CST_HIGH (value) != 0)
1505 log = HOST_BITS_PER_WIDE_INT + floor_log2 (TREE_INT_CST_HIGH (value));
1507 log = floor_log2 (TREE_INT_CST_LOW (value));
1509 return log + 1 + ! unsignedp;
1512 /* Print an error message for invalid operands to arith operation CODE.
1513 NOP_EXPR is used as a special case (see truthvalue_conversion). */
1516 binary_op_error (code)
1517 enum tree_code code;
1519 register char *opname = "unknown";
1524 error ("invalid truth-value expression");
1528 opname = "+"; break;
1530 opname = "-"; break;
1532 opname = "*"; break;
1534 opname = "max"; break;
1536 opname = "min"; break;
1538 opname = "=="; break;
1540 opname = "!="; break;
1542 opname = "<="; break;
1544 opname = ">="; break;
1546 opname = "<"; break;
1548 opname = ">"; break;
1550 opname = "<<"; break;
1552 opname = ">>"; break;
1553 case TRUNC_MOD_EXPR:
1554 case FLOOR_MOD_EXPR:
1555 opname = "%"; break;
1556 case TRUNC_DIV_EXPR:
1557 case FLOOR_DIV_EXPR:
1558 opname = "/"; break;
1560 opname = "&"; break;
1562 opname = "|"; break;
1563 case TRUTH_ANDIF_EXPR:
1564 opname = "&&"; break;
1565 case TRUTH_ORIF_EXPR:
1566 opname = "||"; break;
1568 opname = "^"; break;
1571 opname = "rotate"; break;
1573 error ("invalid operands to binary %s", opname);
1576 /* Subroutine of build_binary_op, used for comparison operations.
1577 See if the operands have both been converted from subword integer types
1578 and, if so, perhaps change them both back to their original type.
1579 This function is also responsible for converting the two operands
1580 to the proper common type for comparison.
1582 The arguments of this function are all pointers to local variables
1583 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1584 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1586 If this function returns nonzero, it means that the comparison has
1587 a constant value. What this function returns is an expression for
1591 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
1592 tree *op0_ptr, *op1_ptr;
1594 enum tree_code *rescode_ptr;
1597 tree op0 = *op0_ptr;
1598 tree op1 = *op1_ptr;
1599 int unsignedp0, unsignedp1;
1601 tree primop0, primop1;
1602 enum tree_code code = *rescode_ptr;
1604 /* Throw away any conversions to wider types
1605 already present in the operands. */
1607 primop0 = get_narrower (op0, &unsignedp0);
1608 primop1 = get_narrower (op1, &unsignedp1);
1610 /* Handle the case that OP0 does not *contain* a conversion
1611 but it *requires* conversion to FINAL_TYPE. */
1613 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
1614 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
1615 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
1616 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
1618 /* If one of the operands must be floated, we cannot optimize. */
1619 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
1620 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
1622 /* If first arg is constant, swap the args (changing operation
1623 so value is preserved), for canonicalization. Don't do this if
1624 the second arg is 0. */
1626 if (TREE_CONSTANT (primop0)
1627 && ! integer_zerop (primop1) && ! real_zerop (primop1))
1629 register tree tem = primop0;
1630 register int temi = unsignedp0;
1638 unsignedp0 = unsignedp1;
1659 *rescode_ptr = code;
1662 /* If comparing an integer against a constant more bits wide,
1663 maybe we can deduce a value of 1 or 0 independent of the data.
1664 Or else truncate the constant now
1665 rather than extend the variable at run time.
1667 This is only interesting if the constant is the wider arg.
1668 Also, it is not safe if the constant is unsigned and the
1669 variable arg is signed, since in this case the variable
1670 would be sign-extended and then regarded as unsigned.
1671 Our technique fails in this case because the lowest/highest
1672 possible unsigned results don't follow naturally from the
1673 lowest/highest possible values of the variable operand.
1674 For just EQ_EXPR and NE_EXPR there is another technique that
1675 could be used: see if the constant can be faithfully represented
1676 in the other operand's type, by truncating it and reextending it
1677 and see if that preserves the constant's value. */
1679 if (!real1 && !real2
1680 && TREE_CODE (primop1) == INTEGER_CST
1681 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
1683 int min_gt, max_gt, min_lt, max_lt;
1684 tree maxval, minval;
1685 /* 1 if comparison is nominally unsigned. */
1686 int unsignedp = TREE_UNSIGNED (*restype_ptr);
1689 type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
1691 maxval = TYPE_MAX_VALUE (type);
1692 minval = TYPE_MIN_VALUE (type);
1694 if (unsignedp && !unsignedp0)
1695 *restype_ptr = signed_type (*restype_ptr);
1697 if (TREE_TYPE (primop1) != *restype_ptr)
1698 primop1 = convert (*restype_ptr, primop1);
1699 if (type != *restype_ptr)
1701 minval = convert (*restype_ptr, minval);
1702 maxval = convert (*restype_ptr, maxval);
1705 if (unsignedp && unsignedp0)
1707 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
1708 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
1709 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
1710 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
1714 min_gt = INT_CST_LT (primop1, minval);
1715 max_gt = INT_CST_LT (primop1, maxval);
1716 min_lt = INT_CST_LT (minval, primop1);
1717 max_lt = INT_CST_LT (maxval, primop1);
1721 /* This used to be a switch, but Genix compiler can't handle that. */
1722 if (code == NE_EXPR)
1724 if (max_lt || min_gt)
1725 val = boolean_true_node;
1727 else if (code == EQ_EXPR)
1729 if (max_lt || min_gt)
1730 val = boolean_false_node;
1732 else if (code == LT_EXPR)
1735 val = boolean_true_node;
1737 val = boolean_false_node;
1739 else if (code == GT_EXPR)
1742 val = boolean_true_node;
1744 val = boolean_false_node;
1746 else if (code == LE_EXPR)
1749 val = boolean_true_node;
1751 val = boolean_false_node;
1753 else if (code == GE_EXPR)
1756 val = boolean_true_node;
1758 val = boolean_false_node;
1761 /* If primop0 was sign-extended and unsigned comparison specd,
1762 we did a signed comparison above using the signed type bounds.
1763 But the comparison we output must be unsigned.
1765 Also, for inequalities, VAL is no good; but if the signed
1766 comparison had *any* fixed result, it follows that the
1767 unsigned comparison just tests the sign in reverse
1768 (positive values are LE, negative ones GE).
1769 So we can generate an unsigned comparison
1770 against an extreme value of the signed type. */
1772 if (unsignedp && !unsignedp0)
1779 primop1 = TYPE_MIN_VALUE (type);
1785 primop1 = TYPE_MAX_VALUE (type);
1789 type = unsigned_type (type);
1792 if (!max_gt && !unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
1794 /* This is the case of (char)x >?< 0x80, which people used to use
1795 expecting old C compilers to change the 0x80 into -0x80. */
1796 if (val == boolean_false_node)
1797 warning ("comparison is always 0 due to limited range of data type");
1798 if (val == boolean_true_node)
1799 warning ("comparison is always 1 due to limited range of data type");
1802 if (!min_lt && unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
1804 /* This is the case of (unsigned char)x >?< -1 or < 0. */
1805 if (val == boolean_false_node)
1806 warning ("comparison is always 0 due to limited range of data type");
1807 if (val == boolean_true_node)
1808 warning ("comparison is always 1 due to limited range of data type");
1813 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
1814 if (TREE_SIDE_EFFECTS (primop0))
1815 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
1819 /* Value is not predetermined, but do the comparison
1820 in the type of the operand that is not constant.
1821 TYPE is already properly set. */
1823 else if (real1 && real2
1824 && (TYPE_PRECISION (TREE_TYPE (primop0))
1825 == TYPE_PRECISION (TREE_TYPE (primop1))))
1826 type = TREE_TYPE (primop0);
1828 /* If args' natural types are both narrower than nominal type
1829 and both extend in the same manner, compare them
1830 in the type of the wider arg.
1831 Otherwise must actually extend both to the nominal
1832 common type lest different ways of extending
1834 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
1836 else if (unsignedp0 == unsignedp1 && real1 == real2
1837 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
1838 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
1840 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
1841 type = signed_or_unsigned_type (unsignedp0
1842 || TREE_UNSIGNED (*restype_ptr),
1844 /* Make sure shorter operand is extended the right way
1845 to match the longer operand. */
1846 primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
1848 primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
1853 /* Here we must do the comparison on the nominal type
1854 using the args exactly as we received them. */
1855 type = *restype_ptr;
1859 if (!real1 && !real2 && integer_zerop (primop1)
1860 && TREE_UNSIGNED (*restype_ptr))
1866 /* All unsigned values are >= 0, so we warn if extra warnings
1867 are requested. However, if OP0 is a constant that is
1868 >= 0, the signedness of the comparison isn't an issue,
1869 so suppress the warning. */
1871 && ! (TREE_CODE (primop0) == INTEGER_CST
1872 && ! TREE_OVERFLOW (convert (signed_type (type),
1874 warning ("unsigned value >= 0 is always 1");
1875 value = boolean_true_node;
1880 && ! (TREE_CODE (primop0) == INTEGER_CST
1881 && ! TREE_OVERFLOW (convert (signed_type (type),
1883 warning ("unsigned value < 0 is always 0");
1884 value = boolean_false_node;
1889 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
1890 if (TREE_SIDE_EFFECTS (primop0))
1891 return build (COMPOUND_EXPR, TREE_TYPE (value),
1898 *op0_ptr = convert (type, primop0);
1899 *op1_ptr = convert (type, primop1);
1901 *restype_ptr = boolean_type_node;
1906 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
1907 or validate its data type for an `if' or `while' statement or ?..: exp.
1909 This preparation consists of taking the ordinary
1910 representation of an expression expr and producing a valid tree
1911 boolean expression describing whether expr is nonzero. We could
1912 simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1),
1913 but we optimize comparisons, &&, ||, and !.
1915 The resulting type should always be `boolean_type_node'. */
1918 truthvalue_conversion (expr)
1921 if (TREE_CODE (expr) == ERROR_MARK)
1924 #if 0 /* This appears to be wrong for C++. */
1925 /* These really should return error_mark_node after 2.4 is stable.
1926 But not all callers handle ERROR_MARK properly. */
1927 switch (TREE_CODE (TREE_TYPE (expr)))
1930 error ("struct type value used where scalar is required");
1931 return boolean_false_node;
1934 error ("union type value used where scalar is required");
1935 return boolean_false_node;
1938 error ("array type value used where scalar is required");
1939 return boolean_false_node;
1946 switch (TREE_CODE (expr))
1948 /* It is simpler and generates better code to have only TRUTH_*_EXPR
1949 or comparison expressions as truth values at this level. */
1952 /* A one-bit unsigned bit-field is already acceptable. */
1953 if (1 == TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (expr, 1)))
1954 && TREE_UNSIGNED (TREE_OPERAND (expr, 1)))
1960 /* It is simpler and generates better code to have only TRUTH_*_EXPR
1961 or comparison expressions as truth values at this level. */
1963 if (integer_zerop (TREE_OPERAND (expr, 1)))
1964 return build_unary_op (TRUTH_NOT_EXPR, TREE_OPERAND (expr, 0), 0);
1966 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
1967 case TRUTH_ANDIF_EXPR:
1968 case TRUTH_ORIF_EXPR:
1969 case TRUTH_AND_EXPR:
1971 case TRUTH_XOR_EXPR:
1972 TREE_TYPE (expr) = boolean_type_node;
1979 return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
1982 return real_zerop (expr) ? boolean_false_node : boolean_true_node;
1985 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
1986 return build (COMPOUND_EXPR, boolean_type_node,
1987 TREE_OPERAND (expr, 0), boolean_true_node);
1989 return boolean_true_node;
1992 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
1993 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
1994 truthvalue_conversion (TREE_OPERAND (expr, 0)),
1995 truthvalue_conversion (TREE_OPERAND (expr, 1)),
2002 /* These don't change whether an object is non-zero or zero. */
2003 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2007 /* These don't change whether an object is zero or non-zero, but
2008 we can't ignore them if their second arg has side-effects. */
2009 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2010 return build (COMPOUND_EXPR, boolean_type_node, TREE_OPERAND (expr, 1),
2011 truthvalue_conversion (TREE_OPERAND (expr, 0)));
2013 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2016 /* Distribute the conversion into the arms of a COND_EXPR. */
2017 return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
2018 truthvalue_conversion (TREE_OPERAND (expr, 1)),
2019 truthvalue_conversion (TREE_OPERAND (expr, 2))));
2022 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2023 since that affects how `default_conversion' will behave. */
2024 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2025 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2027 /* fall through... */
2029 /* If this is widening the argument, we can ignore it. */
2030 if (TYPE_PRECISION (TREE_TYPE (expr))
2031 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2032 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2036 /* With IEEE arithmetic, x - x may not equal 0, so we can't optimize
2038 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
2039 && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE)
2041 /* fall through... */
2043 /* This and MINUS_EXPR can be changed into a comparison of the
2045 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2046 == TREE_TYPE (TREE_OPERAND (expr, 1)))
2047 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2048 TREE_OPERAND (expr, 1), 1);
2049 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2050 fold (build1 (NOP_EXPR,
2051 TREE_TYPE (TREE_OPERAND (expr, 0)),
2052 TREE_OPERAND (expr, 1))), 1);
2055 if (integer_onep (TREE_OPERAND (expr, 1)))
2059 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
2060 warning ("suggest parentheses around assignment used as truth value");
2064 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2065 return (build_binary_op
2066 ((TREE_SIDE_EFFECTS (expr)
2067 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2068 truthvalue_conversion (build_unary_op (REALPART_EXPR, expr, 0)),
2069 truthvalue_conversion (build_unary_op (IMAGPART_EXPR, expr, 0)),
2072 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2075 /* Read the rest of a #-directive from input stream FINPUT.
2076 In normal use, the directive name and the white space after it
2077 have already been read, so they won't be included in the result.
2078 We allow for the fact that the directive line may contain
2079 a newline embedded within a character or string literal which forms
2080 a part of the directive.
2082 The value is a string in a reusable buffer. It remains valid
2083 only until the next time this function is called. */
2086 get_directive_line (finput)
2087 register FILE *finput;
2089 static char *directive_buffer = NULL;
2090 static unsigned buffer_length = 0;
2092 register char *buffer_limit;
2093 register int looking_for = 0;
2094 register int char_escaped = 0;
2096 if (buffer_length == 0)
2098 directive_buffer = (char *)xmalloc (128);
2099 buffer_length = 128;
2102 buffer_limit = &directive_buffer[buffer_length];
2104 for (p = directive_buffer; ; )
2108 /* Make buffer bigger if it is full. */
2109 if (p >= buffer_limit)
2111 register unsigned bytes_used = (p - directive_buffer);
2115 = (char *)xrealloc (directive_buffer, buffer_length);
2116 p = &directive_buffer[bytes_used];
2117 buffer_limit = &directive_buffer[buffer_length];
2122 /* Discard initial whitespace. */
2123 if ((c == ' ' || c == '\t') && p == directive_buffer)
2126 /* Detect the end of the directive. */
2127 if (c == '\n' && looking_for == 0)
2136 return directive_buffer;
2138 /* Handle string and character constant syntax. */
2141 if (looking_for == c && !char_escaped)
2142 looking_for = 0; /* Found terminator... stop looking. */
2145 if (c == '\'' || c == '"')
2146 looking_for = c; /* Don't stop buffering until we see another
2147 another one of these (or an EOF). */
2149 /* Handle backslash. */
2150 char_escaped = (c == '\\' && ! char_escaped);
2154 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2155 down to the element type of an array. */
2158 c_build_type_variant (type, constp, volatilep)
2160 int constp, volatilep;
2162 if (TREE_CODE (type) == ARRAY_TYPE)
2164 tree real_main_variant = TYPE_MAIN_VARIANT (type);
2166 push_obstacks (TYPE_OBSTACK (real_main_variant),
2167 TYPE_OBSTACK (real_main_variant));
2168 type = build_array_type (c_build_type_variant (TREE_TYPE (type),
2170 TYPE_DOMAIN (type));
2172 /* TYPE must be on same obstack as REAL_MAIN_VARIANT. If not,
2173 make a copy. (TYPE might have come from the hash table and
2174 REAL_MAIN_VARIANT might be in some function's obstack.) */
2176 if (TYPE_OBSTACK (type) != TYPE_OBSTACK (real_main_variant))
2178 type = copy_node (type);
2179 TYPE_POINTER_TO (type) = TYPE_REFERENCE_TO (type) = 0;
2182 TYPE_MAIN_VARIANT (type) = real_main_variant;
2185 return build_type_variant (type, constp, volatilep);