------- Comment #5 from jakub at gcc dot gnu dot org 2010-03-17 16:36 ------- var-tracking expects that if frame_pointer_rtx (resp. arg_pointer_rtx, depending on whether FRAME_POINTER_CFA_OFFSET or ARG_POINTER_CFA_OFFSET is defined) is said to be eliminated (to stack_pointer_rtx in case of !frame_pointer_needed), then it is actually eliminated. Apparently that's not the case on PA, which happily uses both %r3 and %r30 in the code. I guess --- var-tracking.c.jj22010-03-17 15:29:42.000000000 +0100 +++ var-tracking.c2010-03-17 17:15:09.000000000 +0100 @@ -7942,6 +7942,11 @@ vt_init_cfa_base (void) #else cfa_base_rtx = arg_pointer_rtx; #endif + if (cfa_base_rtx == hard_frame_pointer_rtx) + { + cfa_base_rtx = NULL_RTX; + return; + } if (!MAY_HAVE_DEBUG_INSNS) return;
can fix this, that will rule out PA with its arg_pointer_rtx == frame_pointer_rtx == hard_frame_pointer_rtx. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43403