http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57823
Bug ID: 57823 Summary: restrict qualifier non effective with pointer returned by new Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: vincenzo.innocente at cern dot ch I am sure this has been already discussed, not found a specific report though. below the code emitted for "add" is what expected, for "bar" gcc adds versioning for alias.. void add(const float *__restrict__ a, const float *__restrict__ b, float *__restrict__ c) { 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]; } inline void iadd(const float *__restrict__ a, const float *__restrict__ b, float *__restrict__ c) { 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]; } float * bar() { const float *__restrict__ a = new float[128]; const float *__restrict__ b = new float[128]; float *__restrict__ c = new float[128]; iadd(a,b,c); return c; }