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

--- Comment #10 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
(In reply to Jason Merrill from comment #9)
> Created attachment 41711 [details]
> patch to error on progmem with dynamic init
> 
> Does this do what you had in mind?

Some situations are diagnosed, but already something like in this PR passes
your test und dynamically initializes __c in .rodata:

#define PROGMEM __attribute__((__progmem__))

// A string in flash
#define PSTR(str)                               \
  (__extension__({                              \
      static const char __c[]  = (str);         \
      &__c[0];                                  \
    }))

typedef struct { char id; const char *labl; } menu_t;

const menu_t* setup_Flash (void)
{
  static const menu_t menu PROGMEM = { 123, PSTR ("in Flash") };
  return &menu;
}

int main(){}

So either this should be diagnosed or deflate similar to

const menu_t* setup_RAM (void)
{
  static const menu_t menu PROGMEM = { 123, "in RAM" };
  return &menu;
}

Reply via email to