http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57823
--- Comment #3 from vincenzo Innocente <vincenzo.innocente at cern dot ch> --- indeed float * bar3() { const float * a = (float*) malloc(4*128); const float * b = (float*) malloc(4*128); float * c = (float*) malloc(4*128); a = (const float*)__builtin_assume_aligned (a, 16, 0); b = (const float*)__builtin_assume_aligned (b, 16, 0); c = (float*)__builtin_assume_aligned (c, 16, 0); for (int iat=0; iat<128; ++iat) c[iat] = a[iat]+b[iat]; return c; } produces no aliases