Add gcc40 infrastructure, but don't tie it to the build yet.
[dragonfly.git] / gnu / usr.bin / cc40 / cc_prep / patches / c-format.c.patch
1 $DragonFly: src/gnu/usr.bin/cc40/cc_prep/patches/Attic/c-format.c.patch,v 1.1 2005/06/05 22:43:20 corecode Exp $
2
3 --- c-format.c.orig     2004-11-09 11:20:09.000000000 +0100
4 +++ c-format.c  2005-05-04 15:21:33.000000000 +0200
5 @@ -500,6 +500,19 @@
6    { "S",   1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       "R",  NULL },
7    /* GNU conversion specifiers.  */
8    { "m",   0, STD_EXT, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       "",   NULL },
9 +  /* BSD conversion specifiers.  */
10 +  /* DragonFly kernel extensions (src/sys/kern/subr_prf.c).
11 +     The format %b is supported to decode error registers.
12 +     Its usage is:     printf("reg=%b\n", regval, "<base><arg>*");
13 +     which produces:   reg=3<BITTWO,BITONE>
14 +     The format %D provides a hexdump given a pointer and separator string:
15 +     ("%6D", ptr, ":")         -> XX:XX:XX:XX:XX:XX
16 +     ("%*D", len, ptr, " ")    -> XX XX XX XX ...
17 +   */
18 +  { "D",   1, STD_EXT, { T89_C,  BADLEN,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      "cR",  NULL },
19 +  { "b",   1, STD_EXT, { T89_C,  BADLEN,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      "",    NULL   },
20 +  { "ry",  0, STD_EXT, { T89_I,  BADLEN,   BADLEN,   T89_L,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#",  "i",   NULL  },
21 +  { "z",   0, STD_EXT, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0#",     "i",  NULL },
22    { NULL,  0, 0, NOLENGTHS, NULL, NULL, NULL }
23  };
24  
25 @@ -1729,6 +1742,56 @@
26             }
27         }
28  
29 +      if (*format_chars == 'b')
30 +       {
31 +         /* There should be an int arg to control the string arg.  */
32 +         if (params == 0)
33 +           {
34 +             warning ("too few arguments for format");
35 +             return;
36 +           }
37 +           if (info->first_arg_num != 0)
38 +           {
39 +             cur_param = TREE_VALUE (params);
40 +             params = TREE_CHAIN (params);
41 +             ++arg_num;
42 +             if ((TYPE_MAIN_VARIANT (TREE_TYPE (cur_param))
43 +                  != integer_type_node)
44 +                 &&
45 +                 (TYPE_MAIN_VARIANT (TREE_TYPE (cur_param))
46 +                  != unsigned_type_node))
47 +               {
48 +                 warning ("bitmap is not type int (arg %d)",
49 +                                 arg_num);
50 +               }
51 +           }
52 +       }
53 +      if (*format_chars == 'D')
54 +       {
55 +         /* There should be an unsigned char * arg before the string arg.  */
56 +         if (params == 0)
57 +           {
58 +             warning ("too few arguments for format");
59 +             return;
60 +           }
61 +           if (info->first_arg_num != 0)
62 +           {
63 +             tree cur_type;
64 +
65 +             cur_param = TREE_VALUE (params);
66 +             params = TREE_CHAIN (params);
67 +             ++arg_num;
68 +             cur_type = TREE_TYPE (cur_param);
69 +             if (TREE_CODE (cur_type) != POINTER_TYPE
70 +                 || TYPE_MAIN_VARIANT (TREE_TYPE (cur_type))
71 +                    != unsigned_char_type_node)
72 +               {
73 +                 warning ("ethernet address is not type unsigned char * (arg %d)",
74 +                                 arg_num);
75 +               }
76 +           }
77 +        }
78 +
79        format_char = *format_chars;
80        if (format_char == 0
81           || (!(fki->flags & (int) FMT_FLAG_FANCY_PERCENT_OK)
82 @@ -1855,8 +1918,8 @@
83           else if (strchr (fci->flags2, '2') != 0)
84             y2k_level = 2;
85           if (y2k_level == 3)
86 -           warning ("%<%%%c%> yields only last 2 digits of year in some locales",
87 -                    format_char);
88 +           warning ("%<%%%c%> yields only last 2 digits of year in some locals on non-BSD systems",
89 +                    format_char);
90           else if (y2k_level == 2)
91             warning ("%<%%%c%> yields only last 2 digits of year", format_char);
92         }