Compile following simple class with -O2 -Os -mthumb -fpic class base { virtual ~base(); };
base::~base() { } The destructor of this class should do nothing, just return is enough. But gcc generats following codes for D1 version destructor: ldr r3, .L3 ldr r1, .L3+4 add r3, pc ldr r2, [r3, r1] add r2, r2, #8 str r2, [r0] bx lr .L3: .word _GLOBAL_OFFSET_TABLE_-(.LPIC0+4) .word _ZTV4base(GOT) -- Summary: Useless instructions in destructor Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: carrot at google dot com GCC build triplet: i686-linux GCC host triplet: i686-linux GCC target triplet: arm-eabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40382