79186907

Date: 2024-11-13 22:55:35
Score: 1
Natty:
Report link

You must use the builtins __builtin_assume

#include <cassert>

bool no_alias(int* X, int* Y);

void foo(int *A, int *B, int *N) {
    int* p = N;
    if (no_alias(A, N)) {
        __builtin_assume(p != A);
    }
    for (int k = 0; k < *p; k++) {
        A[k] += B[k];
    }
}

And maybe add the compilation option -fstrict-aliasing (gcc, strict-aliasing, and horror stories)

Reasons:
  • Probably link only (1):
  • Has code block (-0.5):
  • Low reputation (0.5):
Posted by: Asile34