https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100925
Bug ID: 100925 Summary: tree check fail in make_range_step, at fold-const.c:5061 Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: dcb314 at hotmail dot com Target Milestone: --- For this C++ code: struct QScopedPointerDeleter { static void cleanup(int *); }; class QScopedPointer { typedef int *QScopedPointer::*RestrictedBool; public: operator RestrictedBool() { return d ? nullptr : &QScopedPointer::d; } void reset() { if (d) QScopedPointerDeleter::cleanup(d); } int *d; }; class DOpenGLPaintDevicePrivate { public: QScopedPointer fbo; } DOpenGLPaintDeviceresize_d; void DOpenGLPaintDeviceresize() { if (DOpenGLPaintDeviceresize_d.fbo) DOpenGLPaintDeviceresize_d.fbo.reset(); } compiled with recent gcc trunk, does this: $ /home/dcb/gcc/results.20210605//bin/g++ -c -w -O1 bug722.cc 2>&1 | more during GIMPLE pass: reassoc bug722.cc: In function ‘void DOpenGLPaintDeviceresize()’: bug722.cc:19:6: internal compiler error: tree check: expected boolean_type or enumeral_type or integer_type, have offset_type in make_range_step, at fold-co nst.c:5061 19 | void DOpenGLPaintDeviceresize() { | ^~~~~~~~~~~~~~~~~~~~~~~~ 0x8a9565 tree_check_failed(tree_node const*, char const*, int, char const*, .. .) ../../trunk.git/gcc/tree.c:8684 0x7a0a73 any_integral_type_check(tree_node*, char const*, int, char const*) ../../trunk.git/gcc/tree.h:3617 0x7ad465 any_integral_type_check(tree_node*, char const*, int, char const*) ../../trunk.git/gcc/tree.h:3485 0x7ad465 make_range_step(unsigned int, tree_code, tree_node*, tree_node*, tree _node*, tree_node**, tree_node**, int*, bool*) ../../trunk.git/gcc/fold-const.c:5061 The problem first seems to occur sometime between date 20210527 and 20210604. Git hashes 6c67afaf524a5e0e and ad3f0ad4bafe3770. I will have my usual go at refining the range of the git hashes.