// RUN: %clang_cc1 -fsyntax-only %s -verify

typedef struct { unsigned long bits[(((1) + (64) - 1) / (64))]; } cpumask_t;
cpumask_t x;
void foo() {
  (void)x;
}
void bar() {
  char* a;
  double b;
  b = (double)a; // expected-error {{pointer cannot be cast to type}}
  a = (char*)b; // expected-error {{cannot be cast to a pointer type}}
}

long bar1(long *next) {
        return (long)(*next)++;  
}

typedef _Bool Bool;
typedef int Int;
typedef long Long;
typedef float Float;
typedef double Double;
typedef _Complex int CInt;
typedef _Complex long CLong;
typedef _Complex float CFloat;
typedef _Complex double CDouble;
typedef void *VoidPtr;
typedef char *CharPtr;

void testBool(Bool v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (Float) v;
  (void) (Double) v;
  (void) (CInt) v;
  (void) (CLong) v;
  (void) (CFloat) v;
  (void) (CDouble) v;
  (void) (VoidPtr) v;
  (void) (CharPtr) v;
}

void testInt(Int v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (Float) v;
  (void) (Double) v;
  (void) (CInt) v;
  (void) (CLong) v;
  (void) (CFloat) v;
  (void) (CDouble) v;
  (void) (VoidPtr) v;
  (void) (CharPtr) v;
}

void testLong(Long v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (Float) v;
  (void) (Double) v;
  (void) (CInt) v;
  (void) (CLong) v;
  (void) (CFloat) v;
  (void) (CDouble) v;
  (void) (VoidPtr) v;
  (void) (CharPtr) v;
}

void testFloat(Float v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (Float) v;
  (void) (Double) v;
  (void) (CInt) v;
  (void) (CLong) v;
  (void) (CFloat) v;
  (void) (CDouble) v;
}

void testDouble(Double v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (Float) v;
  (void) (Double) v;
  (void) (CInt) v;
  (void) (CLong) v;
  (void) (CFloat) v;
  (void) (CDouble) v;
}

void testCI(CInt v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (Float) v;
  (void) (Double) v;
  (void) (CInt) v;
  (void) (CLong) v;
  (void) (CFloat) v;
  (void) (CDouble) v;
}

void testCLong(CLong v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (Float) v;
  (void) (Double) v;
  (void) (CInt) v;
  (void) (CLong) v;
  (void) (CFloat) v;
  (void) (CDouble) v;
}

void testCFloat(CFloat v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (Float) v;
  (void) (Double) v;
  (void) (CInt) v;
  (void) (CLong) v;
  (void) (CFloat) v;
  (void) (CDouble) v;
}

void testCDouble(CDouble v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (Float) v;
  (void) (Double) v;
  (void) (CInt) v;
  (void) (CLong) v;
  (void) (CFloat) v;
  (void) (CDouble) v;
}

void testVoidPtr(VoidPtr v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (VoidPtr) v;
  (void) (CharPtr) v;
}

void testCharPtr(CharPtr v) {
  (void) (Bool) v;
  (void) (Int) v;
  (void) (Long) v;
  (void) (VoidPtr) v;
  (void) (CharPtr) v;
}
