Ignore the previous comment. With -fstack-check and -mbackchain we have for trace 2 an incoming edge from trace 1 (fallthrough) where cur_trace->end_true_args_size == 48 and from further incoming edges as e.g. from trace 7 where cur_trace->end_true_args_size == 0 which is why the args_size is supposed to be undefined.
Interestingly, trace 2 resides in the function body whereas trace 7 resides in the epilogue, i.e., we have a jump from the epilogue into the function body:
Ignore the previous comment. With -fstack-check and -mbackchain we have for trace 2 an incoming edge from trace 1 (fallthrough) where cur_trace- >end_true_ args_size == 48 and from further incoming edges as e.g. from trace 7 where cur_trace- >end_true_ args_size == 0 which is why the args_size is supposed to be undefined.
Interestingly, trace 2 resides in the function body whereas trace 7 resides in the epilogue, i.e., we have a jump from the epilogue into the function body:
(note 597 810 634 NOTE_INSN_ PROLOGUE_ END)
(const_ int 8216 [0x2018]))) "libalog- 0.6.2/src/ alog-active_ logger. adb":244: 4 1481 {*la_64} list:REG_ ARGS_SIZE (const_int 48 [0x30]) EPILOGUE_ BEG) 0.6.2/src/ alog-active_ logger. adb":260: 0 discrim 10 1477 {*movdi_64} list:REG_ DEAD (reg/f:DI 6 %r6 [orig:79 saved_stack.186_50 ] [79])
(expr_ list:REG_ ARGS_SIZE (const_int 0 [0])
(nil) )))
...
(insn 635 677 566 (set (reg/f:DI 15 %r15)
(plus:DI (reg/f:DI 15 %r15)
(expr_
(nil)))
...
(code_label 48 573 49 152 (nil) [2 uses])
...
(note 673 768 599 NOTE_INSN_
...
(insn 159 163 160 (set (reg/f:DI 15 %r15)
(reg/f:DI 6 %r6 [orig:79 saved_stack.186_50 ] [79])) "libalog-
(expr_
...
(jump_insn 645 644 646 (set (pc)
(label_ref 48)) 2170 {*jump64}
(nil)
-> 48)
This is also the case when -fno-shrink-wrap is used.