Hi Jakub: Checked with SVE's implementation and seems right for RVV, so OK for trunk, thanks :)
On Wed, Apr 9, 2025 at 9:24 PM Jakub Jelinek <ja...@redhat.com> wrote: > > Hi! > > On Wed, Apr 09, 2025 at 02:38:01PM +0200, Mark Wielaard wrote: > > Unfortunately this seems to have broken the riscv bootstrap: > > https://builder.sourceware.org/buildbot/#/builders/337/builds/105 > > > > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: > > enumeration value ‘TCTX_OMP_MAP’ not handled in switch [-Werror=switch] > > 4730 | switch (context) > > | ^ > > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: > > enumeration value ‘TCTX_OMP_MAP_IMP_REF’ not handled in switch > > [-Werror=switch] > > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: > > enumeration value ‘TCTX_OMP_PRIVATE’ not handled in switch [-Werror=switch] > > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: > > enumeration value ‘TCTX_OMP_FIRSTPRIVATE’ not handled in switch > > [-Werror=switch] > > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: > > enumeration value ‘TCTX_OMP_DEVICE_ADDR’ not handled in switch > > [-Werror=switch] > > cc1plus: all warnings being treated as errors > > Indeed, riscv-vector-builtins.cc IMHO needs pretty much the same > changes as aarch64, just with s/SVE/RVV/g. > I've also left out default: break; so that it is caught next time > somebody adds further enumerators. > > Tested with compilation of x86_64-linux -> riscv64-linux cross, > ok for trunk? > > 2025-04-09 Jakub Jelinek <ja...@redhat.com> > > * config/riscv/riscv-vector-builtins.cc (verify_type_context): > Diagnose RVV types for a given OpenMP context. > > diff --git a/gcc/config/riscv/riscv-vector-builtins.cc > b/gcc/config/riscv/riscv-vector-builtins.cc > index d2fe849c693..61dcdabbb40 100644 > --- a/gcc/config/riscv/riscv-vector-builtins.cc > +++ b/gcc/config/riscv/riscv-vector-builtins.cc > @@ -4724,7 +4724,11 @@ bool > verify_type_context (location_t loc, type_context_kind context, const_tree > type, > bool silent_p) > { > - if (!sizeless_type_p (type)) > + const_tree tmp = type; > + if (omp_type_context (context) && POINTER_TYPE_P (type)) > + tmp = strip_pointer_types (tmp); > + > + if (!sizeless_type_p (tmp)) > return true; > > switch (context) > @@ -4796,6 +4800,34 @@ verify_type_context (location_t loc, type_context_kind > context, const_tree type, > error_at (loc, "capture by copy of RVV type %qT", type); > > return false; > + > + case TCTX_OMP_MAP: > + if (!silent_p) > + error_at (loc, "RVV type %qT not allowed in %<map%> clause", type); > + return false; > + > + case TCTX_OMP_MAP_IMP_REF: > + if (!silent_p) > + error ("cannot reference %qT object types in %<target%> region", > type); > + return false; > + > + case TCTX_OMP_PRIVATE: > + if (!silent_p) > + error_at (loc, "RVV type %qT not allowed in" > + " %<target%> %<private%> clause", type); > + return false; > + > + case TCTX_OMP_FIRSTPRIVATE: > + if (!silent_p) > + error_at (loc, "RVV type %qT not allowed in" > + " %<target%> %<firstprivate%> clause", type); > + return false; > + > + case TCTX_OMP_DEVICE_ADDR: > + if (!silent_p) > + error_at (loc, "RVV type %qT not allowed in" > + " %<target%> device clauses", type); > + return false; > } > > gcc_unreachable (); > > Jakub >