diff mbox

Remove obsolete %[] specs operator

Message ID Pine.LNX.4.64.1107070002540.23355@digraph.polyomino.org.uk
State New
Headers show

Commit Message

Joseph Myers July 7, 2011, 12:03 a.m. UTC
The %[] spec operator is marked as obsolete and not used by any specs
in GCC; I'm also not sure it would work properly now the canonical
form of -D options is defined to have separate argument.  This patch
removes support for that obsolete operator.

Bootstrapped with no regressions on x86_64-unknown-linux-gnu.  OK to
commit?

2011-07-06  Joseph Myers  <joseph@codesourcery.com>

	* gcc.c (%[Spec]): Don't document.
	(struct spec_list): Update comment.
	(do_spec_1): Don't handle %[Spec].
	* doc/invoke.texi (%[@var{name}]): Remove documentation of spec.

Comments

Richard Biener July 7, 2011, 9:01 a.m. UTC | #1
On Thu, Jul 7, 2011 at 2:03 AM, Joseph S. Myers <joseph@codesourcery.com> wrote:
> The %[] spec operator is marked as obsolete and not used by any specs
> in GCC; I'm also not sure it would work properly now the canonical
> form of -D options is defined to have separate argument.  This patch
> removes support for that obsolete operator.
>
> Bootstrapped with no regressions on x86_64-unknown-linux-gnu.  OK to
> commit?

Ok.

Thanks,
Richard.

