50 lines
745 B
C
50 lines
745 B
C
/* { dg-do run } */
|
|
/* { dg-options "-O2" } */
|
|
/* { dg-options "-O2 -fno-short-enums -Wl,--no-enum-size-warning" {target arm_eabi} } */
|
|
|
|
/* This testcase got misoptimized by combine due to a wrong setting of
|
|
subst_low_luid in try_combine. */
|
|
|
|
enum rtx_code {
|
|
A, B
|
|
};
|
|
|
|
void abort (void);
|
|
|
|
struct rtx_def {
|
|
__extension__ enum rtx_code code:16;
|
|
};
|
|
typedef struct rtx_def *rtx;
|
|
|
|
void __attribute__((noinline))
|
|
add_constraint (unsigned char is_a)
|
|
{
|
|
if (is_a)
|
|
abort ();
|
|
}
|
|
|
|
void __attribute__((noinline))
|
|
foo (rtx defn)
|
|
{
|
|
switch (defn->code)
|
|
{
|
|
case A:
|
|
case B:
|
|
add_constraint (defn->code == A);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int
|
|
main ()
|
|
{
|
|
struct rtx_def r;
|
|
|
|
r.code = B;
|
|
|
|
foo (&r);
|
|
return 0;
|
|
}
|