https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90309
--- Comment #5 from Philipp Lucas <philipp.lucas at siemens dot com> --- (In reply to Marek Polacek from comment #4) > ...but first it'd be nice to find out *why* we're shifting by -4 and how > that can be. It's not shifting /by/ -4, the -4 is shifted by 1. The ARM ABI says in ยง3.2.1 "This ABI specifies that adj contains /twice the this adjustment/, plus 1 if the member function is virtual.", and the shift seems to be the choice of implementation for the "twice". As a layman's guess, replacing the shift by a multiplication with 2 should fix it, right?