This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/37042] New: Strict-aliasing warnings are printed for _mm_load_si128, even though __m128i is __attribute__((__may_alias__)).
- From: "lennox at cs dot columbia dot edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 6 Aug 2008 21:29:36 -0000
- Subject: [Bug c/37042] New: Strict-aliasing warnings are printed for _mm_load_si128, even though __m128i is __attribute__((__may_alias__)).
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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