Nvc 21.5 generates incorrect code on aarch64 at -O2

“res” is uninitialized so may contain garbage values. To fix, set it to zero.

% cat reduce.c
#include <stdio.h>

#define N 10

double reduce(double * a, int n) {
    double res=0.0;
    for (int i=0; i< n; i++)
        res += a[i];
    return res;
}

int main(int argc, char *argv[]) {
   double a[N];
   int i;
   for (i=0; i<N; i++) {
       a[i] = i;
   }
   printf("%f\n", reduce(a, N));
   return 0;
}
% nvc -O2 reduce.c ; a.out
45.000000
1 Like