/* Test error conditions of asm flag outputs.  */
/* { dg-do compile } */
/* { dg-options "" } */

void f_B(void) { _Bool x; asm("" : "=@cccc"(x)); }
void f_c(void) { char x; asm("" : "=@cccc"(x)); }
void f_s(void) { short x; asm("" : "=@cccc"(x)); }
void f_i(void) { int x; asm("" : "=@cccc"(x)); }
void f_l(void) { long x; asm("" : "=@cccc"(x)); }
void f_ll(void) { long long x; asm("" : "=@cccc"(x)); }

void f_f(void)
{
  float x;
  asm("" : "=@cccc"(x)); /* { dg-error invalid type } */
}

void f_d(void)
{
  double x;
  asm("" : "=@cccc"(x)); /* { dg-error invalid type } */
}

struct S { int x[3]; };

void f_S(void)
{
  struct S x;
  asm("" : "=@cccc"(x)); /* { dg-error invalid type } */
}
