From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 4F932382CE0E for ; Wed, 7 Dec 2022 02:21:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4F932382CE0E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2B70hgsp018214; Wed, 7 Dec 2022 02:21:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : subject : to : references : cc : from : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pp1; bh=MnFdpXB5xClkSIML/oJj6aX4bSJ4NTo50kPDJ/Q7nq4=; b=hKxnXXJevMJH9RBgBnah0zIrL/v27tI2vzDU+k4w73EvNqPU6rMVOw3gOqls2u+QiKSY gsi26I3VBAjGTohz8MPqhppEm49lXjyFTz4GzTq5YdAdQuSup9y/1Jj8BuA0wvflC+mo cA4iC1b7LGhK6zihipSV2m9EYjiPMBLgNAEmQFOg0GSKvrEW2cO3OrXrmNFKlGygeTEz t0p+vz8c5obL7XAuCrj9U1v71fp+c3sndRo/VkXmW4KD5FhPF8xGkWbiK4P/evbLrZOa kD/kVsGNcUw4mJ3sFZw/btv2tN6D9sRhV4oyfIxo55sYPpVXnsryDekI2D3QTcae1p5e nA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com (PPS) with ESMTPS id 3maghp1vxf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 07 Dec 2022 02:21:44 +0000 Received: from m0098419.ppops.net (m0098419.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 2B72Ia28029790; Wed, 7 Dec 2022 02:21:43 GMT Received: from ppma06ams.nl.ibm.com (66.31.33a9.ip4.static.sl-reverse.com [169.51.49.102]) by mx0b-001b2d01.pphosted.com (PPS) with ESMTPS id 3maghp1vwt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 07 Dec 2022 02:21:43 +0000 Received: from pps.filterd (ppma06ams.nl.ibm.com [127.0.0.1]) by ppma06ams.nl.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 2B6LM5Cb010845; Wed, 7 Dec 2022 02:21:41 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma06ams.nl.ibm.com (PPS) with ESMTPS id 3m9kvba8ac-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 07 Dec 2022 02:21:41 +0000 Received: from smtpav04.fra02v.mail.ibm.com (smtpav04.fra02v.mail.ibm.com [10.20.54.103]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 2B72LdT420447950 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 7 Dec 2022 02:21:39 GMT Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1F19C20043; Wed, 7 Dec 2022 02:21:39 +0000 (GMT) Received: from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CD9DC20040; Wed, 7 Dec 2022 02:21:35 +0000 (GMT) Received: from [9.197.224.206] (unknown [9.197.224.206]) by smtpav04.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 7 Dec 2022 02:21:35 +0000 (GMT) Message-ID: <27c3ea14-1e54-5077-77bf-e3e6ddaf786c@linux.ibm.com> Date: Wed, 7 Dec 2022 10:21:34 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: [PATCH] Fix aarch64 PR 99657: ICE with SVE types used without an error Content-Language: en-US To: gcc-patches@gcc.gnu.org References: <1636452570-4846-1-git-send-email-apinski@marvell.com> Cc: apinski@marvell.com, polacek@redhat.com, Joseph Myers , jason@redhat.com, nathan@acm.org, Segher Boessenkool , Richard Sandiford From: "Kewen.Lin" In-Reply-To: <1636452570-4846-1-git-send-email-apinski@marvell.com> Content-Type: text/plain; charset=UTF-8 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: befqv0s0rfJSVSpgj5Xgy1X165k9AcTu X-Proofpoint-ORIG-GUID: EbRSfzoyEZMk1dxWta5Do_ZyyWhpGBfv Content-Transfer-Encoding: 7bit X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.923,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-12-06_12,2022-12-06_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 suspectscore=0 priorityscore=1501 adultscore=0 spamscore=0 lowpriorityscore=0 phishscore=0 impostorscore=0 malwarescore=0 mlxlogscore=999 bulkscore=0 clxscore=1011 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2212070009 X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi, In the recent discussion on how to make some built-in type only valid for some target features efficiently[1], Andrew mentioned this patch which he made previously (Thanks!). I confirmed it can help rs6000 related issue, and noticed PR99657 is still opened, so I think we still want this to be reviewed. Could some C/C++ FE experts help to review it? Thanks in advance! BR, Kewen [1] https://gcc.gnu.org/pipermail/gcc/2022-December/240220.html on 2021/11/9 18:09, apinski--- via Gcc-patches wrote: > From: Andrew Pinski > > This fixes fully where SVE types were being used without sve being enabled. > Instead of trying to fix it such that we error out during RTL time, it is > better to error out in front-ends. This expands verify_type_context to > have a context of auto storage decl which is used for both auto storage > decls and for indirection context. > > A few testcases needed to be updated for the new error message; they were > already being rejected before hand. > > OK? Bootstrapped and tested on aarch64-linux-gnu with no regressions. > > PR target/99657 > gcc/c/ChangeLog: > > * c-decl.c (finish_decl): Call verify_type_context > for all decls and not just global_decls. > * c-typeck.c (build_indirect_ref): Call verify_type_context > to check to see if the type is ok to be used. > > gcc/ChangeLog: > > * config/aarch64/aarch64-sve-builtins.cc (verify_type_context): > Add TXTC_AUTO_STORAGE support > * target.h (enum type_context_kind): Add TXTC_AUTO_STORAGE. > > gcc/cp/ChangeLog: > > * decl.c (cp_finish_decl): Call verify_type_context > for all decls and not just global_decls. > * typeck.c (cp_build_indirect_ref_1): Call verify_type_context > to check to see if the type is ok to be used. > > gcc/testsuite/ChangeLog: > > * gcc.target/aarch64/sve/acle/general/nosve_1.c: Update test. > * gcc.target/aarch64/sve/acle/general/nosve_4.c: Likewise. > * gcc.target/aarch64/sve/acle/general/nosve_5.c: Likewise. > * gcc.target/aarch64/sve/acle/general/nosve_6.c: Likewise. > * gcc.target/aarch64/sve/pcs/nosve_2.c: Likewise. > * gcc.target/aarch64/sve/pcs/nosve_3.c: Likewise. > * gcc.target/aarch64/sve/pcs/nosve_4.c: Likewise. > * gcc.target/aarch64/sve/pcs/nosve_5.c: Likewise. > * gcc.target/aarch64/sve/pcs/nosve_6.c: Likewise. > * gcc.target/aarch64/sve/pcs/nosve_9.c: New test. > --- > gcc/c/c-decl.c | 14 +++++++------- > gcc/c/c-typeck.c | 2 ++ > gcc/config/aarch64/aarch64-sve-builtins.cc | 14 ++++++++++++++ > gcc/cp/decl.c | 10 ++++++---- > gcc/cp/typeck.c | 4 ++++ > gcc/target.h | 3 +++ > .../gcc.target/aarch64/sve/acle/general/nosve_1.c | 1 + > .../gcc.target/aarch64/sve/acle/general/nosve_4.c | 2 +- > .../gcc.target/aarch64/sve/acle/general/nosve_5.c | 2 +- > .../gcc.target/aarch64/sve/acle/general/nosve_6.c | 1 + > .../gcc.target/aarch64/sve/pcs/nosve_2.c | 2 +- > .../gcc.target/aarch64/sve/pcs/nosve_3.c | 2 +- > .../gcc.target/aarch64/sve/pcs/nosve_4.c | 3 +-- > .../gcc.target/aarch64/sve/pcs/nosve_5.c | 3 +-- > .../gcc.target/aarch64/sve/pcs/nosve_6.c | 3 +-- > .../gcc.target/aarch64/sve/pcs/nosve_9.c | 15 +++++++++++++++ > 16 files changed, 60 insertions(+), 21 deletions(-) > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_9.c > > diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c > index 186fa1692c1..b3583622475 100644 > --- a/gcc/c/c-decl.c > +++ b/gcc/c/c-decl.c > @@ -5441,19 +5441,19 @@ finish_decl (tree decl, location_t init_loc, tree init, > > if (VAR_P (decl)) > { > + type_context_kind context = TCTX_AUTO_STORAGE; > if (init && TREE_CODE (init) == CONSTRUCTOR) > add_flexible_array_elts_to_size (decl, init); > > complete_flexible_array_elts (DECL_INITIAL (decl)); > > if (is_global_var (decl)) > - { > - type_context_kind context = (DECL_THREAD_LOCAL_P (decl) > - ? TCTX_THREAD_STORAGE > - : TCTX_STATIC_STORAGE); > - if (!verify_type_context (input_location, context, TREE_TYPE (decl))) > - TREE_TYPE (decl) = error_mark_node; > - } > + context = (DECL_THREAD_LOCAL_P (decl) > + ? TCTX_THREAD_STORAGE > + : TCTX_STATIC_STORAGE); > + > + if (!verify_type_context (input_location, context, TREE_TYPE (decl))) > + TREE_TYPE (decl) = error_mark_node; > > if (DECL_SIZE (decl) == NULL_TREE && TREE_TYPE (decl) != error_mark_node > && COMPLETE_TYPE_P (TREE_TYPE (decl))) > diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c > index 782414f8c8c..e926b7c1964 100644 > --- a/gcc/c/c-typeck.c > +++ b/gcc/c/c-typeck.c > @@ -2630,6 +2630,8 @@ build_indirect_ref (location_t loc, tree ptr, ref_operator errstring) > else > { > tree t = TREE_TYPE (type); > + if (!verify_type_context (loc, TCTX_AUTO_STORAGE, t)) > + return error_mark_node; > > ref = build1 (INDIRECT_REF, t, pointer); > > diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc > index bc92213665c..1d5083bf9fa 100644 > --- a/gcc/config/aarch64/aarch64-sve-builtins.cc > +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc > @@ -3834,11 +3834,25 @@ bool > verify_type_context (location_t loc, type_context_kind context, > const_tree type, bool silent_p) > { > + static bool informed = false; > if (!sizeless_type_p (type)) > return true; > > switch (context) > { > + case TCTX_AUTO_STORAGE: > + if (TARGET_SVE) > + return true; > + if (!silent_p && !informed) > + { > + informed = true; > + error_at (loc, "SVE type %qT used without SVE ISA enabled", type); > + inform (loc, "you can enable SVE using the command-line" > + " option %<-march%>, or by using the %" > + " attribute or pragma"); > + } > + return false; > + > case TCTX_SIZEOF: > case TCTX_STATIC_STORAGE: > if (!silent_p) > diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c > index 947bbfc6637..1ffd11acae0 100644 > --- a/gcc/cp/decl.c > +++ b/gcc/cp/decl.c > @@ -7975,11 +7975,13 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, > && DECL_INITIALIZED_IN_CLASS_P (decl)) > check_static_variable_definition (decl, type); > > - if (!processing_template_decl && VAR_P (decl) && is_global_var (decl)) > + if (!processing_template_decl && VAR_P (decl)) > { > - type_context_kind context = (DECL_THREAD_LOCAL_P (decl) > - ? TCTX_THREAD_STORAGE > - : TCTX_STATIC_STORAGE); > + type_context_kind context = TCTX_AUTO_STORAGE; > + if (is_global_var (decl)) > + context = (DECL_THREAD_LOCAL_P (decl) > + ? TCTX_THREAD_STORAGE > + : TCTX_STATIC_STORAGE); > verify_type_context (input_location, context, TREE_TYPE (decl)); > } > > diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c > index cb20329ceb5..61122e160a9 100644 > --- a/gcc/cp/typeck.c > +++ b/gcc/cp/typeck.c > @@ -3608,6 +3608,10 @@ cp_build_indirect_ref_1 (location_t loc, tree ptr, ref_operator errorstring, > return TREE_OPERAND (pointer, 0); > else > { > + if (!verify_type_context (loc, TCTX_AUTO_STORAGE, t, > + !(complain & tf_error))) > + return error_mark_node; > + > tree ref = build1 (INDIRECT_REF, t, pointer); > > /* We *must* set TREE_READONLY when dereferencing a pointer to const, > diff --git a/gcc/target.h b/gcc/target.h > index d8f45fb99c3..2570b775c5e 100644 > --- a/gcc/target.h > +++ b/gcc/target.h > @@ -217,6 +217,9 @@ const unsigned int VECT_COMPARE_COSTS = 1U << 0; > /* The contexts in which the use of a type T can be checked by > TARGET_VERIFY_TYPE_CONTEXT. */ > enum type_context_kind { > + /* Creeating objects of type T with auto storage duration. */ > + TCTX_AUTO_STORAGE, > + > /* Directly measuring the size of T. */ > TCTX_SIZEOF, > > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_1.c > index 09dfacd222d..3ea786fe4b3 100644 > --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_1.c > +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_1.c > @@ -7,6 +7,7 @@ f (svbool_t *x, svint8_t *y) > { > *x = svptrue_b8 (); /* { dg-error {ACLE function '(svbool_t svptrue_b8\(\)|svptrue_b8)' requires ISA extension 'sve'} } */ > /* { dg-message {note: you can enable 'sve' using the command-line option '-march', or by using the 'target' attribute or pragma} "" { target *-*-* } .-1 } */ > + /* { dg-error "SVE type 'svbool_t' {aka '__SVBool_t'} used without SVE ISA enabled" "indirect" {target *-*-* } .-2 } */ > *x = svptrue_b8 (); > *x = svptrue_b8 (); > *x = svptrue_b8 (); > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_4.c > index 35ab07f1b49..6aef1a77f14 100644 > --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_4.c > +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_4.c > @@ -3,6 +3,6 @@ > void > f (__SVBool_t *x, __SVBool_t *y) > { > - *x = *y; /* { dg-error {this operation requires the SVE ISA extension} } */ > + *x = *y; /* { dg-error {SVE type '__SVBool_t' used without SVE ISA enabled} } */ > *x = *y; > } > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_5.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_5.c > index 6e8d951b294..33e2069fcb0 100644 > --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_5.c > +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_5.c > @@ -3,6 +3,6 @@ > void > f (__SVInt8_t *x, __SVInt8_t *y) > { > - *x = *y; /* { dg-error {this operation requires the SVE ISA extension} } */ > + *x = *y; /* { dg-error {SVE type '__SVInt8_t' used without SVE ISA enabled} } */ > *x = *y; > } > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_6.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_6.c > index d91ba40de14..7dc10528a17 100644 > --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_6.c > +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/nosve_6.c > @@ -8,5 +8,6 @@ void > f (svbool_t *x, svint8_t *y) > { > *x = svptrue_b8 (); /* { dg-error {ACLE function '(svbool_t svptrue_b8\(\)|svptrue_b8)' is incompatible with the use of '-mgeneral-regs-only'} } */ > + /* { dg-error {SVE type 'svbool_t' {aka '__SVBool_t'} used without SVE ISA enabled} "" { target *-*-* } .-1 } */ > *y = svadd_m (*x, *y, 1); > } > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_2.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_2.c > index 663165f892d..0f1bad1734e 100644 > --- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_2.c > +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_2.c > @@ -10,5 +10,5 @@ svbool_t return_bool (); > void > f (svbool_t *ptr) > { > - *ptr = return_bool (); /* { dg-error {'return_bool' requires the SVE ISA extension} } */ > + *ptr = return_bool (); /* { dg-error {SVE type 'svbool_t' used without SVE ISA enabled} } */ > } > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_3.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_3.c > index 6d5823cfde1..2f9ebd827a7 100644 > --- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_3.c > +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_3.c > @@ -10,5 +10,5 @@ svbool_t (*return_bool) (); > void > f (svbool_t *ptr) > { > - *ptr = return_bool (); /* { dg-error {calls to functions of type 'svbool_t\(\)' require the SVE ISA extension} } */ > + *ptr = return_bool (); /* { dg-error {SVE type 'svbool_t' used without SVE ISA enabled} } */ > } > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_4.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_4.c > index a248bdbdbd9..979f98c11c8 100644 > --- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_4.c > +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_4.c > @@ -10,6 +10,5 @@ void take_svuint8 (svuint8_t); > void > f (svuint8_t *ptr) > { > - take_svuint8 (*ptr); /* { dg-error {this operation requires the SVE ISA extension} } */ > - /* { dg-error {'take_svuint8' requires the SVE ISA extension} "" { target *-*-* } .-1 } */ > + take_svuint8 (*ptr); /* { dg-error {SVE type 'svuint8_t' used without SVE ISA enabled} } */ > } > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_5.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_5.c > index 6263b5acdec..990e28aae70 100644 > --- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_5.c > +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_5.c > @@ -11,6 +11,5 @@ void take_svuint8_eventually (float, float, float, float, > void > f (svuint8_t *ptr) > { > - take_svuint8_eventually (0, 0, 0, 0, 0, 0, 0, 0, *ptr); /* { dg-error {this operation requires the SVE ISA extension} } */ > - /* { dg-error {arguments of type '(svuint8_t|__SVUint8_t)' require the SVE ISA extension} "" { target *-*-* } .-1 } */ > + take_svuint8_eventually (0, 0, 0, 0, 0, 0, 0, 0, *ptr); /* { dg-error {SVE type 'svuint8_t' used without SVE ISA enabled} } */ > } > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_6.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_6.c > index 85b68bb3881..f11de7017a2 100644 > --- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_6.c > +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_6.c > @@ -10,6 +10,5 @@ void unprototyped (); > void > f (svuint8_t *ptr) > { > - unprototyped (*ptr); /* { dg-error {this operation requires the SVE ISA extension} } */ > - /* { dg-error {arguments of type '(svuint8_t|__SVUint8_t)' require the SVE ISA extension} "" { target *-*-* } .-1 } */ > + unprototyped (*ptr); /* { dg-error {SVE type 'svuint8_t' used without SVE ISA enabled} } */ > } > diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_9.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_9.c > new file mode 100644 > index 00000000000..7b7f322fe8c > --- /dev/null > +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/nosve_9.c > @@ -0,0 +1,15 @@ > +/* { dg-do compile } */ > +/* { dg-prune-output "compilation terminated" } */ > + > +#include > + > +#pragma GCC target "+nosve" > + > +int > +f () > +{ > + char a[12]; > + __SVInt8_t freq; /* { dg-error {SVE type '__SVInt8_t' used without SVE ISA enabled} } */ > + return __builtin_bcmp (&freq, &freq, 10); > +} > +