/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-cddce" } */
/* LLVM LOCAL test not applicable */
/* { dg-require-fdump "" } */
      
extern void abort (void);

struct rtx_def;
typedef struct rtx_def *rtx;
enum rtx_code
{
  UNKNOWN,
  CODE_LABEL,
  NOTE,
  LAST_AND_UNUSED_RTX_CODE = 256
};
typedef union rtunion_def rtunion;
struct rtx_def
{
  enum rtx_code code:16;
};
void
delete_dead_jumptables ()
{
  rtx insn, next;
  if (insn->code == CODE_LABEL)
    {
      rtx const _rtx = insn;
      if (_rtx->code != CODE_LABEL && _rtx->code != NOTE)
	abort ();
    }
  ;
}

/* There should be no loads of ->code.  If any exist, then we failed to
   optimize away all the IF statements and the statements feeding
   their conditions.  */
/* { dg-final { scan-tree-dump-times "->code" 0 "cddce"} } */
   
/* There should be no IF statements.  */
/* { dg-final { scan-tree-dump-times "if " 0 "cddce"} } */

/* { dg-final { cleanup-tree-dump "cddce" } } */
