https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96795
Bug ID: 96795 Summary: MVE: issue with polymorphism and integer promotion Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: avieira at gcc dot gnu.org Target Milestone: --- An example of this issue can be observed when trying to compile: #include <arm_mve.h> uint16x8_t foo (uint16x8_t a, int16_t b) { return vaddq (a, (b<<3)); } This will lead to an __ARM_undef being selected. I believe this is because __ARM_mve_coerce only accepts one type for scalar parameters and should have accepted the same range of types for scalar as is done in __ARM_mve_typeid. A workaround for this is to cast (b<<3) to uint16_t.