https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121424
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note -dA is very useful for reading dwarf output in the assembly instead of needing a seperate program do the do the dumping. e.g. .uleb128 0x9 # (DIE (0x8c) DW_TAG_inlined_subroutine) .long 0xdb # DW_AT_abstract_origin .quad .LBI4 # DW_AT_entry_pc .byte .LVU2 # DW_AT_GNU_entry_view .long .LLRL1 # DW_AT_ranges .byte 0x1 # DW_AT_call_file (/app/example.cpp) .byte 0xf # DW_AT_call_line .byte 0x7 # DW_AT_call_column ... .LLRL1: .byte 0x4 # DW_RLE_offset_pair (*.LLRL1) .uleb128 .LBB4-.Ltext0 # Range begin address (*.LLRL1) .uleb128 .LBE4-.Ltext0 # Range end address (*.LLRL1) .byte 0x4 # DW_RLE_offset_pair (*.LLRL1) .uleb128 .LBB6-.Ltext0 # Range begin address (*.LLRL1) .uleb128 .LBE6-.Ltext0 # Range end address (*.LLRL1) .byte 0 # DW_RLE_end_of_list (*.LLRL1) This is how I noticed -O2 was working because I tried -O2 first. (the above is from -O1).