gcc44: add local changes
authorSimon Schubert <corecode@dragonflybsd.org>
Sun, 2 Aug 2009 23:35:32 +0000 (01:35 +0200)
committerSimon Schubert <corecode@dragonflybsd.org>
Sun, 2 Aug 2009 23:39:21 +0000 (01:39 +0200)
Changes ported from gcc-4.1.

contrib/gcc-4.4/gcc/c-format.c
contrib/gcc-4.4/gcc/c-opts.c
contrib/gcc-4.4/gcc/config/i386/i386.c

index 24a292f..54c8cd0 100644 (file)
@@ -526,6 +526,19 @@ static const format_char_info print_char_table[] =
   { "S",   1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp",       "R",  NULL },
   /* GNU conversion specifiers.  */
   { "m",   0, STD_EXT, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp",       "",   NULL },
+  /* BSD conversion specifiers.  */
+  /* DragonFly 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,  BADLEN,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp",       "cR", NULL },
+  { "b",   1, STD_EXT, { T89_C,  BADLEN,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp",       "",   NULL },
+  { "ry",  0, STD_EXT, { T89_I,  BADLEN,   BADLEN,   T89_L,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp0 +#",   "i",  NULL },
+  { "z",   0, STD_EXT, { T89_UI, T99_UC,   T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM, BADLEN,  BADLEN,  BADLEN }, "-wp0#",     "i",  NULL },
   { NULL,  0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
 };
 
@@ -1837,6 +1850,56 @@ check_format_info_main (format_check_results *res,
            }
        }
 
+      if (*format_chars == 'b')
+       {
+         /* There should be an int arg to control the string arg.  */
+         if (params == 0)
+           {
+             warning (OPT_Wformat, "too few arguments for format");
+             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 (OPT_Wformat, "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)
+           {
+             warning (OPT_Wformat, "too few arguments for format");
+             return;
+           }
+           if (info->first_arg_num != 0)
+           {
+             tree cur_type;
+
+             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 (OPT_Wformat, "ethernet address is not type unsigned char * (arg %d)",
+                                 arg_num);
+               }
+           }
+        }
+
       format_char = *format_chars;
       if (format_char == 0
          || (!(fki->flags & (int) FMT_FLAG_FANCY_PERCENT_OK)
@@ -1969,7 +2032,7 @@ check_format_info_main (format_check_results *res,
            y2k_level = 2;
          if (y2k_level == 3)
            warning (OPT_Wformat_y2k, "%<%%%c%> yields only last 2 digits of "
-                    "year in some locales", format_char);
+                    "year in some locales on non-BSD systems", format_char);
          else if (y2k_level == 2)
            warning (OPT_Wformat_y2k, "%<%%%c%> yields only last 2 digits of "
                     "year", format_char);
index 28bdc31..8af6486 100644 (file)
@@ -422,8 +422,11 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       cpp_opts->warn_comments = value;
       cpp_opts->warn_num_sign_change = value;
 
+#if 0
+      /* DragonFly: disabled in -Wall */
       if (warn_pointer_sign == -1)
        warn_pointer_sign = value;
+#endif
       break;
 
     case OPT_Wbuiltin_macro_redefined:
index 8435061..4f5cd09 100644 (file)
@@ -2705,7 +2705,7 @@ override_options (bool main_args_p)
             prefix, suffix, prefix, suffix, prefix, suffix);
 
   if (!ix86_arch_string)
-    ix86_arch_string = TARGET_64BIT ? "x86-64" : "i386";
+    ix86_arch_string = TARGET_64BIT ? "x86-64" : "i686";
   else
     ix86_arch_specified = 1;