> 2011-07-06  Joseph Myers  <joseph@codesourcery.com>
>
>        * gcc.c (%[Spec]): Don't document.
>        (struct spec_list): Update comment.
>        (do_spec_1): Don't handle %[Spec].
>        * doc/invoke.texi (%[@var{name}]): Remove documentation of spec.
>
> Index: gcc/doc/invoke.texi
> ===================================================================
> --- gcc/doc/invoke.texi (revision 175919)
> +++ gcc/doc/invoke.texi (working copy)
> @@ -9768,9 +9768,6 @@ Use this when inconsistent options are d
>  @item %(@var{name})
>  Substitute the contents of spec string @var{name} at this point.
>
> -@item %[@var{name}]
> -Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
> -
>  @item %x@{@var{option}@}
>  Accumulate an option for @samp{%X}.
>
> Index: gcc/gcc.c
> ===================================================================
> --- gcc/gcc.c   (revision 175919)
> +++ gcc/gcc.c   (working copy)
> @@ -438,7 +438,6 @@ or with constant text in a single argume
>           This may be combined with '.', '!', ',', '|', and '*' as above.
>
>  %(Spec) processes a specification defined in a specs file as *Spec:
> - %[Spec] as above, but put __ around -D arguments
>
>  The conditional text X in a %{S:X} or similar construct may contain
>  other nested % constructs or spaces, or even newlines.  They are
> @@ -1149,8 +1148,8 @@ static const char *multilib_dir;
>  static const char *multilib_os_dir;
>
>  /* Structure to keep track of the specs that have been defined so far.
> -   These are accessed using %(specname) or %[specname] in a compiler
> -   or link spec.  */
> +   These are accessed using %(specname) in a compiler or link
> +   spec.  */
>
>  struct spec_list
>  {
> @@ -5212,11 +5211,7 @@ do_spec_1 (const char *spec, int inswitc
>
>            /* Process a string found as the value of a spec given by name.
>               This feature allows individual machine descriptions
> -              to add and use their own specs.
> -              %[...] modifies -D options the way %P does;
> -              %(...) uses the spec unmodified.  */
> -         case '[':
> -           warning (0, "use of obsolete %%[ operator in specs");
> +              to add and use their own specs.  */
>          case '(':
>            {
>              const char *name = p;
> @@ -5225,7 +5220,7 @@ do_spec_1 (const char *spec, int inswitc
>
>              /* The string after the S/P is the name of a spec that is to be
>                 processed.  */
> -             while (*p && *p != ')' && *p != ']')
> +             while (*p && *p != ')')
>                p++;
>
>              /* See if it's in the list.  */
> @@ -5234,63 +5229,20 @@ do_spec_1 (const char *spec, int inswitc
>                  {
>                    name = *(sl->ptr_spec);
>  #ifdef DEBUG_SPECS
> -                   fnotice (stderr, "Processing spec %c%s%c, which is '%s'\n",
> -                           c, sl->name, (c == '(') ? ')' : ']', name);
> +                   fnotice (stderr, "Processing spec (%s), which is '%s'\n",
> +                            sl->name, name);
>  #endif
>                    break;
>                  }
>
>              if (sl)
>                {
> -                 if (c == '(')
> -                   {
> -                     value = do_spec_1 (name, 0, NULL);
> -                     if (value != 0)
> -                       return value;
> -                   }
> -                 else
> -                   {
> -                     char *x = (char *) alloca (strlen (name) * 2 + 1);
> -                     char *buf = x;
> -                     const char *y = name;
> -                     int flag = 0;
> -
> -                     /* Copy all of NAME into BUF, but put __ after
> -                        every -D and at the end of each arg.  */
> -                     while (1)
> -                       {
> -                         if (! strncmp (y, "-D", 2))
> -                           {
> -                             *x++ = '-';
> -                             *x++ = 'D';
> -                             *x++ = '_';
> -                             *x++ = '_';
> -                             y += 2;
> -                             flag = 1;
> -                             continue;
> -                           }
> -                         else if (flag
> -                                  && (*y == ' ' || *y == '\t' || *y == '='
> -                                      || *y == '}' || *y == 0))
> -                           {
> -                             *x++ = '_';
> -                             *x++ = '_';
> -                             flag = 0;
> -                           }
> -                         if (*y == 0)
> -                           break;
> -                         else
> -                           *x++ = *y++;
> -                       }
> -                     *x = 0;
> -
> -                     value = do_spec_1 (buf, 0, NULL);
> -                     if (value != 0)
> -                       return value;
> -                   }
> +                 value = do_spec_1 (name, 0, NULL);
> +                 if (value != 0)
> +                   return value;
>                }
>
> -             /* Discard the closing paren or bracket.  */
> +             /* Discard the closing paren.  */
>              if (*p)
>                p++;
>            }
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
>
diff mbox

Patch

Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi	(revision 175919)
+++ gcc/doc/invoke.texi	(working copy)
@@ -9768,9 +9768,6 @@  Use this when inconsistent options are d
 @item %(@var{name})
 Substitute the contents of spec string @var{name} at this point.
 
-@item %[@var{name}]
-Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
-
 @item %x@{@var{option}@}
 Accumulate an option for @samp{%X}.
 
Index: gcc/gcc.c
===================================================================
--- gcc/gcc.c	(revision 175919)
+++ gcc/gcc.c	(working copy)
@@ -438,7 +438,6 @@  or with constant text in a single argume
           This may be combined with '.', '!', ',', '|', and '*' as above.
 
  %(Spec) processes a specification defined in a specs file as *Spec:
- %[Spec] as above, but put __ around -D arguments
 
 The conditional text X in a %{S:X} or similar construct may contain
 other nested % constructs or spaces, or even newlines.  They are
@@ -1149,8 +1148,8 @@  static const char *multilib_dir;
 static const char *multilib_os_dir;
 
 /* Structure to keep track of the specs that have been defined so far.
-   These are accessed using %(specname) or %[specname] in a compiler
-   or link spec.  */
+   These are accessed using %(specname) in a compiler or link
+   spec.  */
 
 struct spec_list
 {
@@ -5212,11 +5211,7 @@  do_spec_1 (const char *spec, int inswitc
 
 	    /* Process a string found as the value of a spec given by name.
 	       This feature allows individual machine descriptions
-	       to add and use their own specs.
-	       %[...] modifies -D options the way %P does;
-	       %(...) uses the spec unmodified.  */
-	  case '[':
-	    warning (0, "use of obsolete %%[ operator in specs");
+	       to add and use their own specs.  */
 	  case '(':
 	    {
 	      const char *name = p;
@@ -5225,7 +5220,7 @@  do_spec_1 (const char *spec, int inswitc
 
 	      /* The string after the S/P is the name of a spec that is to be
 		 processed.  */
-	      while (*p && *p != ')' && *p != ']')
+	      while (*p && *p != ')')
 		p++;
 
 	      /* See if it's in the list.  */
@@ -5234,63 +5229,20 @@  do_spec_1 (const char *spec, int inswitc
 		  {
 		    name = *(sl->ptr_spec);
 #ifdef DEBUG_SPECS
-		    fnotice (stderr, "Processing spec %c%s%c, which is '%s'\n",
-			    c, sl->name, (c == '(') ? ')' : ']', name);
+		    fnotice (stderr, "Processing spec (%s), which is '%s'\n",
+			     sl->name, name);
 #endif
 		    break;
 		  }
 
 	      if (sl)
 		{
-		  if (c == '(')
-		    {
-		      value = do_spec_1 (name, 0, NULL);
-		      if (value != 0)
-			return value;
-		    }
-		  else
-		    {
-		      char *x = (char *) alloca (strlen (name) * 2 + 1);
-		      char *buf = x;
-		      const char *y = name;
-		      int flag = 0;
-
-		      /* Copy all of NAME into BUF, but put __ after
-			 every -D and at the end of each arg.  */
-		      while (1)
-			{
-			  if (! strncmp (y, "-D", 2))
-			    {
-			      *x++ = '-';
-			      *x++ = 'D';
-			      *x++ = '_';
-			      *x++ = '_';
-			      y += 2;
-			      flag = 1;
-			      continue;
-			    }
-			  else if (flag
-				   && (*y == ' ' || *y == '\t' || *y == '='
-				       || *y == '}' || *y == 0))
-			    {
-			      *x++ = '_';
-			      *x++ = '_';
-			      flag = 0;
-			    }
-			  if (*y == 0)
-			    break;
-			  else
-			    *x++ = *y++;
-			}
-		      *x = 0;
-
-		      value = do_spec_1 (buf, 0, NULL);
-		      if (value != 0)
-			return value;
-		    }
+		  value = do_spec_1 (name, 0, NULL);
+		  if (value != 0)
+		    return value;
 		}
 
-	      /* Discard the closing paren or bracket.  */
+	      /* Discard the closing paren.  */
 	      if (*p)
 		p++;
 	    }