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

            Bug ID: 115740
           Summary: gcc-14.1.1: __glibcxx_assert_fail const-evaluation
                    breaks clang/hip device code
           Product: gcc
           Version: 14.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lockalsash at gmail dot com
  Target Milestone: ---

After introducing of call to std::__glibcxx_assert_fail() in
_GLIBCXX_HAVE_IS_CONSTANT_EVALUATED ifdef block, clang fails to compile some
code (found on pytorch)

gcc version 14.1.1 20240622 (Gentoo Hardened 14.1.1_p20240622 p2)

Breaking change:
https://github.com/gcc-mirror/gcc/commit/1395c573c523762957bde8c2a08832c5f4350815

-------------------------------------------------------------------

Error message:

In file included from <built-in>:1:
In file included from
/usr/lib/llvm/18/bin/../../../../lib/clang/18/include/__clang_hip_runtime_wrapper.h:145:
In file included from
/usr/lib/llvm/18/bin/../../../../lib/clang/18/include/cuda_wrappers/algorithm:55:
In file included from
/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/algorithm:61:
/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/stl_algo.h:3625:7:
error: reference to __host__ function '__glibcxx_assert_fail' in
      __host__ __device__ function
 3625 |       __glibcxx_assert(!(__hi < __lo));
      |       ^
/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/x86_64-pc-linux-gnu/bits/c++config.h:612:7:
note: expanded from macro '__glibcxx_assert'
  612 |         std::__glibcxx_assert_fail();                                  
\
      |              ^
/var/tmp/portage/sci-libs/caffe2-2.3.1/work/pytorch-2.3.1/aten/src/ATen/native/hip/IndexKernel.hip:254:21:
note: called by 'operator()'
  254 |       qvalue = std::clamp(qvalue, qmin, qmax);
      |                     ^
/var/tmp/portage/sci-libs/caffe2-2.3.1/work/pytorch-2.3.1/aten/src/ATen/native/hip/IndexKernel.hip:101:5:
note: called by 'operator()'
  101 |     f(out_data, in_data, offset);
      |     ^
/var/tmp/portage/sci-libs/caffe2-2.3.1/work/pytorch-2.3.1/aten/src/ATen/native/hip/IndexKernel.hip:36:7:
note: called by
      'index_elementwise_kernel<128, 4, (lambda at
/var/tmp/portage/sci-libs/caffe2-2.3.1/work/pytorch-2.3.1/aten/src/ATen/native/hip/IndexKernel.hip:85:62)>'
   36 |       f(idx);
      |       ^
/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/x86_64-pc-linux-gnu/bits/c++config.h:605:3:
note: '__glibcxx_assert_fail' declared here
  605 |   __glibcxx_assert_fail()
      |   ^

-------------------------------------------------------------------

How it can be fixed: by adding constexpr:

  __attribute__((__always_inline__,__visibility__("default")))
  _GLIBCXX_CONSTEXPR inline void
  __glibcxx_assert_fail()
  { }

-------------------------------------------------------------------

Why it exists in the first place: I don't know. c++config.h calls empty
function for some reason (maybe for setting debugger breakpoints?).

Reply via email to