https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101354

            Bug ID: 101354
           Summary: [11/12 regression] naked function mishandled - store
                    optimized away
           Product: gcc
           Version: 11.0
               URL: https://godbolt.org/z/4T4x8eb4f
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: inline-asm
          Assignee: unassigned at gcc dot gnu.org
          Reporter: 2-gnu at 0x2c dot org
  Target Milestone: ---

Stores are optimized away when a pointer is passed to a naked function.

Discovered in Nordic nRF5-SDK (17.0.2), which uses such a construct to
implement syscalls.

Minimal example:

__attribute__((naked))
//// switching to O0 will make it work
//__attribute__((optimize("O0")))
static void extfun_ptr(int *a) {
    __asm volatile("");
}

void fun() {
    int v;
    v = 1;
    extfun_ptr(&v); // &v is never initialized
}

Reply via email to