From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1418 invoked by alias); 21 May 2019 00:56:33 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 1410 invoked by uid 89); 21 May 2019 00:56:32 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-13.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.1 spammy=sk:regress X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0a-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.156.1) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 21 May 2019 00:56:29 +0000 Received: from pps.filterd (m0098393.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x4L0uRsF020227 for ; Mon, 20 May 2019 20:56:27 -0400 Received: from e06smtp07.uk.ibm.com (e06smtp07.uk.ibm.com [195.75.94.103]) by mx0a-001b2d01.pphosted.com with ESMTP id 2sm4jvvuks-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 20 May 2019 20:56:21 -0400 Received: from localhost by e06smtp07.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 21 May 2019 01:56:19 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp07.uk.ibm.com (192.168.101.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Tue, 21 May 2019 01:56:18 +0100 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x4L0uHYc51446008 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 21 May 2019 00:56:17 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 139EDA4053; Tue, 21 May 2019 00:56:17 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 33FE0A404D; Tue, 21 May 2019 00:56:14 +0000 (GMT) Received: from luoxhus-mbp.cn.ibm.com (unknown [9.200.154.76]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 21 May 2019 00:56:13 +0000 (GMT) Subject: Re: *Ping* Re: [PATCH] PR c/43673 - Incorrect warning in dfp printf. From: luoxhu To: gcc-patches@gcc.gnu.org Cc: segher@kernel.crashing.org, wschmidt@linux.ibm.com, joseph@codesourcery.com, polacek@redhat.com, Xiong Hu Luo References: <1551143599-26436-1-git-send-email-luoxhu@linux.ibm.com> <74cee031-3bb8-9356-f7ea-13755159d7f6@linux.ibm.com> Date: Tue, 21 May 2019 00:56:00 -0000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <74cee031-3bb8-9356-f7ea-13755159d7f6@linux.ibm.com> Content-Type: text/plain; charset=gbk; format=flowed Content-Transfer-Encoding: 7bit x-cbid: 19052100-0028-0000-0000-0000036FC506 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19052100-0029-0000-0000-0000242F6C8D Message-Id: <51edfcaf-aaee-b07c-94cd-1a067ce99ba6@linux.ibm.com> X-SW-Source: 2019-05/txt/msg01338.txt.bz2 Ping for GCC-10. Thanks Xionghu On 2019/3/4 09:13, Xiong Hu Luo wrote: > Ping: > https://gcc.gnu.org/ml/gcc-patches/2019-02/msg01949.html > > Thanks > Xionghu > > On 2019/2/26 AM9:13, luoxhu@linux.ibm.com wrote: >> From: Xiong Hu Luo >> >> dfp printf/scanf of Ha/HA, Da/DA and DDa/DDA is not set properly, cause >> incorrect warning happens: >> "use of 'D' length modifier with 'a' type character". >> >> Regression-tested on powerpc64le-linux, OK for trunk and gcc-8? >> >> gcc/c-family/ChangeLog: >> >> 2019-02-25 Xiong Hu Luo >> >> PR c/43673 >> * c-format.c (print_char_table, scanf_char_table): Replace BADLEN with >> TEX_D32, TEX_D64 or TEX_D128. >> >> gcc/testsuit/ChangeLog: >> >> 2019-02-25 Xiong Hu Luo >> >> PR c/43673 >> * gcc.dg/format-dfp-printf-1.c: New test. >> * gcc.dg/format-dfp-scanf-1.c: Likewise. >> --- >> gcc/c-family/c-format.c | 4 ++-- >> gcc/testsuite/gcc.dg/format/dfp-printf-1.c | 28 ++++++++++++++++++++++++++-- >> gcc/testsuite/gcc.dg/format/dfp-scanf-1.c | 22 ++++++++++++++++++++-- >> 3 files changed, 48 insertions(+), 6 deletions(-) >> >> diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c >> index 9b48ee3..af33ef9 100644 >> --- a/gcc/c-family/c-format.c >> +++ b/gcc/c-family/c-format.c >> @@ -674,7 +674,7 @@ static const format_char_info print_char_table[] = >> { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T9L_LL, BADLEN, T99_SST, T99_PD, T99_IM, BADLEN, BADLEN, BADLEN }, "", "W", NULL }, >> /* C99 conversion specifiers. */ >> { "F", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN, TEX_D32, TEX_D64, TEX_D128 }, "-wp0 +#'I", "", NULL }, >> - { "aA", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp0 +#", "", NULL }, >> + { "aA", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN, TEX_D32, TEX_D64, TEX_D128 }, "-wp0 +#", "", NULL }, >> /* X/Open conversion specifiers. */ >> { "C", 0, STD_EXT, { TEX_WI, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w", "", NULL }, >> { "S", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "R", NULL }, >> @@ -847,7 +847,7 @@ static const format_char_info scan_char_table[] = >> { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T9L_LL, BADLEN, T99_SST, T99_PD, T99_IM, BADLEN, BADLEN, BADLEN }, "", "W", NULL }, >> /* C99 conversion specifiers. */ >> { "F", 1, STD_C99, { T99_F, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN, TEX_D32, TEX_D64, TEX_D128 }, "*w'", "W", NULL }, >> - { "aA", 1, STD_C99, { T99_F, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*w'", "W", NULL }, >> + { "aA", 1, STD_C99, { T99_F, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN, TEX_D32, TEX_D64, TEX_D128 }, "*w'", "W", NULL }, >> /* X/Open conversion specifiers. */ >> { "C", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*mw", "W", NULL }, >> { "S", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*amw", "W", NULL }, >> diff --git a/gcc/testsuite/gcc.dg/format/dfp-printf-1.c b/gcc/testsuite/gcc.dg/format/dfp-printf-1.c >> index e92f161..a290895 100644 >> --- a/gcc/testsuite/gcc.dg/format/dfp-printf-1.c >> +++ b/gcc/testsuite/gcc.dg/format/dfp-printf-1.c >> @@ -17,6 +17,8 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> >> /* Check lack of warnings for valid usage. */ >> >> + printf ("%Ha\n", x); >> + printf ("%HA\n", x); >> printf ("%Hf\n", x); >> printf ("%HF\n", x); >> printf ("%He\n", x); >> @@ -24,6 +26,8 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> printf ("%Hg\n", x); >> printf ("%HG\n", x); >> >> + printf ("%Da\n", y); >> + printf ("%DA\n", y); >> printf ("%Df\n", y); >> printf ("%DF\n", y); >> printf ("%De\n", y); >> @@ -31,6 +35,8 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> printf ("%Dg\n", y); >> printf ("%DG\n", y); >> >> + printf ("%DDa\n", z); >> + printf ("%DDA\n", z); >> printf ("%DDf\n", z); >> printf ("%DDF\n", z); >> printf ("%DDe\n", z); >> @@ -43,12 +49,16 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> >> /* Check warnings for type mismatches. */ >> >> + printf ("%Ha\n", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> + printf ("%HA\n", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%Hf\n", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%HF\n", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%He\n", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%HE\n", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%Hg\n", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%HG\n", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> + printf ("%Ha\n", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> + printf ("%HA\n", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%Hf\n", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%HF\n", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%He\n", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> @@ -56,12 +66,16 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> printf ("%Hg\n", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%HG\n", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> >> + printf ("%Da\n", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> + printf ("%DA\n", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%Df\n", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%DF\n", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%De\n", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%DE\n", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%Dg\n", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%DG\n", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> + printf ("%Da\n", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> + printf ("%DA\n", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%Df\n", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%DF\n", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%De\n", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> @@ -69,12 +83,16 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> printf ("%Dg\n", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> printf ("%DG\n", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> >> + printf ("%DDa\n", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> + printf ("%DDA\n", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> printf ("%DDf\n", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> printf ("%DDF\n", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> printf ("%DDe\n", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> printf ("%DDE\n", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> printf ("%DDg\n", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> printf ("%DDG\n", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> + printf ("%DDa\n", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> + printf ("%DDA\n", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> printf ("%DDf\n", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> printf ("%DDF\n", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> printf ("%DDe\n", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> @@ -90,8 +108,8 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> printf ("%Hu\n", j); /* { dg-warning "length" "bad use of %H" } */ >> printf ("%Hx\n", j); /* { dg-warning "length" "bad use of %H" } */ >> printf ("%HX\n", j); /* { dg-warning "length" "bad use of %H" } */ >> - printf ("%Ha\n", d); /* { dg-warning "length" "bad use of %H" } */ >> - printf ("%HA\n", d); /* { dg-warning "length" "bad use of %H" } */ >> + printf ("%Ha\n", d); /* { dg-warning "expects argument" "bad use of %H" } */ >> + printf ("%HA\n", d); /* { dg-warning "expects argument" "bad use of %H" } */ >> printf ("%Hc\n", i); /* { dg-warning "length" "bad use of %H" } */ >> printf ("%Hs\n", p); /* { dg-warning "length" "bad use of %H" } */ >> printf ("%Hp\n", p); /* { dg-warning "length" "bad use of %H" } */ >> @@ -100,6 +118,8 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> /* Sanity checks for flags, field width, and precision in formats for >> DFP types. */ >> >> + printf ("%-Ha\n", x); >> + printf ("%+HA\n", x); >> printf ("%-Hf\n", x); >> printf ("%+HF\n", x); >> printf ("% He\n", x); >> @@ -107,6 +127,8 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> printf ("%0Hg\n", x); >> printf ("%#0HG\n", x); >> >> + printf ("%0#Da\n", y); >> + printf ("%0DA\n", y); >> printf ("%0#Df\n", y); >> printf ("%0DF\n", y); >> printf ("%#De\n", y); >> @@ -114,6 +136,8 @@ foo (_Decimal32 x, _Decimal64 y, _Decimal128 z, int i, unsigned int j, >> printf ("%-#0Dg\n", y); /* { dg-warning "flag ignored" "ignore flag" } */ >> printf ("%0+ DG\n", y); /* { dg-warning "flag ignored" "ignore flag" } */ >> >> + printf ("%DDa\n", z); >> + printf ("%0DDA\n", z); >> printf ("%DDf\n", z); >> printf ("%0DDF\n", z); >> printf ("%#0DDe\n", z); >> diff --git a/gcc/testsuite/gcc.dg/format/dfp-scanf-1.c b/gcc/testsuite/gcc.dg/format/dfp-scanf-1.c >> index ffa12a8..6df3bc6 100644 >> --- a/gcc/testsuite/gcc.dg/format/dfp-scanf-1.c >> +++ b/gcc/testsuite/gcc.dg/format/dfp-scanf-1.c >> @@ -17,6 +17,8 @@ voo (_Decimal32 *x, _Decimal64 *y, _Decimal128 *z, int *i, unsigned int *j, >> >> /* Check lack of warnings for valid usage. */ >> >> + scanf ("%Ha", x); >> + scanf ("%HA", x); >> scanf ("%Hf", x); >> scanf ("%HF", x); >> scanf ("%He", x); >> @@ -24,6 +26,8 @@ voo (_Decimal32 *x, _Decimal64 *y, _Decimal128 *z, int *i, unsigned int *j, >> scanf ("%Hg", x); >> scanf ("%HG", x); >> >> + scanf ("%Da", y); >> + scanf ("%DA", y); >> scanf ("%Df", y); >> scanf ("%DF", y); >> scanf ("%De", y); >> @@ -31,6 +35,8 @@ voo (_Decimal32 *x, _Decimal64 *y, _Decimal128 *z, int *i, unsigned int *j, >> scanf ("%Dg", y); >> scanf ("%DG", y); >> >> + scanf ("%DDa", z); >> + scanf ("%DDA", z); >> scanf ("%DDf", z); >> scanf ("%DDF", z); >> scanf ("%DDe", z); >> @@ -43,12 +49,16 @@ voo (_Decimal32 *x, _Decimal64 *y, _Decimal128 *z, int *i, unsigned int *j, >> >> /* Check warnings for type mismatches. */ >> >> + scanf ("%Ha", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> + scanf ("%HA", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%Hf", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%HF", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%He", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%HE", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%Hg", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%HG", y); /* { dg-warning "expects argument" "bad use of %H" } */ >> + scanf ("%Ha", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> + scanf ("%HA", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%Hf", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%HF", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%He", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> @@ -56,12 +66,16 @@ voo (_Decimal32 *x, _Decimal64 *y, _Decimal128 *z, int *i, unsigned int *j, >> scanf ("%Hg", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%HG", z); /* { dg-warning "expects argument" "bad use of %H" } */ >> >> + scanf ("%Da", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> + scanf ("%DA", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%Df", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%DF", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%De", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%DE", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%Dg", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%DG", x); /* { dg-warning "expects argument" "bad use of %D" } */ >> + scanf ("%Da", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> + scanf ("%DA", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%Df", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%DF", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%De", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> @@ -69,12 +83,16 @@ voo (_Decimal32 *x, _Decimal64 *y, _Decimal128 *z, int *i, unsigned int *j, >> scanf ("%Dg", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> scanf ("%DG", z); /* { dg-warning "expects argument" "bad use of %D" } */ >> >> + scanf ("%DDa", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> + scanf ("%DDA", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> scanf ("%DDf", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> scanf ("%DDF", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> scanf ("%DDe", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> scanf ("%DDE", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> scanf ("%DDg", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> scanf ("%DDG", x); /* { dg-warning "expects argument" "bad use of %DD" } */ >> + scanf ("%DDa", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> + scanf ("%DDA", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> scanf ("%DDf", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> scanf ("%DDF", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> scanf ("%DDe", y); /* { dg-warning "expects argument" "bad use of %DD" } */ >> @@ -90,8 +108,8 @@ voo (_Decimal32 *x, _Decimal64 *y, _Decimal128 *z, int *i, unsigned int *j, >> scanf ("%Hu\n", j); /* { dg-warning "length" "bad use of %H" } */ >> scanf ("%Hx\n", j); /* { dg-warning "length" "bad use of %H" } */ >> scanf ("%HX\n", j); /* { dg-warning "length" "bad use of %H" } */ >> - scanf ("%Ha\n", d); /* { dg-warning "length" "bad use of %H" } */ >> - scanf ("%HA\n", d); /* { dg-warning "length" "bad use of %H" } */ >> + scanf ("%Ha\n", d); /* { dg-warning "expects argument" "bad use of %H" } */ >> + scanf ("%HA\n", d); /* { dg-warning "expects argument" "bad use of %H" } */ >> scanf ("%Hc\n", i); /* { dg-warning "length" "bad use of %H" } */ >> scanf ("%Hs\n", p); /* { dg-warning "length" "bad use of %H" } */ >> scanf ("%Hp\n", p); /* { dg-warning "length" "bad use of %H" } */ >>