Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 May 2002 20:02:04 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Peter Wemm <peter@wemm.org>
Cc:        "David E. O'Brien" <obrien@FreeBSD.org>, <cvs-committers@FreeBSD.org>, <cvs-all@FreeBSD.org>
Subject:   Re: cvs commit: src/contrib/gcc c-format.c 
Message-ID:  <20020525195005.I6995-100000@gamplex.bde.org>
In-Reply-To: <20020524192714.DC2033807@overcee.wemm.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 24 May 2002, Peter Wemm wrote:

> "David E. O'Brien" wrote:
> > obrien      2002/05/22 09:37:09 PDT
> >
> >   Modified files:
> >     contrib/gcc          c-format.c
> >   Log:
> >   1/2assed reimplementation of c-common.c revs 1.2 (-fformat-extensions)
> >   and 1.3 (printf0) for GCC 3.1.
>
> This is not quite right:
> ...
> ie: it doesn't seem to like the size argument, which is clearly documented
> in the comments and well used in the kernel.  eg:
>
> ../../../dev/an/if_an.c: In function `an_attach':
> ../../../dev/an/if_an.c:444: warning: too many arguments for format
>
> Also:
> ../../../kern/tty_pty.c: In function `ptyinit':
> ../../../kern/tty_pty.c:158: warning: use of `' length modifier with `r' type character
> ../../../kern/tty_pty.c: In function `pty_clone':
> ../../../kern/tty_pty.c:860: warning: use of `' length modifier with `r' type character
>
> I think this is the opposite problem to above.  %r appears to require a size
> argument in the checking while %D appears to prohibit one.

This is mostly because the special checks for %b and %D are done before
skipping over any characters between the % and the [bD], so only plain
%b and %B worked.

The following fix sees to work.  It just moves the special checks much
later and fixes some minor style bugs.  I think the checks should be
even later in another function?).  gcc now has more intelligence built
into the tables so it isn't so obvious where to put the special checks.

%%%
Index: c-format.c
===================================================================
RCS file: /home/ncvs/src/contrib/gcc/c-format.c,v
retrieving revision 1.3
diff -u -2 -r1.3 c-format.c
--- c-format.c	22 May 2002 16:37:09 -0000	1.3
+++ c-format.c	25 May 2002 09:44:19 -0000
@@ -798,7 +798,7 @@
      ("%*D", len, ptr, " ")	-> XX XX XX XX ...
    */
-  { "D",   1, STD_EXT, { T89_C,   T89_C,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      "cR" },
-  { "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"  },
+  { "D",   1, STD_EXT, { T89_C,  BADLEN,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      "cR" },
+  { "b",   1, STD_EXT, { T89_C,  BADLEN,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      ""   },
+  { "rz",  0, STD_EXT, { T89_I,  BADLEN,   BADLEN,   T89_L,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#",  "i"  },
   { NULL,  0, 0, NOLENGTHS, NULL, NULL }
 };
@@ -1741,52 +1741,4 @@
 	    }
 	}
-      if (*format_chars == 'b')
-	{
-	  /* There should be an int arg to control the string arg.  */
-	  if (params == 0)
-	    {
-	      status_warning (status, "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))
-		{
-		  status_warning (status, "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)
-	    {
-	      status_warning (status, "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)
-		{
-		  status_warning (status,
-			  "ethernet address is not type unsigned char * (arg %d)",
-			   arg_num);
-		}
-	    }
-	}

       /* Read any format flags, but do not yet validate them beyond removing
@@ -2062,4 +2014,55 @@
 		  flag_chars[i] = 0;
 		  format_chars++;
+		}
+	    }
+	}
+
+      if (*format_chars == 'b')
+	{
+	  /* There should be an int arg to control the string arg.  */
+	  if (params == 0)
+	    {
+	      status_warning (status, "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))
+		{
+		  status_warning (status, "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)
+	    {
+	      status_warning (status, "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)
+		{
+		  status_warning (status,
+		      "ethernet address is not type unsigned char * (arg %d)",
+				  arg_num);
 		}
 	    }
%%%

Bruce


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020525195005.I6995-100000>