This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Problem with reg-stack.c on x86-64


Try compiling the Ada RTS file a-nllcef.ads with -gnatpgn -O2.

You get an abort in compensate_edge at line 2595.

The reason is that there's an EH_ABNORMAL_CALL edge where at the source
st(1) is the only stack register live and there are none live at the
destination. The code assumes that either st(0) or st(0) and st(1) are
live.  But in this case, we have a call that sets (reg:XC st) but has
a REG_UNUSED note for (reg:XF st), so only st(1) is live.

I don't understand the reg-stack code well enough to see how to fix this,
nor do I know if the above register life information is valid for that edge.

Can somebody help with this?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]