xref: /aosp_15_r20/external/clang/test/SemaCXX/warn-cast-align.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li void 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 Li void 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