https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65752
Chung-Kil Hur <gil.hur at sf dot snu.ac.kr> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |gil.hur at sf dot snu.ac.kr --- Comment #13 from Chung-Kil Hur <gil.hur at sf dot snu.ac.kr> --- Hi, I have the following modified code. #include <stdio.h> #include <stdint.h> #include <limits.h> int main() { int x = 0, *p = 0; uintptr_t i; uintptr_t j = (uintptr_t) &x; uintptr_t k = j+j; uintptr_t l = 2*j - j - j; for (i = j+j-k+l; ; i++) { if (i == (uintptr_t)&x) { p = (int*)i; break; } } *p = 15; printf("%d\n", x); } This example still prints out "0" instead of "15". In this example, it seems that the integer "j+j-k+l" has no provenance. It is unclear to me how the provenance is calculated. Is there any concrete rule for calculating provenance?