From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 0FB453858414 for ; Tue, 19 Oct 2021 14:28:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0FB453858414 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9E7782F; Tue, 19 Oct 2021 07:28:18 -0700 (PDT) Received: from localhost (unknown [10.32.98.88]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0BD913F70D; Tue, 19 Oct 2021 07:28:17 -0700 (PDT) From: Richard Sandiford To: Prathamesh Kulkarni Mail-Followup-To: Prathamesh Kulkarni ,gcc Patches , Martin =?utf-8?Q?Li=C5=A1ka?= , richard.sandiford@arm.com Cc: gcc Patches , Martin =?utf-8?Q?Li=C5=A1ka?= Subject: Re: [aarch64] PR102376 - Emit better diagnostic for arch extensions in target attr References: Date: Tue, 19 Oct 2021 15:28:16 +0100 In-Reply-To: (Prathamesh Kulkarni's message of "Mon, 18 Oct 2021 16:51:03 +0530") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Oct 2021 14:28:20 -0000 Prathamesh Kulkarni writes: > Hi, > The attached patch emits a more verbose diagnostic for target attribute t= hat > is an architecture extension needing a leading '+'. > > For the following test, > void calculate(void) __attribute__ ((__target__ ("sve"))); > > With patch, the compiler now emits: > 102376.c:1:1: error: arch extension =E2=80=98sve=E2=80=99 should be prepe= nded with =E2=80=98+=E2=80=99 > 1 | void calculate(void) __attribute__ ((__target__ ("sve"))); > | ^~~~ > > instead of: > 102376.c:1:1: error: pragma or attribute =E2=80=98target("sve")=E2=80=99 = is not valid > 1 | void calculate(void) __attribute__ ((__target__ ("sve"))); > | ^~~~ Nice :-) > (This isn't specific to sve though). > OK to commit after bootstrap+test ? > > Thanks, > Prathamesh > > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c > index a9a1800af53..975f7faf968 100644 > --- a/gcc/config/aarch64/aarch64.c > +++ b/gcc/config/aarch64/aarch64.c > @@ -17821,7 +17821,16 @@ aarch64_process_target_attr (tree args) > num_attrs++; > if (!aarch64_process_one_target_attr (token)) > { > - error ("pragma or attribute % is not valid", token); > + /* Check if token is possibly an arch extension without > + leading '+'. */ > + char *str =3D (char *) xmalloc (strlen (token) + 2); > + str[0] =3D '+'; > + strcpy(str + 1, token); I think std::string would be better here, e.g.: auto with_plus =3D std::string ("+") + token; > + if (aarch64_handle_attr_isa_flags (str)) > + error("arch extension %<%s%> should be prepended with %<+%>", token= ); Nit: should be a space before the =E2=80=9C(=E2=80=9D. In principle, a fixit hint would have been nice here, but I don't think we have enough information to provide one. (Just saying for the record.) Thanks, Richard > + else > + error ("pragma or attribute % is not valid", token= ); > + free (str); > return false; > } >=20=20