From fde5bd5c53d98e14c06413cde7ce4ada0d89cc8d Mon Sep 17 00:00:00 2001 From: jiez Date: Wed, 23 Feb 2011 02:04:43 +0000 Subject: [PATCH] * opts-common.c (decode_cmdline_option): Print empty string argument as "" in decoded->orig_option_with_args_text. * gcc.c (execute): Print empty string argument as "" in the verbose output. (do_spec_1): Keep empty string argument. testsuite/ * gcc.dg/cpp/include7.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170426 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/gcc.c | 16 ++++++++++++++-- gcc/opts-common.c | 15 +++++++++++++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/cpp/include7.c | 3 +++ 5 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/cpp/include7.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 12d3137..aaa703d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-02-23 Jie Zhang + + * opts-common.c (decode_cmdline_option): Print empty string + argument as "" in decoded->orig_option_with_args_text. + * gcc.c (execute): Print empty string argument as "" + in the verbose output. + (do_spec_1): Keep empty string argument. + 2011-02-23 Nathan Froyd * config.gcc: Declare score-* and crx-* obsolete. diff --git a/gcc/gcc.c b/gcc/gcc.c index 6a26aaf..75f522e 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -2538,13 +2538,20 @@ execute (void) } fputc ('"', stderr); } + /* If it's empty, print "". */ + else if (!**j) + fprintf (stderr, " \"\""); else fprintf (stderr, " %s", *j); } } else for (j = commands[i].argv; *j; j++) - fprintf (stderr, " %s", *j); + /* If it's empty, print "". */ + if (!**j) + fprintf (stderr, " \"\""); + else + fprintf (stderr, " %s", *j); /* Print a pipe symbol after all but the last command. */ if (i + 1 != n_commands) @@ -4423,6 +4430,10 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) int i; int value; + /* If it's an empty string argument to a switch, keep it as is. */ + if (inswitch && !*p) + arg_going = 1; + while ((c = *p++)) /* If substituting a switch, treat all chars like letters. Otherwise, NL, SPC, TAB and % are special. */ @@ -5149,7 +5160,8 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) case '*': if (soft_matched_part) { - do_spec_1 (soft_matched_part, 1, NULL); + if (soft_matched_part[0]) + do_spec_1 (soft_matched_part, 1, NULL); do_spec_1 (" ", 0, NULL); } else diff --git a/gcc/opts-common.c b/gcc/opts-common.c index 3c4044a..f958b7e 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -607,11 +607,15 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, { if (i < result) { + size_t len; if (opt_index == OPT_SPECIAL_unknown) decoded->canonical_option[i] = argv[i]; else decoded->canonical_option[i] = NULL; - total_len += strlen (argv[i]) + 1; + len = strlen (argv[i]); + /* If the argument is an empty string, we will print it as "" in + orig_option_with_args_text. */ + total_len += (len != 0 ? len : 2) + 1; } else decoded->canonical_option[i] = NULL; @@ -637,7 +641,14 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, { size_t len = strlen (argv[i]); - memcpy (p, argv[i], len); + /* Print the empty string verbally. */ + if (len == 0) + { + *p++ = '"'; + *p++ = '"'; + } + else + memcpy (p, argv[i], len); p += len; if (i == result - 1) *p++ = 0; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f64735e..60e924b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-02-23 Jie Zhang + + * gcc.dg/cpp/include7.c: New test. + 2011-02-22 Paolo Carlini PR c++/47242 diff --git a/gcc/testsuite/gcc.dg/cpp/include7.c b/gcc/testsuite/gcc.dg/cpp/include7.c new file mode 100644 index 0000000..0e95601 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/include7.c @@ -0,0 +1,3 @@ +/* { dg-do compile } */ +/* { dg-options "-I \"\"" } */ + -- 2.7.4