Describe the issue
Summary
GCC 14.2.0 crashes with an internal compiler error while compiling a GoogleTest value-parameterized test on Debian AArch64.
The failure occurs during template instantiation in GoogleTest 1.18.0, specifically in:
testing::internal::CheckedDowncastToActualType()
called by:
ValuesInIteratorRangeGenerator::Iterator::Equals()
The same project and source code compile successfully in the following configurations:
GCC 14.2.0 on Ubuntu 24.04 AMD64 with GoogleTest 1.18.0
GCC 14.2.0 on Debian AArch64 with GoogleTest 1.17.0
The failure is reproducible only with the combination of:
GCC 14.2.0
Debian AArch64
GoogleTest 1.18.0
This appears to be an AArch64-specific GCC 14.2 compiler issue exposed by changes introduced in GoogleTest 1.18.0. GCC should report a normal diagnostic for invalid source code, if any, rather than terminate with a segmentation fault.
Reproduction matrix
GCC 14.2.0 | Ubuntu 24.04 | AMD64 | GoogleTest 1.18.0 | PASS
GCC 14.2.0 | Debian | ARM64 | GoogleTest 1.17.0 | PASS
GCC 14.2.0 | Debian | ARM64 | GoogleTest 1.18.0 | ICE
Affected parameter type
The GoogleTest parameter type involved in the failure is:
std::tuple<
signed char,
unsigned int,
std::filesystem::path,
std::filesystem::path
>
The compiler crashes while instantiating:
testing::internal::ValuesInIteratorRangeGenerator<
std::tuple<
signed char,
unsigned int,
std::filesystem::path,
std::filesystem::path
>
>::Iterator::Equals()
Steps to reproduce the problem
Minimal reproduction candidate
The following test case approximates the structure that triggers the issue:
#include <filesystem>
#include <tuple>
#include <gtest/gtest.h>
using Param = std::tuple<
signed char,
unsigned int,
std::filesystem::path,
std::filesystem::path
>;
class ReproTest : public testing::TestWithParam<Param> {};
TEST_P(ReproTest, CompilesParameterizedTest) {
EXPECT_TRUE(true);
}
INSTANTIATE_TEST_SUITE_P(
Repro,
ReproTest,
testing::Values(
Param{
1,
2U,
std::filesystem::path{"input.bin"},
std::filesystem::path{"output.bin"}
}
)
);
Example compilation command:
g++ \
-std=c++20 \
-O3 \
-isystem /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include \
-L /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/lib \
-flto=auto \
-fno-fat-lto-objects \
report.cpp \
-lgtest \
-lgtest_main \
-pthread \
-o report
Failed result:
gene@raspberrypi:~/proj/gtest_failed $ g++
-std=c++20
-O3
-isystem /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include
-L /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/lib
-flto=auto
-fno-fat-lto-objects
report.cpp
-lgtest
-lgtest_main
-pthread
-o report
In file included from /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/gtest-message.h:57,
from /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/gtest-assertion-result.h:46,
from /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/gtest.h:64,
from report.cpp:4:
/home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/internal/gtest-port.h: In instantiation of ‘Derived* testing::internal::CheckedDowncastToActualType(Base*) [with Derived = const ValuesInIteratorRangeGenerator<std::tuple<signed char, unsigned int, std::filesystem::__cxx11::path, std::filesystem::__cxx11::path> >::Iterator; Base = const ParamIteratorInterface<std::tuple<signed char, unsigned int, std::filesystem::__cxx11::path, std::filesystem::__cxx11::path> >]’:
/home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/internal/gtest-param-util.h:352:57: required from ‘bool testing::internal::ValuesInIteratorRangeGenerator::Iterator::Equals(const testing::internal::ParamIteratorInterface&) const [with T = std::tuple<signed char, unsigned int, std::filesystem::__cxx11::path, std::filesystem::_cxx11::path>]’
352 | CheckedDowncastToActualType(&other)->iterator;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
/home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/internal/gtest-param-util.h:345:10: required from here
345 | bool Equals(const ParamIteratorInterface& other) const override {
| ^~~~~~
/home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/internal/gtest-port.h:1171:10: internal compiler error: Segmentation fault
1171 | return static_cast<Derived*>(base);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
0xd5061f internal_error(char const*, ...)
???:0
0xe77ee3 comp_type_attributes(tree_node const*, tree_node const*)
???:0
0x114c523 perform_direct_initialization_if_possible(tree_node*, tree_node*, bool, int)
???:0
0x13a5123 build_static_cast(unsigned int, tree_node*, tree_node*, int)
???:0
0x12a455f tsubst_expr(tree_node*, tree_node*, int, tree_node*)
???:0
0x13c1f9f instantiate_decl(tree_node*, bool, bool)
???:0
0xf762a7 instantiate_pending_templates(int)
???:0
0xf6b497 c_parse_final_cleanups()
???:0
0x178a953 c_common_parse_file()
???:0
Please submit a full bug report, with preprocessed source (by using -freport-bug).
Please include the complete backtrace with any bug report.
See file:///usr/share/doc/gcc-14/README.Bugs for instructions.
What version of GoogleTest are you using?
Installed gtest package
gtest/1.18.0
revisions
e2507fc4efe2ec9e2db9e5c91eefab9f (2026-08-11 11:14:07 UTC)
packages
919b3575c3d845dc9ef564f9dbf7b05101a8e69d
info
settings
arch: armv8
build_type: Release
compiler: gcc
compiler.cppstd: 20
compiler.libcxx: libstdc++11
compiler.version: 14.2
os: Linux
options
build_gmock: True
disable_pthreads: False
fPIC: True
hide_symbols: False
shared: False
What operating system and version are you using?
Environment
Failing environment
Operating system: Debian Linux
Architecture: AArch64 / ARM64
Compiler: GCC 14.2.0
C++ standard: C++20
Build system: CMake with Ninja
Dependency manager: Conan 2
GoogleTest version: 1.18.0
Build type: Release
Passing configurations
Configuration 1
Operating system: Ubuntu 24.04
Architecture: AMD64 / x86_64
Compiler: GCC 14.2.0
GoogleTest version: 1.18.0
Result: PASS
Configuration 2
Operating system: Debian Linux
Architecture: AArch64 / ARM64
Compiler: GCC 14.2.0
GoogleTest version: 1.17.0
Result: PASS
What compiler and version are you using?
The same as before.
What build system are you using?
The same as before.
Additional context
No response
Describe the issue
Summary
GCC 14.2.0 crashes with an internal compiler error while compiling a GoogleTest value-parameterized test on Debian AArch64.
The failure occurs during template instantiation in GoogleTest 1.18.0, specifically in:
called by:
The same project and source code compile successfully in the following configurations:
GCC 14.2.0 on Ubuntu 24.04 AMD64 with GoogleTest 1.18.0
GCC 14.2.0 on Debian AArch64 with GoogleTest 1.17.0
The failure is reproducible only with the combination of:
GCC 14.2.0
Debian AArch64
GoogleTest 1.18.0
This appears to be an AArch64-specific GCC 14.2 compiler issue exposed by changes introduced in GoogleTest 1.18.0. GCC should report a normal diagnostic for invalid source code, if any, rather than terminate with a segmentation fault.
Reproduction matrix
Affected parameter type
The GoogleTest parameter type involved in the failure is:
The compiler crashes while instantiating:
Steps to reproduce the problem
Minimal reproduction candidate
The following test case approximates the structure that triggers the issue:
Example compilation command:
Failed result:
gene@raspberrypi:~/proj/gtest_failed $ g++
-std=c++20
-O3
-isystem /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include
-L /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/lib
-flto=auto
-fno-fat-lto-objects
report.cpp
-lgtest
-lgtest_main
-pthread
-o report
In file included from /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/gtest-message.h:57,
from /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/gtest-assertion-result.h:46,
from /home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/gtest.h:64,
from report.cpp:4:
/home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/internal/gtest-port.h: In instantiation of ‘Derived* testing::internal::CheckedDowncastToActualType(Base*) [with Derived = const ValuesInIteratorRangeGenerator<std::tuple<signed char, unsigned int, std::filesystem::__cxx11::path, std::filesystem::__cxx11::path> >::Iterator; Base = const ParamIteratorInterface<std::tuple<signed char, unsigned int, std::filesystem::__cxx11::path, std::filesystem::__cxx11::path> >]’:
/home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/internal/gtest-param-util.h:352:57: required from ‘bool testing::internal::ValuesInIteratorRangeGenerator::Iterator::Equals(const testing::internal::ParamIteratorInterface&) const [with T = std::tuple<signed char, unsigned int, std::filesystem::__cxx11::path, std::filesystem::_cxx11::path>]’
352 | CheckedDowncastToActualType(&other)->iterator;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
/home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/internal/gtest-param-util.h:345:10: required from here
345 | bool Equals(const ParamIteratorInterface& other) const override {
| ^~~~~~
/home/gene/.conan2/p/b/gtestc6cac63e9157e/p/include/gtest/internal/gtest-port.h:1171:10: internal compiler error: Segmentation fault
1171 | return static_cast<Derived*>(base);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
0xd5061f internal_error(char const*, ...)
???:0
0xe77ee3 comp_type_attributes(tree_node const*, tree_node const*)
???:0
0x114c523 perform_direct_initialization_if_possible(tree_node*, tree_node*, bool, int)
???:0
0x13a5123 build_static_cast(unsigned int, tree_node*, tree_node*, int)
???:0
0x12a455f tsubst_expr(tree_node*, tree_node*, int, tree_node*)
???:0
0x13c1f9f instantiate_decl(tree_node*, bool, bool)
???:0
0xf762a7 instantiate_pending_templates(int)
???:0
0xf6b497 c_parse_final_cleanups()
???:0
0x178a953 c_common_parse_file()
???:0
Please submit a full bug report, with preprocessed source (by using -freport-bug).
Please include the complete backtrace with any bug report.
See file:///usr/share/doc/gcc-14/README.Bugs for instructions.
What version of GoogleTest are you using?
Installed gtest package
What operating system and version are you using?
Environment
Failing environment
Passing configurations
Configuration 1
Configuration 2
What compiler and version are you using?
The same as before.
What build system are you using?
The same as before.
Additional context
No response