/* Test for -Wtraditional warnings on conversions by prototypes.
   Note, gcc should omit these warnings in system header files.
   By Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 4/09/2001.  */
/* { dg-do compile } */
/* { dg-options "-Wtraditional" } */

extern void foo_i (int);
extern void foo_f (float);
extern void foo_ld (long double);
extern void foo_cd (__complex__ double);

extern int i;
extern float f;
extern long double ld;
extern __complex__ double cd;

void
testfunc1 ()
{
  foo_i (i);
  foo_i (f); /* { dg-warning "as integer rather than floating" "prototype conversion warning" } */
  foo_i (ld); /* { dg-warning "as integer rather than floating" "prototype conversion warning" } */
  foo_i (cd); /* { dg-warning "as integer rather than complex" "prototype conversion warning" } */

  foo_f (i); /* { dg-warning "as floating rather than integer" "prototype conversion warning" } */
  foo_f (f); /* { dg-warning "as 'float' rather than 'double'" "prototype conversion warning" } */
  foo_f (ld); /* { dg-warning "as 'float' rather than 'double'" "prototype conversion warning" } */
  foo_f (cd); /* { dg-warning "as floating rather than complex" "prototype conversion warning" } */

  foo_ld (i); /* { dg-warning "as floating rather than integer" "prototype conversion warning" } */
  foo_ld (f);
  foo_ld (ld);
  foo_ld (cd); /* { dg-warning "as floating rather than complex" "prototype conversion warning" } */

  foo_cd (i); /* { dg-warning "as complex rather than integer" "prototype conversion warning" } */
  foo_cd (f); /* { dg-warning "as complex rather than floating" "prototype conversion warning" } */
  foo_cd (ld); /* { dg-warning "as complex rather than floating" "prototype conversion warning" } */
  foo_cd (cd);
}
  
# 54 "sys-header.h" 3
/* We are in system headers now, no -Wtraditional warnings should issue.  */

void
testfunc2 ()
{
  foo_i (i);
  foo_i (f);
  foo_i (ld);
  foo_i (cd);

  foo_f (i);
  foo_f (f);
  foo_f (ld);
  foo_f (cd);

  foo_ld (i);
  foo_ld (f);
  foo_ld (ld);
  foo_ld (cd);

  foo_cd (i);
  foo_cd (f);
  foo_cd (ld);
  foo_cd (cd);
}
