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;
}