[Bug c/37042] New: Strict-aliasing warnings are printed for _mm_load_si128, even though __m128i is __attribute__((__may_alias__)).

lennox at cs dot columbia dot edu gcc-bugzilla@gcc.gnu.org
Wed Aug 6 21:30:00 GMT 2008


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



More information about the Gcc-bugs mailing list