GTF_RET means that this flag is valid only for GTF_RET node, but this check was missed.
The issue was in collision between GTF_RET_MERGED and GTF_CALL_UNMANAGED.
GenTreePtr last = (block->bbTreeList != nullptr) ? block->bbTreeList->gtPrev : nullptr;
GenTreePtr ret = (last != nullptr) ? last->gtStmt.gtStmtExpr : nullptr;
- if ((ret != nullptr) && ((ret->gtFlags & GTF_RET_MERGED) != 0))
+ if ((ret != nullptr) && (ret->OperGet() == GT_RETURN) && ((ret->gtFlags & GTF_RET_MERGED) != 0))
{
// This return was generated during epilog merging, so leave it alone
}