[Bug c++/65498] New: ICE in cxx_eval_call_expression when using __func__ inside dependent context
ldionne.2 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Mar 20 18:15:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65498
Bug ID: 65498
Summary: ICE in cxx_eval_call_expression when using __func__
inside dependent context
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ldionne.2 at gmail dot com
The following code triggers an ICE on GCC trunk:
------------------------------------------------------------------------------
#include <type_traits>
struct T;
template <typename, typename = void>
struct F { };
template <typename X>
struct F<X, std::enable_if_t<std::is_same<X, T>{}()>> {
template <typename MakeDependent>
F(MakeDependent) {
auto ICE_HERE = __func__;
(void)ICE_HERE; // avoid -Wunused-variable
}
};
int main() {
F<T>{1};
}
------------------------------------------------------------------------------
Example run:
------------------------------------------------------------------------------
› ~/code/gcc5/bin/g++ -std=c++1y ~/code/hana/test/worksheet.cpp
/Users/ldionne/code/hana/test/worksheet.cpp: In substitution of ‘template<bool
_Cond, class _Tp> using enable_if_t = typename std::enable_if::type [with bool
_Cond = std::is_same<T, T>{}(); _Tp = void]’:
/Users/ldionne/code/hana/test/worksheet.cpp:1411:25: required from here
/Users/ldionne/code/hana/test/worksheet.cpp:1408:50: in constexpr expansion
of ‘((std::integral_constant<bool, true>*)(& std::is_same<T,
T>()))->std::integral_constant<_Tp, __v>::operator()<bool, true>()’
/Users/ldionne/code/hana/test/worksheet.cpp:1411:25: internal compiler error:
in cxx_eval_call_expression, at cp/constexpr.c:1358
auto ICE_HERE = __func__;
^
/Users/ldionne/code/hana/test/worksheet.cpp:1411:25: internal compiler error:
Abort trap: 6
g++: internal compiler error: Abort trap: 6 (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
------------------------------------------------------------------------------
Note that using
std::is_same<X, T>::value
instead of
std::is_same<X, T>{}()
seems to fix the issue.
Regards,
Louis Dionne
More information about the Gcc-bugs
mailing list