Georg-Johann Lay wrote: > For the following 1-liner I get an error with current trunk r177267: > > const __pgm char * pallo = "pallo"; > > __pgm as a named address space qualifier. [snip] > Moreover, if a user writes a line like > const __pgm char * pallo = "pallo"; > he wants the string literal to be placed in the non-default address > space. There is no other way to express that except something like > const __pgm char * pallo = (const __pgm char*) "pallo"; > which doesn't work either and triggers > > pgm.c:1:1: error: initializer element is not constant > > with a tree dump similar to above.
This is pretty much working as expected. "pallo" is a string literal which (always) resides in the default address space. According to the named address space specification (TR 18037) there are no string literals in non-default address spaces ... The assignment above would therefore need to convert a pointer to the string literal in the default space to a pointer to the __pgm address space. This might be impossible (depending on whether __pgm encloses the generic space), and even if it is possible, it is not guaranteed that the conversion can be done as a constant expression at compile time. What I'd do to get a string placed into the __pgm space is to explicitly initialize an *array* in __pgm space, e.g. like so: const __pgm char pallo[] = "pallo"; This is defined to work according to TR 18037, and it does actually work for me on spu-elf. Bye, Ulrich -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE ulrich.weig...@de.ibm.com