# RUN: llvm-mc -filetype=obj %S/Inputs/unused-inlined-params.s \ # RUN: -triple x86_64-pc-linux -o %t.o # RUN: %lldb %t.o -s %s -o exit | FileCheck %s # In this test we verify that inlined functions still mention # all their parameters in `frame variable`, even when those # parameters were completely optimized away from the concrete # instance of the inlined function in the debug info. # The debugger should look up the parameters in the abstract # origin of the concrete instance. # Let us check that unused parameters of an inlined function are listed # at the inlined function entry. image lookup -v -s break_at_inlined_f_in_main # CHECK-LABEL: image lookup -v -s break_at_inlined_f_in_main # CHECK: name = "unused1", type = "void *", valid ranges = , location = # CHECK: name = "used", type = "int", valid ranges = , location = [0x0000000000000011, 0x0000000000000014) -> DW_OP_consts +42 # CHECK: name = "unused2", type = "int", valid ranges = , location = # CHECK: name = "partial", type = "int", valid ranges = , location = [0x0000000000000011, 0x0000000000000019) -> DW_OP_reg4 RSI # CHECK: name = "unused3", type = "int", valid ranges = , location = # Show variables outsid of the live range of the 'partial' parameter # and verify that the output is as expected. image lookup -v -s break_at_inlined_f_in_main_between_printfs # CHECK-LABEL: image lookup -v -s break_at_inlined_f_in_main_between_printfs # CHECK: name = "unused1", type = "void *", valid ranges = , location = # CHECK: name = "used", type = "int", valid ranges = , location = [0x0000000000000014, 0x000000000000001e) -> DW_OP_reg3 RBX # CHECK: name = "unused2", type = "int", valid ranges = , location = # Note: image lookup does not show variables outside of their # location, so |partial| is missing here. # CHECK-NOT: partial # CHECK: name = "unused3", type = "int", valid ranges = , location = # Check that we show parameters even if all of them are compiled away. image lookup -v -s break_at_inlined_g_in_main # CHECK-LABEL: image lookup -v -s break_at_inlined_g_in_main # CHECK: name = "unused", type = "int", valid ranges = , location = # Check that even the other inlined instance of f displays the correct # parameters. image lookup -v -s break_at_inlined_f_in_other # CHECK-LABEL: image lookup -v -s break_at_inlined_f_in_other # CHECK: name = "unused1", type = "void *", valid ranges = , location = # CHECK: name = "used", type = "int", valid ranges = , location = [0x0000000000000001, 0x000000000000000b) -> DW_OP_consts +1 # CHECK: name = "unused2", type = "int", valid ranges = , location = # CHECK: name = "partial", type = "int", valid ranges = , location = [0x0000000000000001, 0x0000000000000006) -> DW_OP_consts +2 # CHECK: name = "unused3", type = "int", valid ranges = , location =