https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110531
--- Comment #7 from Hao Liu <hliu at amperecomputing dot com> --- > int foo() { > bool a = true; > bool b; > if (a || b) > return 1; > b = true; > return 0; > } > > still has the warning, it looks something can be improved (guess we prefer > not to emit warning). Your case is wrong, you should initialize "b" and there will be no warning. > __attribute__((noipa)) int foo(int *a) { *a = 1; return 1;} > > int test(){ > #ifdef AINIT > int a = 0; > #else > int a; > #endif > int b = foo(&a); > return b; > } This case doesn't have problem. If "foo" uses "a" directly, the result is undefined behavior, which causes both correctness and performance issues.