diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 6 | ||||
-rw-r--r-- | gcc/gcc.c | 19 |
3 files changed, 21 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 07aad7b..40eef02 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2010-05-11 Jakub Jelinek <jakub@redhat.com> + * gcc.c (execute): For -### don't quote arguments that + contain just alphanumerics and _/-. characters. + * doc/invoke.texi: Document that change for -###. + PR debug/44023 * df-problems.c (struct dead_debug): Add to_rescan field. (dead_debug_init): Clear to_rescan field. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 33e4612..98f97cc 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1172,9 +1172,9 @@ program and of the preprocessor and the compiler proper. @item -### @opindex ### -Like @option{-v} except the commands are not executed and all command -arguments are quoted. This is useful for shell scripts to capture the -driver-generated command lines. +Like @option{-v} except the commands are not executed and arguments +are quoted unless they contain only alphanumeric characters or @code{./-_}. +This is useful for shell scripts to capture the driver-generated command lines. @item -pipe @opindex pipe @@ -3020,14 +3020,23 @@ execute (void) for (j = commands[i].argv; *j; j++) { const char *p; - fprintf (stderr, " \""); for (p = *j; *p; ++p) + if (!ISALNUM ((unsigned char) *p) + && *p != '_' && *p != '/' && *p != '-' && *p != '.') + break; + if (*p || !*j) { - if (*p == '"' || *p == '\\' || *p == '$') - fputc ('\\', stderr); - fputc (*p, stderr); + fprintf (stderr, " \""); + for (p = *j; *p; ++p) + { + if (*p == '"' || *p == '\\' || *p == '$') + fputc ('\\', stderr); + fputc (*p, stderr); + } + fputc ('"', stderr); } - fputc ('"', stderr); + else + fprintf (stderr, " %s", *j); } } else |