/* PR c/111309 */
/* { dg-do compile } */
/* { dg-additional-options "-std=c99" { target c } } */

#ifndef __cplusplus
#define bool _Bool
#define true ((_Bool) 1)
#define false ((_Bool) 0)
#endif

void
foo (void)
{
  enum E { E0 = 0 };
  struct S { int s; } s;
  __builtin_clzg ();		/* { dg-error "too few arguments" } */
  __builtin_clzg (0U, 1, 2);	/* { dg-error "too many arguments" } */
  __builtin_clzg (0);		/* { dg-error "has signed type" } */
  __builtin_clzg (0.0);		/* { dg-error "does not have integral type" } */
  __builtin_clzg (s);		/* { dg-error "does not have integral type" } */
  __builtin_clzg (true);	/* { dg-error "has boolean type" } */
  __builtin_clzg (E0);		/* { dg-error "has signed type" "" { target c } } */
				/* { dg-error "has enumerated type" "" { target c++ } .-1 } */
  __builtin_clzg (0, 0);	/* { dg-error "has signed type" } */
  __builtin_clzg (0.0, 0);	/* { dg-error "does not have integral type" } */
  __builtin_clzg (s, 0);	/* { dg-error "does not have integral type" } */
  __builtin_clzg (true, 0);	/* { dg-error "has boolean type" } */
  __builtin_clzg (E0, 0);	/* { dg-error "has signed type" "" { target c } } */
				/* { dg-error "has enumerated type" "" { target c++ } .-1 } */
  __builtin_clzg (0U, 2.0);	/* { dg-error "does not have integral type" } */
  __builtin_clzg (0U, s);	/* { dg-error "does not have integral type" } */
  __builtin_clzg (0U, 2LL);	/* { dg-error "does not have 'int' type" } */
  __builtin_clzg (0U, 2U);	/* { dg-error "does not have 'int' type" } */
  __builtin_clzg (0U, true);
  __builtin_clzg (0U, E0);	/* { dg-error "does not have 'int' type" "" { target { c++ && { ! short_enums } } } } */
  __builtin_ctzg ();		/* { dg-error "too few arguments" } */
  __builtin_ctzg (0U, 1, 2);	/* { dg-error "too many arguments" } */
  __builtin_ctzg (0);		/* { dg-error "has signed type" } */
  __builtin_ctzg (0.0);		/* { dg-error "does not have integral type" } */
  __builtin_ctzg (s);		/* { dg-error "does not have integral type" } */
  __builtin_ctzg (true);	/* { dg-error "has boolean type" } */
  __builtin_ctzg (E0);		/* { dg-error "has signed type" "" { target c } } */
				/* { dg-error "has enumerated type" "" { target c++ } .-1 } */
  __builtin_ctzg (0, 0);	/* { dg-error "has signed type" } */
  __builtin_ctzg (0.0, 0);	/* { dg-error "does not have integral type" } */
  __builtin_ctzg (s, 0);	/* { dg-error "does not have integral type" } */
  __builtin_ctzg (true, 0);	/* { dg-error "has boolean type" } */
  __builtin_ctzg (E0, 0);	/* { dg-error "has signed type" "" { target c } } */
				/* { dg-error "has enumerated type" "" { target c++ } .-1 } */
  __builtin_ctzg (0U, 2.0);	/* { dg-error "does not have integral type" } */
  __builtin_ctzg (0U, 2LL);	/* { dg-error "does not have 'int' type" } */
  __builtin_ctzg (0U, 2U);	/* { dg-error "does not have 'int' type" } */
  __builtin_ctzg (0U, true);
  __builtin_ctzg (0U, E0);	/* { dg-error "does not have 'int' type" "" { target { c++ && { ! short_enums } } } } */
  __builtin_clrsbg ();		/* { dg-error "too few arguments" } */
  __builtin_clrsbg (0, 1);	/* { dg-error "too many arguments" } */
  __builtin_clrsbg (0U);	/* { dg-error "has unsigned type" } */
  __builtin_clrsbg (0.0);	/* { dg-error "does not have integral type" } */
  __builtin_clrsbg (s);		/* { dg-error "does not have integral type" } */
  __builtin_clrsbg (true);	/* { dg-error "has boolean type" } */
  __builtin_clrsbg (E0);	/* { dg-error "has enumerated type" "" { target c++ } } */
  __builtin_ffsg ();		/* { dg-error "too few arguments" } */
  __builtin_ffsg (0, 1);	/* { dg-error "too many arguments" } */
  __builtin_ffsg (0U);		/* { dg-error "has unsigned type" } */
  __builtin_ffsg (0.0);		/* { dg-error "does not have integral type" } */
  __builtin_ffsg (s);		/* { dg-error "does not have integral type" } */
  __builtin_ffsg (true);	/* { dg-error "has boolean type" } */
  __builtin_ffsg (E0);		/* { dg-error "has enumerated type" "" { target c++ } } */
  __builtin_parityg ();		/* { dg-error "too few arguments" } */
  __builtin_parityg (0U, 1);	/* { dg-error "too many arguments" } */
  __builtin_parityg (0);	/* { dg-error "has signed type" } */
  __builtin_parityg (0.0);	/* { dg-error "does not have integral type" } */
  __builtin_parityg (s);	/* { dg-error "does not have integral type" } */
  __builtin_parityg (true);	/* { dg-error "has boolean type" } */
  __builtin_parityg (E0);	/* { dg-error "has signed type" "" { target c } } */
				/* { dg-error "has enumerated type" "" { target c++ } .-1 } */
  __builtin_popcountg ();	/* { dg-error "too few arguments" } */
  __builtin_popcountg (0U, 1);	/* { dg-error "too many arguments" } */
  __builtin_popcountg (0);	/* { dg-error "has signed type" } */
  __builtin_popcountg (0.0);	/* { dg-error "does not have integral type" } */
  __builtin_popcountg (s);	/* { dg-error "does not have integral type" } */
  __builtin_popcountg (true);	/* { dg-error "has boolean type" } */
  __builtin_popcountg (E0);	/* { dg-error "has signed type" "" { target c } } */
				/* { dg-error "has enumerated type" "" { target c++ } .-1 } */
}