https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116789
Bug ID: 116789
Summary: Internal compiler error for non-type template
parameter to alias template inside macro
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: aslobodkins at mail dot smu.edu
Target Milestone: ---
I get the following error on all versions of gcc13 and gcc14 I have tried so
far(includes gcc-14.1 and gcc-14.2):
In file included from ../src/Expr/array_expr1D.hpp:9,
from ../src/strict_lib.hpp:8,
from test.hpp:6,
from fixed_array.cpp:8:
../src/Expr/../derived1D.hpp: In substitution of ‘template<class T,
slib::ImplicitIntStatic sz> requires Builtin<T> using slib::FixedArray1D =
slib::Derived1D<slib::FixedArrayBase1D<T, ((const slib::ImplicitIntStatic)N)> >
[with slib::ImplicitIntStatic sz = T]’:
fixed_array.cpp:64:4: required from here
../src/Expr/../derived1D.hpp:994:7: internal compiler error: Segmentation fault
994 | using FixedArray1D = Derived1D<FixedArrayBase1D<T, sz>>;
| ^~~~~~~~~~~~
The error occurs in the following scenario:
constexpr FixedArray1D<T, 5> A;
REQUIRE_STRICT_THROW((FixedArray1D<T, A.size_m1()>(A.begin(), A.end())));
where REQUIRE_STRICT_THROW is a macro that tests error handling and triggers
assertion if the passed expression does not throw.
It is important to point out that this error does not occur if one calls
standard size() function:
REQUIRE_STRICT_THROW((FixedArray1D<T, A.size()>(A.begin(), A.end())));
In addition, removing REQUIRE_STRICT_THROW gets rid of the issue as well:
FixedArray1D<T, A.size_m1()>(A.begin(), A.end());
Finally, replacing FixedArray1D alias with Derived1D<FixedArrayBase1D> also
works fine:
REQUIRE_STRICT_THROW((Derived1D<FixedArrayBase1D<T, A.size_m1()>>(A.begin(),
A.end())));