// { dg-do assemble  }
// { dg-options "" }
// g++ 1.36.1 bug 900210_02

// g++ allows integral type values to be assigned to variables of pointer
// types.  According to the C++ Reference Manual, this is illegal.

// Cfront 2.0 passes this test.

// keywords: integral types, pointer types, implicit type conversions
// Special Options: -ansi -pedantic-errors
int i;
long l;
short s;
char c;
float f;
double d;
long double ld;
enum E {enum_value_0} e;

signed int si;
signed long sl;
signed short ss;
signed char sc;

unsigned int ui;
unsigned long ul;
unsigned short us;
unsigned char uc;

void* vp;
char* cp;
int* ip;
enum E2 {enum_value_1} * ep;
struct S { int member; } * sp;
void (*fp) (void);

void global_function ()
{
  vp = i;	/* { dg-error "" }  */
  vp = l;	/* { dg-error "" }  */
  vp = s;	/* { dg-error "" }  */
  vp = c;	/* { dg-error "" }  */
  vp = si;	/* { dg-error "" }  */
  vp = sl;	/* { dg-error "" }  */
  vp = ss;	/* { dg-error "" }  */
  vp = sc;	/* { dg-error "" }  */
  vp = ui;	/* { dg-error "" }  */
  vp = ul;	/* { dg-error "" }  */
  vp = us;	/* { dg-error "" }  */
  vp = uc;	/* { dg-error "" }  */
  cp = i;	/* { dg-error "" }  */
  cp = l;	/* { dg-error "" }  */
  cp = s;	/* { dg-error "" }  */
  cp = c;	/* { dg-error "" }  */
  cp = si;	/* { dg-error "" }  */
  cp = sl;	/* { dg-error "" }  */
  cp = ss;	/* { dg-error "" }  */
  cp = sc;	/* { dg-error "" }  */
  cp = ui;	/* { dg-error "" }  */
  cp = ul;	/* { dg-error "" }  */
  cp = us;	/* { dg-error "" }  */
  cp = uc;	/* { dg-error "" }  */
  ip = i;	/* { dg-error "" }  */
  ip = l;	/* { dg-error "" }  */
  ip = s;	/* { dg-error "" }  */
  ip = c;	/* { dg-error "" }  */
  ip = si;	/* { dg-error "" }  */
  ip = sl;	/* { dg-error "" }  */
  ip = ss;	/* { dg-error "" }  */
  ip = sc;	/* { dg-error "" }  */
  ip = ui;	/* { dg-error "" }  */
  ip = ul;	/* { dg-error "" }  */
  ip = us;	/* { dg-error "" }  */
  ip = uc;	/* { dg-error "" }  */
  ep = i;	/* { dg-error "" }  */
  ep = l;	/* { dg-error "" }  */
  ep = s;	/* { dg-error "" }  */
  ep = c;	/* { dg-error "" }  */
  ep = si;	/* { dg-error "" }  */
  ep = sl;	/* { dg-error "" }  */
  ep = ss;	/* { dg-error "" }  */
  ep = sc;	/* { dg-error "" }  */
  ep = ui;	/* { dg-error "" }  */
  ep = ul;	/* { dg-error "" }  */
  ep = us;	/* { dg-error "" }  */
  ep = uc;	/* { dg-error "" }  */
  sp = i;	/* { dg-error "" }  */
  sp = l;	/* { dg-error "" }  */
  sp = s;	/* { dg-error "" }  */
  sp = c;	/* { dg-error "" }  */
  sp = si;	/* { dg-error "" }  */
  sp = sl;	/* { dg-error "" }  */
  sp = ss;	/* { dg-error "" }  */
  sp = sc;	/* { dg-error "" }  */
  sp = ui;	/* { dg-error "" }  */
  sp = ul;	/* { dg-error "" }  */
  sp = us;	/* { dg-error "" }  */
  sp = uc;	/* { dg-error "" }  */
  fp = i;	/* { dg-error "" }  */
  fp = l;	/* { dg-error "" }  */
  fp = s;	/* { dg-error "" }  */
  fp = c;	/* { dg-error "" }  */
  fp = si;	/* { dg-error "" }  */
  fp = sl;	/* { dg-error "" }  */
  fp = ss;	/* { dg-error "" }  */
  fp = sc;	/* { dg-error "" }  */
  fp = ui;	/* { dg-error "" }  */
  fp = ul;	/* { dg-error "" }  */
  fp = us;	/* { dg-error "" }  */
  fp = uc;	/* { dg-error "" }  */
}

int main () { return 0; }
