1178476Sjb/*
2178476Sjb * CDDL HEADER START
3178476Sjb *
4178476Sjb * The contents of this file are subject to the terms of the
5178476Sjb * Common Development and Distribution License (the "License").
6178476Sjb * You may not use this file except in compliance with the License.
7178476Sjb *
8178476Sjb * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9178476Sjb * or http://www.opensolaris.org/os/licensing.
10178476Sjb * See the License for the specific language governing permissions
11178476Sjb * and limitations under the License.
12178476Sjb *
13178476Sjb * When distributing Covered Code, include this CDDL HEADER in each
14178476Sjb * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15178476Sjb * If applicable, add the following below this CDDL HEADER, with the
16178476Sjb * fields enclosed by brackets "[]" replaced with your own identifying
17178476Sjb * information: Portions Copyright [yyyy] [name of copyright owner]
18178476Sjb *
19178476Sjb * CDDL HEADER END
20178476Sjb */
21178476Sjb
22178476Sjb/*
23178476Sjb * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24178476Sjb * Use is subject to license terms.
25178476Sjb */
26178476Sjb
27178476Sjb#pragma ident	"%Z%%M%	%I%	%E% SMI"
28178476Sjb
29178476Sjb/*
30178476Sjb * ASSERTION: Declare arrays of different data types and verify that the
31178476Sjb * addresses of the individual elements differ by an amount equal to the number
32178476Sjb * elements separating them multiplied by the size of each element.
33178476Sjb *
34178476Sjb * SECTION: Pointers and Arrays/Array Declarations and Storage;
35178476Sjb * 	Pointers and Arrays/Pointer Arithmetic
36178476Sjb *
37178476Sjb * NOTES:
38178476Sjb *
39178476Sjb */
40178476Sjb
41178476Sjb#pragma D option quiet
42178476Sjb
43178476Sjbchar char_array[5];
44178476Sjbshort short_array[5];
45178476Sjbint int_array[5];
46178476Sjblong long_array[5];
47178476Sjblong long long_long_array[5];
48178476Sjbint8_t int8_array[5];
49178476Sjbint16_t int16_array[5];
50178476Sjbint32_t int32_array[5];
51178476Sjbint64_t int64_array[5];
52178476Sjbintptr_t intptr_array[5];
53178476Sjbuint8_t uint8_array[5];
54178476Sjbuint16_t uint16_array[5];
55178476Sjbuint32_t uint32_array[5];
56178476Sjbuint64_t uint64_array[5];
57178476Sjbuintptr_t uintptr_array[5];
58178476Sjb
59178476Sjb/*
60178476Sjbfloat float_array[5];
61178476Sjbdouble double_array[5];
62178476Sjblong double long_double_array[5];
63178476Sjb
64178476Sjbstring string_array[5];
65178476Sjb*/
66178476Sjb
67178476Sjbstruct record {
68178476Sjb	char ch;
69178476Sjb	int in;
70178476Sjb} struct_array[5];
71178476Sjb
72178476Sjbstruct {
73178476Sjb	char ch;
74178476Sjb	int in;
75178476Sjb} anon_struct_array[5];
76178476Sjb
77178476Sjbunion record {
78178476Sjb	char ch;
79178476Sjb	int in;
80178476Sjb} union_array[5];
81178476Sjb
82178476Sjbunion {
83178476Sjb	char ch;
84178476Sjb	int in;
85178476Sjb} anon_union_array[5];
86178476Sjb
87178476Sjbenum colors {
88178476Sjb	RED,
89178476Sjb	GREEN,
90178476Sjb	BLUE
91178476Sjb} enum_array[5];
92178476Sjb
93178476SjbBEGIN
94178476Sjb{
95178476Sjb	char_var0 = &char_array[0]; char_var2 = &char_array[2];
96178476Sjb	short_var0 = &short_array[0]; short_var3 = &short_array[3];
97178476Sjb	int_var3 = &int_array[3]; int_var5 = &int_array[5];
98178476Sjb
99178476Sjb	long_var0 = &long_array[0]; long_var4 = &long_array[4];
100178476Sjb	long_long_var0 = &long_long_array[0];
101178476Sjb	long_long_var2 = &long_long_array[2];
102178476Sjb	int8_var3 = &int8_array[3]; int8_var5 = &int8_array[5];
103178476Sjb
104178476Sjb	int16_var0 = &int16_array[0]; int16_var4 = &int16_array[4];
105178476Sjb	int32_var0 = &int32_array[0]; int32_var3 = &int32_array[3];
106178476Sjb	int64_var0 = &int64_array[0]; int64_var1 = &int64_array[1];
107178476Sjb
108178476Sjb	uintptr_var0 = &uintptr_array[0]; uintptr_var2 = &uintptr_array[2];
109178476Sjb	struct_var0 = &struct_array[0]; struct_var2 = &struct_array[2];
110178476Sjb	anon_struct_var3 = &anon_struct_array[3];
111178476Sjb	anon_struct_var5 = &anon_struct_array[5];
112178476Sjb
113178476Sjb	union_var0 = &union_array[0]; union_var3 = &union_array[3];
114178476Sjb	anon_union_var0 = &anon_union_array[0];
115178476Sjb	anon_union_var4 = &anon_union_array[4];
116178476Sjb	enum_var0 = &enum_array[0]; enum_var2 = &enum_array[2];
117178476Sjb
118178476Sjb	printf("char_var2 - char_var0: %d\n",
119178476Sjb	(int) char_var2 - (int) char_var0);
120178476Sjb	printf("short_var3 - short_var0: %d\n",
121178476Sjb	(int) short_var3 - (int) short_var0);
122178476Sjb	printf("int_var5 - int_var3: %d\n", (int) int_var5 - (int) int_var3);
123178476Sjb
124178476Sjb	printf("long_var4 - long_var0: %d\n",
125178476Sjb	(int) long_var4 - (int) long_var0);
126178476Sjb	printf("long_long_var2 - long_long_var0: %d\n",
127178476Sjb	(int) long_long_var2 - (int) long_long_var0);
128178476Sjb	printf("int8_var5 - int8_var3: %d\n",
129178476Sjb	(int) int8_var5 - (int) int8_var3);
130178476Sjb
131178476Sjb	printf("int16_var4 - int16_var0: %d\n",
132178476Sjb	(int) int16_var4 - (int) int16_var0);
133178476Sjb	printf("int32_var3 - int32_var0: %d\n",
134178476Sjb	(int) int32_var3 - (int) int32_var0);
135178476Sjb	printf("int64_var1 - int64_var0: %d\n",
136178476Sjb	(int) int64_var1 - (int) int64_var0);
137178476Sjb
138178476Sjb	printf("uintptr_var2 - uintptr_var0: %d\n",
139178476Sjb	(int) uintptr_var2 - (int) uintptr_var0);
140178476Sjb	printf("struct_var2 - struct_var0: %d\n",
141178476Sjb	(int) struct_var2 - (int) struct_var0);
142178476Sjb	printf("anon_struct_var5 - anon_struct_var3: %d\n",
143178476Sjb	(int) anon_struct_var5 - (int) anon_struct_var3);
144178476Sjb
145178476Sjb	printf("union_var3 - union_var0: %d\n",
146178476Sjb	(int) union_var3 - (int) union_var0);
147178476Sjb	printf("anon_union_var4 - anon_union_var0: %d\n",
148178476Sjb	(int) anon_union_var4 - (int) anon_union_var0);
149178476Sjb	printf("enum_var2 - enum_var0: %d\n",
150178476Sjb	(int) enum_var2 - (int) enum_var0);
151178476Sjb	exit(0);
152178476Sjb}
153178476Sjb
154178476SjbEND
155178476Sjb/(2 != ((int) char_var2 - (int) char_var0)) ||
156178476Sjb    (6 != ((int) short_var3 - (int) short_var0)) ||
157178476Sjb    (8 != ((int) int_var5 - (int) int_var3)) ||
158178476Sjb    ((32 != ((int) long_var4 - (int) long_var0)) &&
159178476Sjb    (16 != ((int) long_var4 - (int) long_var0))) ||
160178476Sjb    (16 != ((int) long_long_var2 - (int) long_long_var0)) ||
161178476Sjb    (2 != ((int) int8_var5 - (int) int8_var3))
162178476Sjb    || (8 != ((int) int16_var4 - (int) int16_var0)) ||
163178476Sjb    (12 != ((int) int32_var3 - (int) int32_var0)) ||
164178476Sjb    (8 != ((int) int64_var1 - (int) int64_var0)) ||
165178476Sjb    ((16 != ((int) uintptr_var2 - (int) uintptr_var0))
166178476Sjb    && (8 != ((int) uintptr_var2 - (int) uintptr_var0))) ||
167178476Sjb    (16 != ((int) struct_var2 - (int) struct_var0)) ||
168178476Sjb    (16 != ((int) anon_struct_var5 - (int) anon_struct_var3))
169178476Sjb    || (12 != ((int) union_var3 - (int) union_var0)) ||
170178476Sjb    (16 != ((int) anon_union_var4 - (int) anon_union_var0)) ||
171178476Sjb    (8 != ((int) enum_var2 - (int) enum_var0))/
172178476Sjb{
173178476Sjb	exit(1);
174178476Sjb}
175