https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101511
--- Comment #1 from David Binderman <dcb314 at hotmail dot com> --- Reduced C++ code seems to be: void __assert_fail(char *, char *, int, const char *) __attribute__((__noreturn__)); template <typename T> void test_uint() { long __trans_tmp_3, __trans_tmp_1; int Error; for (;;) { { unsigned long Tmp = -1; __trans_tmp_3 = Tmp - Tmp % 0; } Error += 0 == __trans_tmp_3 ? 0 : 1; !Error ? void() : __assert_fail("", "", 3, __PRETTY_FUNCTION__); T Tmp = -1; __trans_tmp_1 = Tmp - Tmp % 0; Error += 0 == __trans_tmp_1 ? 0 : 1; !Error ? void() : __assert_fail("", "", 7, __PRETTY_FUNCTION__); } } void test() { test_uint<unsigned long>(); }