/* This testcase ICEd because statement expression type was set, but was not
   as used.  */

struct A {
  unsigned int a, b, c;
};

extern void abort (void);
extern void exit (int);

struct A bar (void)
{
  return (struct A) { 176, 52, 31 };
}

void baz (struct A *a)
{
  if (a->a != 176 || a->b != 52 || a->c != 31)
    abort ();
}

int main ()
{
  struct A d;

  d = ({ { bar (); } });		/* { dg-error "void value" } */
  d = ({ if (1) { bar (); } });		/* { dg-error "void value" } */
  d = ({ while (0) { bar (); } });	/* { dg-error "void value" } */
  d = ({ do { bar (); } while (0); });	/* { dg-error "void value" } */
  baz (&d);
  exit (0);
}
