From: hjl Date: Wed, 30 Mar 2016 12:38:36 +0000 (+0000) Subject: Properly check conflict between DRAP register and __builtin_eh_return X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ecbebe63a9545bf3352c1ef6904d29337640d8b6;p=thirdparty%2Fgcc.git Properly check conflict between DRAP register and __builtin_eh_return Since %ecx can't be used for both DRAP register and __builtin_eh_return, we need to check if crtl->drap_reg uses %ecx before using %ecx for __builtin_eh_return. PR target/70439 * config/i386/i386.c (ix86_expand_epilogue): Properly check conflict between DRAP register and __builtin_eh_return. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234559 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1639704835b6..f700a25e1c0f 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -13463,9 +13463,11 @@ ix86_expand_epilogue (int style) rtx sa = EH_RETURN_STACKADJ_RTX; rtx_insn *insn; - /* Stack align doesn't work with eh_return. */ - gcc_assert (!stack_realign_drap); - /* Neither does regparm nested functions. */ + /* %ecx can't be used for both DRAP register and eh_return. */ + if (crtl->drap_reg) + gcc_assert (REGNO (crtl->drap_reg) != CX_REG); + + /* regparm nested functions don't work with eh_return. */ gcc_assert (!ix86_static_chain_on_stack); if (frame_pointer_needed)