xref: /llvm-project/clang/test/SemaCXX/array-alignment.cpp (revision 0ca1051bfc6e9548763f0a52641733393c33a427)
1adaf62ceSAkira Hatanaka // RUN: %clang_cc1 -fsyntax-only -verify %s
2adaf62ceSAkira Hatanaka 
3adaf62ceSAkira Hatanaka typedef char __attribute__((aligned(2))) AlignedChar;
4adaf62ceSAkira Hatanaka typedef AlignedChar arrayType0[4]; // expected-error {{size of array element}}
5adaf62ceSAkira Hatanaka 
6adaf62ceSAkira Hatanaka struct __attribute__((aligned(8))) AlignedStruct {
7adaf62ceSAkira Hatanaka   int m0;
8adaf62ceSAkira Hatanaka };
9adaf62ceSAkira Hatanaka 
10adaf62ceSAkira Hatanaka struct __attribute__((packed)) PackedStruct {
11adaf62ceSAkira Hatanaka   char m0;
12adaf62ceSAkira Hatanaka   int i0;
13adaf62ceSAkira Hatanaka };
14adaf62ceSAkira Hatanaka 
15adaf62ceSAkira Hatanaka typedef PackedStruct AlignedPackedStruct __attribute__((aligned(4)));
16adaf62ceSAkira Hatanaka typedef AlignedPackedStruct arrayType1[4]; // expected-error {{(5 bytes) isn't a multiple of its alignment (4 bytes)}}
17adaf62ceSAkira Hatanaka 
18adaf62ceSAkira Hatanaka AlignedChar a0[1]; // expected-error {{size of array element}}
19adaf62ceSAkira Hatanaka AlignedStruct a1[1];
20adaf62ceSAkira Hatanaka AlignedPackedStruct a2[1]; // expected-error {{size of array element}}
21adaf62ceSAkira Hatanaka 
22adaf62ceSAkira Hatanaka struct S {
23adaf62ceSAkira Hatanaka   AlignedChar m0[1]; // expected-error {{size of array element}}
24adaf62ceSAkira Hatanaka   AlignedStruct m1[1];
25adaf62ceSAkira Hatanaka   AlignedPackedStruct m2[1]; // expected-error {{size of array element}}
26adaf62ceSAkira Hatanaka };
27adaf62ceSAkira Hatanaka 
test(char * p)28adaf62ceSAkira Hatanaka void test(char *p) {
29adaf62ceSAkira Hatanaka   auto p0 = (AlignedChar(*)[1])p;    // expected-error {{size of array element}}
30adaf62ceSAkira Hatanaka   auto r0 = (AlignedChar(&)[1])(*p); // expected-error {{size of array element}}
31adaf62ceSAkira Hatanaka   auto p1 = new AlignedChar[1];      // expected-error {{size of array element}}
32adaf62ceSAkira Hatanaka   auto p2 = (AlignedStruct(*)[1])p;
33adaf62ceSAkira Hatanaka   auto p3 = new AlignedStruct[1];
34adaf62ceSAkira Hatanaka   auto p4 = (AlignedPackedStruct(*)[1])p; // expected-error {{size of array element}}
35adaf62ceSAkira Hatanaka   auto p5 = new AlignedPackedStruct[1]; // expected-error {{size of array element}}
36*0ca1051bSAkira Hatanaka   auto p6 = new AlignedPackedStruct;
37adaf62ceSAkira Hatanaka }
38