https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57359
Alexander Cherepanov <ch3root at openwall dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ch3root at openwall dot com
--- Comment #12 from Alexander Cherepanov <ch3root at openwall dot com> ---
Still reproducible if the number of iterations is changed to 3.
I've also converted the testcase to allocated memory:
----------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
__attribute__((__noinline__,__noclone__))
void test(int *pi, long *pl, int k, int *pa)
{
for (int i = 0; i < 3; i++) {
pl[k] = // something that doesn't change but have to be calculated
*pa; // something that potentially can be changed by assignment to *pi
*pi = 0;
}
}
int main(void)
{
int *pi = malloc(10);
int a = 1;
test(pi, (void *)pi, 0, &a);
printf("%d\n", *pi);
}
----------------------------------------------------------------------
Results:
----------------------------------------------------------------------
$ gcc -std=c11 -pedantic -Wall -Wextra test.c && ./a.out
0
$ gcc -std=c11 -pedantic -Wall -Wextra -O3 test.c && ./a.out
1
----------------------------------------------------------------------
gcc version: gcc (GCC) 8.0.0 20171024 (experimental)