diff --git a/argp/Makefile b/argp/Makefile
index 1f9b074bed..0c0270ffef 100644
--- a/argp/Makefile
+++ b/argp/Makefile
@@ -27,7 +27,7 @@ routines = $(addprefix argp-, ba fmtstream
fs-xinl help parse pv \
pvh xinl eexst)
tests = argp-test tst-argp1 bug-argp1 tst-argp2 bug-argp2 \
- tst-ldbl-argp
+ tst-ldbl-argp tst-argp3
CFLAGS-argp-help.c += $(uses-callbacks) -fexceptions
CFLAGS-argp-parse.c += $(uses-callbacks)
diff --git a/argp/argp-help.c b/argp/argp-help.c
index 2bcd6549fd..8d213e4586 100644
--- a/argp/argp-help.c
+++ b/argp/argp-help.c
@@ -1465,10 +1465,11 @@ argp_doc (const struct argp *argp, const
struct argp_state *state,
size_t inp_text_limit = 0;
const char *doc = dgettext (argp->argp_domain, argp->doc);
const struct argp_child *child = argp->children;
+ char *vt = 0;
if (doc)
{
- char *vt = strchr (doc, '\v');
+ vt = strchr (doc, '\v');
inp_text = post ? (vt ? vt + 1 : 0) : doc;
inp_text_limit = (!post && vt) ? (vt - doc) : 0;
}
@@ -1499,7 +1500,12 @@ argp_doc (const struct argp *argp, const struct
argp_state *state,
if (text == inp_text && inp_text_limit)
__argp_fmtstream_write (stream, inp_text, inp_text_limit);
else
- __argp_fmtstream_puts (stream, text);
+ {
+ if ((!vt && !child) || (text == inp_text && !first_only))
+ {
+ __argp_fmtstream_puts (stream, text);
+ }
+ }
if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream))
__argp_fmtstream_putc (stream, '\n');
diff --git a/argp/tst-argp3.c b/argp/tst-argp3.c
new file mode 100644
index 0000000000..cfdace2574
--- /dev/null
+++ b/argp/tst-argp3.c
@@ -0,0 +1,68 @@
+/* Test for argparse with leading '\v' in the doc string.
+ Copyright (C) 2020 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .*/
+
+
+#include
+#include
+
+#include
+#include
+
+
+static char expected_success[] = "Usage: arp [OPTION...]\n\
+\n\
+ -?, --help Give this help list\n\
+ --usage Give a short usage message\n\
+\n\
+this is post_doc\n\
+";
+char *argv[3] = { (char *) "arp", NULL, NULL };
+
+static void
+do_test_call (void)
+{
+ static char doc[] = "\vthis is post_doc";
+ static struct argp argp = {NULL, NULL, NULL, doc};
+
+ argp_parse (&argp, 2, argv, 0, 0, NULL);
+}
+
+static int
+do_one_test (const char *expected)
+{
+ struct support_capture_subprocess result;
+ result = support_capture_subprocess ((void *) &do_test_call, NULL);
+
+ TEST_COMPARE_STRING (result.out.buffer, expected);
+
+ return 0;
+}
+
+
+static int
+do_test (void)
+{
+ const char *argument = "--help";
+ argv[1] = (char *)argument;
+ // success condition
+ do_one_test (expected_success);
+ return 0;
+}
+
+/* This file references do_test above and contains the definition of
+ the main function. */
+#include
+