The Intel SSE intrinsic function _mm_load_si128 prints a warning when the data being loaded from is actually an array of int16_t, even though its argument (__m128i*) is declared with __attribute__((__may_alias__)).
$ cat alias-warn-emmintrin.c #include <emmintrin.h> #include <stdint.h> static const int16_t __attribute__((__aligned__(16))) tbl[8] = { 1, 2, 3, 4, 5, 6, 7, 8}; __m128i get_vec(void) { __m128i ret; ret = _mm_load_si128((__m128i *)tbl); return ret; } $ ~/GCC/bin/gcc-4.3 -O2 -Wall -msse2 -c alias-warn-emmintrin.c alias-warn-emmintrin.c: In function get_vec: alias-warn-emmintrin.c:12: warning: likely type-punning may break strict-aliasing rules: object *{unknown} of main type long long int __vector__ is referenced at or around /mnt/int_drive/jonathan/GCC/bin/../lib/gcc/i686-pc-linux-gnu/4.3.2/include/emmintrin.h:681 and may be aliased to object tbl of main type short int which is referenced at or around alias-warn-emmintrin.c:12. $ ~/GCC/bin/gcc-4.3 -v -O2 -Wall -msse2 -c alias-warn-emmintrin.c Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../gcc-4.3-20080731/configure --enable-threads=posix --prefix=/home/jonathan/GCC --with-local-prefix=/usr/local --enable-languages=c,c++,objc,fortran,obj-c++,java --enable-checking=release --enable-ssp --disable-libssp --disable-libgcj --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --program-suffix=-4.3 --enable-version-specific-runtime-libs --without-system-libunwind --with-cpu=generic Thread model: posix gcc version 4.3.2 20080731 (prerelease) (GCC) COLLECT_GCC_OPTIONS='-v' '-O2' '-Wall' '-msse2' '-c' '-mtune=generic' /mnt/int_drive/jonathan/GCC/bin/../libexec/gcc/i686-pc-linux-gnu/4.3.2/cc1 -quiet -v -iprefix /mnt/int_drive/jonathan/GCC/bin/../lib/gcc/i686-pc-linux-gnu/4.3.2/ alias-warn-emmintrin.c -quiet -dumpbase alias-warn-emmintrin.c -msse2 -mtune=generic -auxbase alias-warn-emmintrin -O2 -Wall -version -o /tmp/ccKGNLjp.s ignoring nonexistent directory "/mnt/int_drive/jonathan/GCC/bin/../lib/gcc/i686-pc-linux-gnu/4.3.2/../../../../i686-pc-linux-gnu/include" ignoring duplicate directory "/mnt/int_drive/jonathan/GCC/bin/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.3.2/include" ignoring duplicate directory "/mnt/int_drive/jonathan/GCC/bin/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.3.2/include-fixed" ignoring nonexistent directory "/mnt/int_drive/jonathan/GCC/bin/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.3.2/../../../../i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /mnt/int_drive/jonathan/GCC/bin/../lib/gcc/i686-pc-linux-gnu/4.3.2/include /mnt/int_drive/jonathan/GCC/bin/../lib/gcc/i686-pc-linux-gnu/4.3.2/include-fixed /usr/local/include /mnt/int_drive/jonathan/GCC/bin/../lib/gcc/../../include /usr/include End of search list. GNU C (GCC) version 4.3.2 20080731 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 4.3.2 20080731 (prerelease), GMP version 4.2.1, MPFR version 2.2.1. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 3f9a15ebf1f37358d0142d31f7849434 alias-warn-emmintrin.c: In function get_vec: alias-warn-emmintrin.c:12: warning: likely type-punning may break strict-aliasing rules: object *{unknown} of main type long long int __vector__ is referenced at or around /mnt/int_drive/jonathan/GCC/bin/../lib/gcc/i686-pc-linux-gnu/4.3.2/include/emmintrin.h:681 and may be aliased to object tbl of main type short int which is referenced at or around alias-warn-emmintrin.c:12. COLLECT_GCC_OPTIONS='-v' '-O2' '-Wall' '-msse2' '-c' '-mtune=generic' as -V -Qy -o alias-warn-emmintrin.o /tmp/ccKGNLjp.s GNU assembler version 2.17.50 (i586-suse-linux) using BFD version (GNU Binutils) 2.17.50.20070726-14 (SUSE Linux) COMPILER_PATH=/mnt/int_drive/jonathan/GCC/bin/../libexec/gcc/i686-pc-linux-gnu/4.3.2/:/mnt/int_drive/jonathan/GCC/bin/../libexec/gcc/ LIBRARY_PATH=/mnt/int_drive/jonathan/GCC/bin/../lib/gcc/i686-pc-linux-gnu/4.3.2/:/mnt/int_drive/jonathan/GCC/bin/../lib/gcc/:/mnt/int_drive/jonathan/GCC/bin/../lib/gcc/i686-pc-linux-gnu/4.3.2/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-O2' '-Wall' '-msse2' '-c' '-mtune=generic' -- Summary: Strict-aliasing warnings are printed for _mm_load_si128, even though __m128i is __attribute__((__may_alias__)). Product: gcc Version: 4.3.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: lennox at cs dot columbia dot edu GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37042