diff options
Diffstat (limited to 'lang/gcc46/files/patch-fa')
-rw-r--r-- | lang/gcc46/files/patch-fa | 262 |
1 files changed, 0 insertions, 262 deletions
diff --git a/lang/gcc46/files/patch-fa b/lang/gcc46/files/patch-fa deleted file mode 100644 index 55221295f0b7..000000000000 --- a/lang/gcc46/files/patch-fa +++ /dev/null @@ -1,262 +0,0 @@ ---- gcc/c-common.c.orig Fri Aug 25 08:27:55 2000 -+++ gcc/c-common.c Fri Sep 15 11:30:42 2000 -@@ -157,7 +157,7 @@ - int, int, int)); - static void init_attributes PARAMS ((void)); - static void record_function_format PARAMS ((tree, tree, enum format_type, -- int, int)); -+ int, int, int)); - static void record_international_format PARAMS ((tree, tree, int)); - static int default_valid_lang_attribute PARAMS ((tree, tree, tree, tree)); - -@@ -827,6 +827,7 @@ - enum format_type format_type; - tree argument; - unsigned int arg_num; -+ int null_format_ok; - - if (TREE_CODE (decl) != FUNCTION_DECL) - { -@@ -837,7 +838,7 @@ - - if (TREE_CODE (format_type_id) != IDENTIFIER_NODE) - { -- error ("unrecognized format specifier"); -+ error_with_decl (decl, "unrecognized format specifier"); - continue; - } - else -@@ -845,12 +846,26 @@ - const char *p = IDENTIFIER_POINTER (format_type_id); - - if (!strcmp (p, "printf") || !strcmp (p, "__printf__")) -+ { -+ format_type = printf_format_type; -+ null_format_ok = 0; -+ } -+ else if (!strcmp (p, "printf0") || !strcmp (p, "__printf0__")) -+ { - format_type = printf_format_type; -+ null_format_ok = 1; -+ } - else if (!strcmp (p, "scanf") || !strcmp (p, "__scanf__")) -+ { - format_type = scanf_format_type; -+ null_format_ok = 0; -+ } - else if (!strcmp (p, "strftime") - || !strcmp (p, "__strftime__")) -+ { - format_type = strftime_format_type; -+ null_format_ok = 0; -+ } - else - { - warning ("`%s' is an unrecognized format function type", p); -@@ -923,7 +938,8 @@ - - record_function_format (DECL_NAME (decl), - DECL_ASSEMBLER_NAME (decl), -- format_type, format_num, first_arg_num); -+ format_type, format_num, first_arg_num, -+ null_format_ok); - break; - } - -@@ -1242,6 +1258,11 @@ - } format_char_info; - - static format_char_info print_char_table[] = { -+/* FreeBSD kernel extensions. */ -+ { "D", 1, T_C, T_C, NULL, NULL, NULL, NULL, NULL, "-wp" }, -+ { "b", 1, T_C, T_C, NULL, NULL, NULL, NULL, NULL, "-wp" }, -+ { "rz", 0, NULL, T_I, T_I, T_L, NULL, NULL, NULL, "-wp0 +#" }, -+#define unextended_print_char_table (print_char_table + 3) - { "di", 0, T_I, T_I, T_I, T_L, T_LL, T_LL, T_SST, T_PD, T_IM, "-wp0 +'I" }, - { "oxX", 0, T_UI, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, T_UPD, T_UIM, "-wp0#" }, - { "u", 0, T_UI, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, T_UPD, T_UIM, "-wp0'I" }, -@@ -1314,6 +1335,7 @@ - enum format_type format_type; /* type of format (printf, scanf, etc.) */ - int format_num; /* number of format argument */ - int first_arg_num; /* number of first arg (zero for varargs) */ -+ int null_format_ok; /* TRUE if the format string may be NULL */ - } function_format_info; - - static function_format_info *function_format_list = NULL; -@@ -1354,40 +1376,40 @@ - { - /* Functions from ISO/IEC 9899:1990. */ - record_function_format (get_identifier ("printf"), NULL_TREE, -- printf_format_type, 1, 2); -+ printf_format_type, 1, 2, 0); - record_function_format (get_identifier ("fprintf"), NULL_TREE, -- printf_format_type, 2, 3); -+ printf_format_type, 2, 3, 0); - record_function_format (get_identifier ("sprintf"), NULL_TREE, -- printf_format_type, 2, 3); -+ printf_format_type, 2, 3, 0); - record_function_format (get_identifier ("scanf"), NULL_TREE, -- scanf_format_type, 1, 2); -+ scanf_format_type, 1, 2, 0); - record_function_format (get_identifier ("fscanf"), NULL_TREE, -- scanf_format_type, 2, 3); -+ scanf_format_type, 2, 3, 0); - record_function_format (get_identifier ("sscanf"), NULL_TREE, -- scanf_format_type, 2, 3); -+ scanf_format_type, 2, 3, 0); - record_function_format (get_identifier ("vprintf"), NULL_TREE, -- printf_format_type, 1, 0); -+ printf_format_type, 1, 0, 0); - record_function_format (get_identifier ("vfprintf"), NULL_TREE, -- printf_format_type, 2, 0); -+ printf_format_type, 2, 0, 0); - record_function_format (get_identifier ("vsprintf"), NULL_TREE, -- printf_format_type, 2, 0); -+ printf_format_type, 2, 0, 0); - record_function_format (get_identifier ("strftime"), NULL_TREE, -- strftime_format_type, 3, 0); -+ strftime_format_type, 3, 0, 0); - } - - if (flag_hosted && flag_isoc99) - { - /* ISO C99 adds the snprintf and vscanf family functions. */ - record_function_format (get_identifier ("snprintf"), NULL_TREE, -- printf_format_type, 3, 4); -+ printf_format_type, 3, 4, 0); - record_function_format (get_identifier ("vsnprintf"), NULL_TREE, -- printf_format_type, 3, 0); -+ printf_format_type, 3, 0, 0); - record_function_format (get_identifier ("vscanf"), NULL_TREE, -- scanf_format_type, 1, 0); -+ scanf_format_type, 1, 0, 0); - record_function_format (get_identifier ("vfscanf"), NULL_TREE, -- scanf_format_type, 2, 0); -+ scanf_format_type, 2, 0, 0); - record_function_format (get_identifier ("vsscanf"), NULL_TREE, -- scanf_format_type, 2, 0); -+ scanf_format_type, 2, 0, 0); - } - - if (flag_hosted && flag_noniso_default_format_attributes) -@@ -1410,12 +1432,13 @@ - - static void - record_function_format (name, assembler_name, format_type, -- format_num, first_arg_num) -+ format_num, first_arg_num, null_format_ok) - tree name; - tree assembler_name; - enum format_type format_type; - int format_num; - int first_arg_num; -+ int null_format_ok; - { - function_format_info *info; - -@@ -1439,6 +1462,7 @@ - info->format_type = format_type; - info->format_num = format_num; - info->first_arg_num = first_arg_num; -+ info->null_format_ok = null_format_ok; - } - - /* Record information for the names of function that modify the format -@@ -1755,7 +1779,8 @@ - - if (integer_zerop (format_tree)) - { -- warning ("null format string"); -+ if (!info->null_format_ok) -+ warning ("null format string"); - return; - } - if (TREE_CODE (format_tree) != ADDR_EXPR) -@@ -1981,12 +2006,13 @@ - It will work on most machines, because size_t and int - have the same mode. But might as well warn anyway, - since it will fail on other machines. */ -+ /* XXX should we allow unsigned ints here? */ - if ((TYPE_MAIN_VARIANT (TREE_TYPE (cur_param)) - != integer_type_node) - && - (TYPE_MAIN_VARIANT (TREE_TYPE (cur_param)) - != unsigned_type_node)) -- warning ("field width is not type int (arg %d)", arg_num); -+ warning ("precision is not type int (arg %d)", arg_num); - } - } - else -@@ -2046,6 +2072,53 @@ - } - } - } -+ if (*format_chars == 'b') -+ { -+ /* There should be an int arg to control the string arg. */ -+ if (params == 0) -+ { -+ tfaff (); -+ return; -+ } -+ if (info->first_arg_num != 0) -+ { -+ cur_param = TREE_VALUE (params); -+ params = TREE_CHAIN (params); -+ ++arg_num; -+ if ((TYPE_MAIN_VARIANT (TREE_TYPE (cur_param)) -+ != integer_type_node) -+ && -+ (TYPE_MAIN_VARIANT (TREE_TYPE (cur_param)) -+ != unsigned_type_node)) -+ { -+ warning ("bitmap is not type int (arg %d)", arg_num); -+ } -+ } -+ } -+ if (*format_chars == 'D') -+ { -+ /* There should be an unsigned char * arg before the string arg. */ -+ if (params == 0) -+ { -+ tfaff (); -+ return; -+ } -+ if (info->first_arg_num != 0) -+ { -+ cur_param = TREE_VALUE (params); -+ params = TREE_CHAIN (params); -+ ++arg_num; -+ cur_type = TREE_TYPE (cur_param); -+ if (TREE_CODE (cur_type) != POINTER_TYPE -+ || TYPE_MAIN_VARIANT (TREE_TYPE (cur_type)) -+ != unsigned_char_type_node) -+ { -+ warning ("ethernet address is not type unsigned char *" -+ " (arg %d)", -+ arg_num); -+ } -+ } -+ } - - aflag = 0; - -@@ -2130,7 +2203,8 @@ - switch (info->format_type) - { - case printf_format_type: -- fci = print_char_table; -+ fci = flag_format_extensions ? print_char_table -+ : unextended_print_char_table; - break; - case scanf_format_type: - fci = scan_char_table; -@@ -2174,7 +2248,7 @@ - warning ("width used with `%c' format", format_char); - if (index (fci->flag_chars, '3') != 0 - || (format_char == 'y' && index (flag_chars, 'E'))) -- warning ("`%%%c' yields only last 2 digits of year in some locales", -+ warning ("`%%%c' yields only last 2 digits of year in some locales on non-BSD systems", - format_char); - else if (index (fci->flag_chars, '2') != 0) - warning ("`%%%c' yields only last 2 digits of year", format_char); |