On Fri, May 23, 2025 at 10:12 AM Richard Biener <richard.guent...@gmail.com>
wrote:

>
>
> > Am 23.05.2025 um 17:06 schrieb Joel Sherrill via Gcc <gcc@gcc.gnu.org>:
> >
> > Hi
> >
> > In the SPARC port of RTEMS, there is a global variable assigned to a
> > register for performance reasons. This is the near decade old line of
> code:
> >
> > register struct Per_CPU_Control *_SPARC_Per_CPU_current __asm__( "g6" );
> >
> > Per https://gcc.gnu.org/onlinedocs/gcc/Global-Register-Variables.html,
> this
> > is still the correct way to accomplish this. But -pedantic and specifying
> > C17 result in this warning:
> >
> > ../../../cpukit/score/cpu/sparc/include/rtems/score/cpuimpl.h:230:17:
> > warning: file-scope declaration of '_SPARC_Per_CPU_current' specifies
> > 'register' [-Wpedantic]
> >  230 | register struct Per_CPU_Control *_SPARC_Per_CPU_current __asm__(
> > "g6" );
> >      |
> >
> > We do not want to move this pointer out of a register and the GCC docs
> > section cited above doesn't mention anything about the register keyword
> > being moved to reserved keyword in C17 and C++17 with undefined meaning.
> > The example in the GCC manual is similar to our use.
> >
> > Is there more current guidance on having a global register variable?
> Other
> > than disabling the pedantic warning around that one line, how should the
> > warning be addressed?
>
> Does it work by writing __extension__ before it?  This is a GNU extension,
> so complaining with -pedantic when compiling with -std=cXY as opposed to
> -std=gnuXY is what I would expect.
>

Adding __extension__ did work. Thanks!

Any idea if that's accepted by clang?

Do you think the GCC documentation on this should include this?

--Joel Sherrill

>
> Richard
>
> >
> > Thanks.
> >
> > --Joel Sherrill
>

Reply via email to