1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -Wcast-align -verify %s
6 short *b
= (short*) P
; // expected-warning {{cast from 'char *' to 'short *' increases required alignment from 1 to 2}}
7 int *c
= (int*) P
; // expected-warning {{cast from 'char *' to 'int *' increases required alignment from 1 to 4}}
10 // Casts from void* are a special case.
13 short *b
= (short*) P
;
16 const volatile void *P2
= P
;
18 short *e
= (short*) P2
;
21 const char *g
= (const char*) P2
;
22 const short *h
= (const short*) P2
;
23 const int *i
= (const int*) P2
;
25 const volatile char *j
= (const volatile char*) P2
;
26 const volatile short *k
= (const volatile short*) P2
;
27 const volatile int *l
= (const volatile int*) P2
;
31 struct __attribute__((aligned(16))) A
{
35 struct A
*a
= (struct A
*) P
; // expected-warning {{cast from 'char *' to 'struct A *' increases required alignment from 1 to 16}}
40 struct B
*b
= (struct B
*) P
;
43 // Do not issue a warning. The aligned attribute changes the alignment of the
44 // variables and fields.
45 char __attribute__((aligned(4))) a
[16];
52 char __attribute__((aligned(4))) a
[16];
53 struct S0
__attribute__((aligned(4))) s0
;
64 typedef int (*FnTy
)(void);
65 unsigned int func5(void);
74 doesnotexist world
; // expected-error {{unknown type name 'doesnotexist'}}
76 void **repro
= (void **)&foo
.hello
; // expected-warning {{cast from 'int *' to 'void **' increases required alignment from 4 to 8}}