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

            Bug ID: 94080
           Summary: -mabi=ieeelongdouble and -mfloat128 cause libstc++
                    header breakage
           Product: gcc
           Version: 9.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: murphyp at linux dot vnet.ibm.com
  Target Milestone: ---
            Target: powerpc64le

When both -mfloat128 and -mabi=ieeelongdouble are used, various libstc++
headers break.  I suspect more headers have similar problems.

I.e "#include <algorithm>":

cc1plus: warning: Using IEEE extended precision long double [-Wpsabi]
In file included from
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/bits/move.h:55,
                 from
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/bits/stl_pair.h:59,
                 from
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/utility:70,
                 from
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/algorithm:60,
                 from foo.c:1:
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/type_traits:346:12:
error: redefinition of ‘struct std::__is_floating_point_helper<long double>’
  346 |     struct __is_floating_point_helper<__float128>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/type_traits:341:12:
note: previous definition of ‘struct std::__is_floating_point_helper<long
double>’
  341 |     struct __is_floating_point_helper<long double>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/cstdlib:77,
                 from
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/bits/stl_algo.h:59,
                 from
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/algorithm:62,
                 from foo.c:1:
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/bits/std_abs.h:103:3:
error: redefinition of ‘constexpr long double std::abs(long double)’
  103 |   abs(__float128 __x)
      |   ^~~
/home/murp/glibc-scratch/install/compilers/powerpc64le-linux-gnu/powerpc64le-glibc-linux-gnu/include/c++/9.2.1/bits/std_abs.h:79:3:
note: ‘constexpr long double std::abs(long double)’ previously defined here
   79 |   abs(long double __x)
      |   ^~~

Reply via email to