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

            Bug ID: 69302
           Summary: Using bswap in template function with
                    -ftrack-macro-expansion=0 results in a false compiler
                    error
           Product: gcc
           Version: 5.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kholdstare0.0 at gmail dot com
  Target Milestone: ---

Here is the a minimal test.cpp:

        #include <byteswap.h>

        template <typename BLAH>
        unsigned int foo()
        {
                return bswap_32(0x00000FFF);
        }

        unsigned int bar()
        {
                return foo<int>();
        }

If the template is removed, everything compiles fine. The compilation command:

        g++ -std=c++1y -c -ftrack-macro-expansion=0 -Werror -Wall -Wextra
test.cpp -o test.o

If -ftrack-macro-expansion=0 is removed, everything compiles fine. The error
that results:

        main.cpp: In instantiation of 'unsigned int foo() [with BLAH = int]':
        main.cpp:11:18:   required from here
        main.cpp:6:9: error: address requested for '__x', which is declared
'register' [-Werror=extra]
          return bswap_32(0x00000FFF);
                         ^
        cc1plus: all warnings being treated as errors


This is eerily reminiscent of these bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57573
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60955

Reply via email to