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