| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- // RUN: %clang_cc1 -fsyntax-only -triple x86_64-unknown-unknown %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; // expected-warning{{cast to 'VoidPtr' (aka 'void *') from smaller integer type 'Int' (aka 'int')}}
- (void) (CharPtr) v; // expected-warning{{cast to 'CharPtr' (aka 'char *') from smaller integer type 'Int' (aka 'int')}}
-
- // Test that casts to void* can be controlled separately
- // from other -Wint-to-pointer-cast warnings.
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast"
- (void) (VoidPtr) v; // no-warning
- (void) (CharPtr) v; // expected-warning{{cast to 'CharPtr' (aka 'char *') from smaller integer type 'Int' (aka 'int')}}
- #pragma clang diagnostic pop
- }
- 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;
- }
- typedef enum { x_a, x_b } X;
- void *intToPointerCast2(X x) {
- return (void*)x;
- }
- void *intToPointerCast3() {
- return (void*)(1 + 3);
- }
|