Mercurial > hg > solaris-cc-bug
annotate t2.c @ 0:e0a26cc60a20 default tip
Test for solaris cc bug with bit-fields.
With "cc -fast" (or, rather, "cc -xalias_level=basic -xO3", implied by
"cc -fast") solaris cc compiles incorrect code for bit-field accesses,
notably not rechecking data after functions calls in some situations.
Using "-xalias_level=any" resolves the problem (as well as using any
non-bit-field type).
Tested cc version is "Sun C 5.9 SunOS_i386 2007/05/03" (Sun Studio 12).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 16 Aug 2011 22:09:57 +0400 |
parents | |
children |
rev | line source |
---|---|
0
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 #include "t.h" |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 void (*x)(test *t); |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 void |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 dosomething(test *t) |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 { |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 t->bit = 1; |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 } |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 void |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 doinstall() |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 { |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 x = dosomething; |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 } |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 int |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 dotest(test *t) |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 { |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 t->bit = 0; |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 x(t); |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 if (t->bit) { |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 return 0; |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 } |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 return 1; |
e0a26cc60a20
Test for solaris cc bug with bit-fields.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 } |