1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -Wcast-align -verify %s 2*67e74705SXin Li 3*67e74705SXin Li // Simple casts. test0(char * P)4*67e74705SXin Livoid test0(char *P) { 5*67e74705SXin Li char *a; short *b; int *c; 6*67e74705SXin Li 7*67e74705SXin Li a = (char*) P; 8*67e74705SXin Li a = static_cast<char*>(P); 9*67e74705SXin Li a = reinterpret_cast<char*>(P); 10*67e74705SXin Li typedef char *CharPtr; 11*67e74705SXin Li a = CharPtr(P); 12*67e74705SXin Li 13*67e74705SXin Li b = (short*) P; // expected-warning {{cast from 'char *' to 'short *' increases required alignment from 1 to 2}} 14*67e74705SXin Li b = reinterpret_cast<short*>(P); 15*67e74705SXin Li typedef short *ShortPtr; 16*67e74705SXin Li b = ShortPtr(P); // expected-warning {{cast from 'char *' to 'ShortPtr' (aka 'short *') increases required alignment from 1 to 2}} 17*67e74705SXin Li 18*67e74705SXin Li c = (int*) P; // expected-warning {{cast from 'char *' to 'int *' increases required alignment from 1 to 4}} 19*67e74705SXin Li c = reinterpret_cast<int*>(P); 20*67e74705SXin Li typedef int *IntPtr; 21*67e74705SXin Li c = IntPtr(P); // expected-warning {{cast from 'char *' to 'IntPtr' (aka 'int *') increases required alignment from 1 to 4}} 22*67e74705SXin Li } 23*67e74705SXin Li 24*67e74705SXin Li // Casts from void* are a special case. test1(void * P)25*67e74705SXin Livoid test1(void *P) { 26*67e74705SXin Li char *a; short *b; int *c; 27*67e74705SXin Li 28*67e74705SXin Li a = (char*) P; 29*67e74705SXin Li a = static_cast<char*>(P); 30*67e74705SXin Li a = reinterpret_cast<char*>(P); 31*67e74705SXin Li typedef char *CharPtr; 32*67e74705SXin Li a = CharPtr(P); 33*67e74705SXin Li 34*67e74705SXin Li b = (short*) P; 35*67e74705SXin Li b = static_cast<short*>(P); 36*67e74705SXin Li b = reinterpret_cast<short*>(P); 37*67e74705SXin Li typedef short *ShortPtr; 38*67e74705SXin Li b = ShortPtr(P); 39*67e74705SXin Li 40*67e74705SXin Li c = (int*) P; 41*67e74705SXin Li c = static_cast<int*>(P); 42*67e74705SXin Li c = reinterpret_cast<int*>(P); 43*67e74705SXin Li typedef int *IntPtr; 44*67e74705SXin Li c = IntPtr(P); 45*67e74705SXin Li } 46