https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121479
Bug ID: 121479 Summary: The return value of __builtin_constant_p() is inconsistent at different optimization levels Product: gcc Version: 16.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: njuwy at smail dot nju.edu.cn Target Milestone: --- gcc version: gcc version 16.0.0 20250804 (experimental) (GCC) Compiler Explorer: https://godbolt.org/z/Gnxfvqvza src: #include <math.h> #include <errno.h> #include <stdlib.h> #include <stdio.h> int foo(double *data, size_t len) { int status = 0; double sum = 0.0; size_t i = 0; while (i < len) { double val = data[i]; if (isinf(val) || isnan(val)) { errno = EDOM; status = -2; break; } sum += fabs(val); i++; } printf("In foo, __builtin_constant_p(len) = %d\n", __builtin_constant_p(len)); return status; } int main(void) { double values[] = { -1.5, 2.0, -3.25 }; size_t len = sizeof(values) / sizeof(values[0]); int result = foo(values, len); printf("In main, __builtin_constant_p(len) = %d\n", __builtin_constant_p(len)); return abs(result); } issue: at -O0, -O1, -Os, -O2, -O3 the results of __builtin_constant_p(len) in foo() are: 0,0,0,1,1 the results of __builtin_constant_p(len) in main() are: 0,1,1,1,1 Is this a expected bahavior or miscompilation bug?