https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98846
Bug ID: 98846 Summary: Spurious -Wregister warning Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: programmerjake at gmail dot com Target Milestone: --- In: https://gcc.godbolt.org/z/49xoKP With the following code: template <typename T = void> int template_get_edx() { register int edx asm("edx"); asm("movl $1234, %%edx\n\t# reg=%0" : "=r"(edx)); return edx; } template int template_get_edx<void>(); With: -O -Wall -std=c++17 produces: <source>: In instantiation of 'int template_get_edx() [with T = void]': <source>:8:37: required from here <source>:3:18: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister] 3 | register int edx asm("edx"); I think that warning is spurious because the `register` keyword is required for clang to not ignore the asm("edx").