Unmodified formals can not point to local variables. It is NOT treated so in GCC:
Example: void bar(int* ); int foo(int* p, int *q) { int local, i; bar(&local); for(i = 0; i < 100; i++) { *q += local; // local, *q not hoisted, *q = not sinked } return local; } -- Summary: Conservative aliasing related unmodified formals Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: xinliangli at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35359