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

            Bug ID: 112866
           Summary: error: compound literal qualified by address-space
                    qualifier
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gjl at gcc dot gnu.org
  Target Milestone: ---

Suppose we want to define an array of pointers to some address-space, like in:

#define FSTR(X) ((const __flash char[]) { X })

const __flash char *p[] = { FSTR("cat"), FSTR("dogs") }; // OK

This works as expected, but not when done in a function:


#define FSTR(X) ((const __flash char[]) { X })

const __flash char *p[] = { FSTR("cat"), FSTR("dogs") }; // OK

void func (void)
{
    static const __flash char *q1[] = { FSTR("cat"), FSTR("dogs") }; // Error
    const __flash char *q2[] = { FSTR("cat"), FSTR("dogs") }; // Error
}

addr-space.c: In function 'func':
addr-space.c:7:5: error: compound literal qualified by address-space qualifier
    7 |     static const __flash char *q1[] = { FSTR("cat"), FSTR("dogs") }; //
Error
      |     ^~~~~~
addr-space.c:7:5: error: compound literal qualified by address-space qualifier
addr-space.c:8:5: error: compound literal qualified by address-space qualifier
    8 |     const __flash char *q2[] = { FSTR("cat"), FSTR("dogs") }; // Error
      |     ^~~~~
addr-space.c:8:5: error: compound literal qualified by address-space qualifier

Compile with avr-gcc addr-space.c -S

Target: avr
Configured with: ../../source/gcc-master/configure --target=avr --disable-nls
--with-dwarf2 --with-gnu-as --with-gnu-ld --disable-shared
--enable-checking=release --enable-languages=c,c++ 
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 14.0.0 20231205 (experimental) (GCC)

Reply via email to