diff options
| author | David E. O'Brien <obrien@FreeBSD.org> | 2001-02-14 20:52:39 +0000 | 
|---|---|---|
| committer | David E. O'Brien <obrien@FreeBSD.org> | 2001-02-14 20:52:39 +0000 | 
| commit | aa33b0f3373339b8101fcf47b62073cc21b14b9f (patch) | |
| tree | faa790bacfa96d7f9db8a6e61b96cbc1085a32f9 /lang/gcc45/files/patch-fa | |
| parent | Fix a pathname typo in RUN_DEPENDS. (diff) | |
Upgrade to the 5-Feb-2001 edition GCC 2.97 development snapshot.
Notes
Notes:
    svn path=/head/; revision=38345
Diffstat (limited to 'lang/gcc45/files/patch-fa')
| -rw-r--r-- | lang/gcc45/files/patch-fa | 236 | 
1 files changed, 148 insertions, 88 deletions
| diff --git a/lang/gcc45/files/patch-fa b/lang/gcc45/files/patch-fa index d671513e47bd..350959df8e89 100644 --- a/lang/gcc45/files/patch-fa +++ b/lang/gcc45/files/patch-fa @@ -1,90 +1,59 @@ ---- gcc/c-common.c.orig	Sat Dec  2 19:46:03 2000 -+++ gcc/c-common.c	Mon Dec 11 12:11:16 2000 -@@ -232,7 +232,7 @@ - 						 int, int, int)); - static void init_attributes		PARAMS ((void)); +--- gcc/c-format.c.orig	Sat Jan 13 15:29:57 2001 ++++ gcc/c-format.c	Wed Feb 14 03:47:34 2001 +@@ -75,13 +75,16 @@ +    last.  */ + enum format_type { printf_format_type, scanf_format_type, + 		   strftime_format_type, strfmon_format_type, ++		   printf0_format_type, + 		   format_type_error }; +  + static enum format_type decode_format_type	PARAMS ((const char *));   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)); -  -@@ -927,6 +927,7 @@ - 	    enum format_type format_type; - 	    tree argument; - 	    unsigned int arg_num; -+	    int null_format_ok; -  - 	    if (TREE_CODE (decl) != FUNCTION_DECL) - 	      { -@@ -937,7 +938,7 @@ -  - 	    if (TREE_CODE (format_type_id) != IDENTIFIER_NODE) - 	      { --		error ("unrecognized format specifier"); -+		error_with_decl (decl, "unrecognized format specifier"); - 		continue; - 	      } - 	    else -@@ -945,12 +946,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); -@@ -1029,7 +1044,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; - 	  } -  -@@ -1693,6 +1709,20 @@ - static const format_char_info print_char_table[] = - { -+#warning The FreeBSD kernel extensions in print_char_table might not be done correctly. -+/* FreeBSD kernel extensions (src/sys/kern/subr_prf.c).  */ -+/* The format %b is supported to decode error registers. -+   Its usage is:	printf("reg=%b\n", regval, "<base><arg>*"); -+   which produces:	reg=3<BITTWO,BITONE> -+   The format %D provides a hexdump given a pointer and separator string: -+   ("%6D", ptr, ":")		-> XX:XX:XX:XX:XX:XX -+   ("%*D", len, ptr, " ")	-> XX XX XX XX ... -+   */ -+  { "D",   1, STD_EXT, { T89_C,   T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp"       "c" }, -+  { "b",   1, STD_EXT, { T89_C,   T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp"       "" }, -+  { "rz",  0, STD_EXT, { BADLEN,  T89_I,   T89_I,   T89_L,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#"   "i" }, -+#define unextended_print_char_table	(print_char_table + 3) -+#warning The FreeBSD kernel extensions in print_char_table might not be done correctly. -   /* C89 conversion specifiers.  */ -   { "di",  0, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T99_LL,  TEX_LL,  T99_SST, T99_PD,  T99_IM  }, "-wp0 +'I", "i" }, -   { "oxX", 0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T99_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0#",    "i" }, -@@ -1791,6 +1821,7 @@ ++inline static int get_null_fmt_ok	PARAMS ((enum format_type)); ++ + /* Handle the format attribute (with arguments ARGS) attached to the decl +    DECL.  It is already verified that DECL is a decl and ARGS contains +    exactly three arguments.  */ +@@ -99,6 +102,7 @@ +   enum format_type format_type; +   tree argument; +   unsigned int arg_num; ++  int null_format_ok; +  +   if (TREE_CODE (decl) != FUNCTION_DECL) +     { +@@ -109,7 +113,7 @@ +  +   if (TREE_CODE (format_type_id) != IDENTIFIER_NODE) +     { +-      error ("unrecognized format specifier"); ++      error_with_decl (decl, "unrecognized format specifier"); +       return; +     } +   else +@@ -117,6 +121,7 @@ +       const char *p = IDENTIFIER_POINTER (format_type_id); +  +       format_type = decode_format_type (p); ++      null_format_ok = get_null_fmt_ok (format_type); +  +       if (format_type == format_type_error) + 	{ +@@ -195,7 +200,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); + } +  +  +@@ -276,6 +282,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) */ @@ -92,7 +61,7 @@   } function_format_info;   static function_format_info *function_format_list = NULL; -@@ -1876,42 +1907,42 @@ +@@ -309,44 +316,44 @@       {         /* Functions from ISO/IEC 9899:1990.  */         record_function_format (get_identifier ("printf"), NULL_TREE, @@ -104,6 +73,9 @@         record_function_format (get_identifier ("fprintf"), NULL_TREE,  -			      printf_format_type, 2, 3);  +			      printf_format_type, 2, 3, 0); +       record_function_format (get_identifier ("__builtin_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); @@ -151,7 +123,16 @@       }     if (flag_hosted && flag_noniso_default_format_attributes) -@@ -1934,12 +1965,13 @@ +@@ -357,7 +364,7 @@ +       record_international_format (get_identifier ("dcgettext"), NULL_TREE, 2); +       /* X/Open strfmon function.  */ +       record_function_format (get_identifier ("strfmon"), NULL_TREE, +-			      strfmon_format_type, 3, 4); ++			      strfmon_format_type, 3, 4, 0); +     } + } +  +@@ -372,12 +379,13 @@   static void   record_function_format (name, assembler_name, format_type, @@ -166,7 +147,7 @@   {     function_format_info *info; -@@ -1963,6 +1995,7 @@ +@@ -401,6 +409,7 @@     info->format_type = format_type;     info->format_num = format_num;     info->first_arg_num = first_arg_num; @@ -174,7 +155,86 @@   }   /* Record information for the names of function that modify the format -@@ -2454,7 +2487,7 @@ +@@ -677,6 +686,8 @@ +   /* Pointer to type of argument expected if '*' is used for a precision, +      or NULL if '*' not used for precisions.  */ +   tree *precision_type; ++  /* Needed for FreeBSD kernel and the printf0() printf-like function.  */ ++  int null_format_ok; + } format_kind_info; +  +  +@@ -902,6 +913,20 @@ +  + static const format_char_info print_char_table[] = + { ++#warning The FreeBSD kernel extensions in print_char_table might not be done correctly. ++/* FreeBSD kernel extensions (src/sys/kern/subr_prf.c).  */ ++/* The format %b is supported to decode error registers. ++   Its usage is:	printf("reg=%b\n", regval, "<base><arg>*"); ++   which produces:	reg=3<BITTWO,BITONE> ++   The format %D provides a hexdump given a pointer and separator string: ++   ("%6D", ptr, ":")		-> XX:XX:XX:XX:XX:XX ++   ("%*D", len, ptr, " ")	-> XX XX XX XX ... ++   */ ++  { "D",   1, STD_EXT, { T89_C,   T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      "c" }, ++  { "b",   1, STD_EXT, { T89_C,   T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      "" }, ++  { "rz",  0, STD_EXT, { BADLEN,  T89_I,   T89_I,   T89_L,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#",  "i" }, ++#define unextended_print_char_table	(print_char_table + 3) ++#warning The FreeBSD kernel extensions in print_char_table might not be done correctly. +   /* C89 conversion specifiers.  */ +   { "di",  0, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  TEX_LL,  T99_SST, T99_PD,  T99_IM  }, "-wp0 +'I", "i"  }, +   { "oxX", 0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0#",    "i"  }, +@@ -985,22 +1010,33 @@ +     FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK, +     'w', 0, 'p', 0, 'L', +     &integer_type_node, &integer_type_node ++    ,0 +   }, +   { "scanf",    scanf_length_specs,   scan_char_table,  "*'I", NULL,  +     scanf_flag_specs, scanf_flag_pairs, +     FMT_FLAG_ARG_CONVERT|FMT_FLAG_SCANF_A_KLUDGE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_ZERO_WIDTH_BAD, +     'w', 0, 0, '*', 'L', +     NULL, NULL ++    ,0 +   }, +   { "strftime", NULL,                 time_char_table,  "_-0^#", "EO", +     strftime_flag_specs, strftime_flag_pairs, +     FMT_FLAG_FANCY_PERCENT_OK, 'w', 0, 0, 0, 0, +     NULL, NULL ++    ,0 +   }, +   { "strfmon",  strfmon_length_specs, monetary_char_table, "=^+(!-", NULL,  +     strfmon_flag_specs, strfmon_flag_pairs, +     FMT_FLAG_ARG_CONVERT, 'w', '#', 'p', 0, 'L', +     NULL, NULL ++    ,0 ++  }, ++  { "printf0",   printf_length_specs,  print_char_table, " +#0-'I", NULL,  ++    printf_flag_specs, printf_flag_pairs, ++    FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK, ++    'w', 0, 'p', 0, 'L', ++    &integer_type_node, &integer_type_node ++    ,1 +   } + }; +  +@@ -1053,6 +1089,14 @@ +  + static void check_format_types	PARAMS ((int *, format_wanted_type *)); +  ++ ++inline static int get_null_fmt_ok (fmttype) ++	enum format_type fmttype; ++{ ++  return format_types[(int)fmttype].null_format_ok; ++} ++ ++ + /* Decode a format type from a string, returning the type, or +    format_type_error if not valid, in which case the caller should print an +    error message.  */ +@@ -1568,7 +1612,7 @@   	 specially if info == NULL and add a res->number_null entry for   	 that case, or maybe add a function pointer to be called at   	 the end instead of hardcoding check_format_info_main.  */ @@ -183,7 +243,7 @@         /* Skip to first argument to check, so we can see if this format   	 has any arguments (it shouldn't).  */ -@@ -2650,6 +2683,54 @@ +@@ -1764,6 +1808,54 @@   	      main_arg_num = opnum + info->first_arg_num - 1;   	    }   	} @@ -238,7 +298,7 @@         /* Read any format flags, but do not yet validate them beyond removing   	 duplicates, since in general validation depends on the rest of -@@ -3024,7 +3105,7 @@ +@@ -2166,7 +2258,7 @@   	  else if (strchr (fci->flags2, '2') != 0)   	    y2k_level = 2;   	  if (y2k_level == 3) | 
