https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88100
Bug ID: 88100 Summary: no warning reported when value for vec_splat_{su}{8,16} would overflow Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: pc at gcc dot gnu.org Target Milestone: --- Created attachment 45036 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45036&action=edit test case $ cat bug.c #include <altivec.h> void foo() { signed char cs0 = 0x100; unsigned char cu0= 0x100; signed short ss0 = 0x10000; unsigned short su0= 0x10000; signed int is0 = 0x100000000; unsigned int iu0= 0x100000000; vector signed char v8 = vec_splat_s8(256); vector unsigned char v11 = vec_splat_u8(256); vector signed short v12 = vec_splat_s16(0x10000); vector unsigned short v13 = vec_splat_u16(0x10000); vector signed int v14 = vec_splat_s32(0x100000000); vector unsigned int v15 = vec_splat_u32(0x100000000); } $ gcc -c bug.c bug.c: In function ‘foo’: bug.c:3:21: warning: overflow in conversion from ‘int’ to ‘signed char’ changes value from ‘256’ to ‘0’ [-Woverflow] signed char cs0 = 0x100; ^~~~~ bug.c:4:22: warning: unsigned conversion from ‘int’ to ‘unsigned char’ changes value from ‘256’ to ‘0’ [-Woverflow] unsigned char cu0= 0x100; ^~~~~ bug.c:5:22: warning: overflow in conversion from ‘int’ to ‘short int’ changes value from ‘65536’ to ‘0’ [-Woverflow] signed short ss0 = 0x10000; ^~~~~~~ bug.c:6:23: warning: unsigned conversion from ‘int’ to ‘short unsigned int’ changes value from ‘65536’ to ‘0’ [-Woverflow] unsigned short su0= 0x10000; ^~~~~~~ bug.c:7:20: warning: overflow in conversion from ‘long int’ to ‘int’ changes value from ‘4294967296’ to ‘0’ [-Woverflow] signed int is0 = 0x100000000; ^~~~~~~~~~~ bug.c:8:21: warning: unsigned conversion from ‘long int’ to ‘unsigned int’ changes value from ‘4294967296’ to ‘0’ [-Woverflow] unsigned int iu0= 0x100000000; ^~~~~~~~~~~ bug.c:13:27: warning: overflow in conversion from ‘long int’ to ‘int’ changes value from ‘4294967296’ to ‘0’ [-Woverflow] vector signed int v14 = vec_splat_s32(0x100000000); ^~~~~~~~~~~~~ bug.c:14:29: warning: overflow in conversion from ‘long int’ to ‘int’ changes value from ‘4294967296’ to ‘0’ [-Woverflow] vector unsigned int v15 = vec_splat_u32(0x100000000); ^~~~~~~~~~~~~ -- Note: no warnings for the vector char and vector short types.