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;

}

Reply via email to