annotate test/tmp7.c @ 896:d712ee10feb7

local_nptr for locally defined struct
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 06 Apr 2014 19:20:58 +0900
parents 1a027275743d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
467
32737bad7489 fix list/tag interference
kono
parents: 427
diff changeset
1 int printf(const char *format, ...);
574
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
2 #ifndef INLINE
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
3 #define INLINE
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
4 #endif
13
a8a812dace23 struct local initialization
kono
parents: 8
diff changeset
5 int k=3;
a8a812dace23 struct local initialization
kono
parents: 8
diff changeset
6 struct aa { int a[100]; } aaa,bbb;
258
22949117768f Complex function argments. Struct is done. Long long is odd.
kono
parents: 172
diff changeset
7 struct bb { int b[2]; } aaa1,bbb1;
574
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
8 INLINE void tmp(void);
13
a8a812dace23 struct local initialization
kono
parents: 8
diff changeset
9
574
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
10 INLINE struct aa
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
11 main0(int);
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
12
624
4d28634e46e4 *** empty log message ***
kono
parents: 574
diff changeset
13 INLINE void
4d28634e46e4 *** empty log message ***
kono
parents: 574
diff changeset
14 main01(int k, struct aa a)
4d28634e46e4 *** empty log message ***
kono
parents: 574
diff changeset
15 {
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
16 printf("#0015:main01 k=%d,a[0]=%d,a[99]=%d\n",k,a.a[0],a.a[99]);
624
4d28634e46e4 *** empty log message ***
kono
parents: 574
diff changeset
17 }
4d28634e46e4 *** empty log message ***
kono
parents: 574
diff changeset
18
574
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
19 INLINE struct aa
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
20 main0(int k)
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
21 {
39
c63c4fdeb9a7 struct done.
kono
parents: 37
diff changeset
22 int i;
16
ca0bce3b4810 struct copy
kono
parents: 15
diff changeset
23 struct aa ccc;
39
c63c4fdeb9a7 struct done.
kono
parents: 37
diff changeset
24
c63c4fdeb9a7 struct done.
kono
parents: 37
diff changeset
25 for(i=0;i<100;i++) ccc.a[i]=i;
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
26 ccc.a[55]=k;
16
ca0bce3b4810 struct copy
kono
parents: 15
diff changeset
27 return ccc;
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
28 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
29
574
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
30 INLINE struct aa
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
31 main3(struct aa arg)
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
32 {
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
33 int j=++arg.a[55];
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
34 return main0(j);
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
35 }
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
36
574
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
37 INLINE void
8
e714bcee688b *** empty log message ***
kono
parents: 0
diff changeset
38 main2(struct aa a1)
e714bcee688b *** empty log message ***
kono
parents: 0
diff changeset
39 {
37
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
40 /* main2 a1.a[99] 0 */
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
41 /* main2 a1.a[55] 0 */
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
42 /* main2 a1.a[99] 55 */
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
43 /* main2 a1.a[55] 44 */
880
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
44 printf("#0043:main2 a1.a[99] %d\n",a1.a[99]);
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
45 printf("#0044:main2 a1.a[55] %d\n",a1.a[55]);
8
e714bcee688b *** empty log message ***
kono
parents: 0
diff changeset
46 }
e714bcee688b *** empty log message ***
kono
parents: 0
diff changeset
47
574
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
48 INLINE struct bb
258
22949117768f Complex function argments. Struct is done. Long long is odd.
kono
parents: 172
diff changeset
49 main5(struct aa a1,struct bb a2)
22949117768f Complex function argments. Struct is done. Long long is odd.
kono
parents: 172
diff changeset
50 {
880
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
51 printf("#0050:main5 a1.a[99] %d\n",a1.a[99]);
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
52 printf("#0051:main5 a1.a[55] %d\n",a1.a[55]);
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
53 printf("#0052:main5 a2.b[0] %d\n",a2.b[0]);
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
54 printf("#0053:main5 a2.b[1] %d\n",a2.b[1]);
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
55 a2.b[0]=333;
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
56 a2.b[1]=555;
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
57 return a2;
258
22949117768f Complex function argments. Struct is done. Long long is odd.
kono
parents: 172
diff changeset
58 }
870
e3de6b70abe9 struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 820
diff changeset
59 INLINE void main6(); INLINE void main7();
258
22949117768f Complex function argments. Struct is done. Long long is odd.
kono
parents: 172
diff changeset
60
574
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
61 INLINE void
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
62 main1(struct aa a1)
d35df41eac69 Initial revision
kono
parents:
diff changeset
63 {
37
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
64 /* main1 a1.a[0] 0 */
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
65 /* main1 a1.a[0] 44 */
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
66 printf("#0065:main1 a1.a[0] %d\n",a1.a[0]);
15
6667dbd4f718 eax before function call
kono
parents: 13
diff changeset
67 a1.a[55]=44;
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
68 if (a1.a[0])
880
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
69 main2(a1);
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
70 else
880
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
71 main2(aaa);
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
72 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
73
487
b4d9809d6ee2 type attribute (half done)
kono
parents: 467
diff changeset
74 int
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
75 main(ac,av)
d35df41eac69 Initial revision
kono
parents:
diff changeset
76 int ac;
d35df41eac69 Initial revision
kono
parents:
diff changeset
77 char *av[];
d35df41eac69 Initial revision
kono
parents:
diff changeset
78 {
d35df41eac69 Initial revision
kono
parents:
diff changeset
79 register int i;
d35df41eac69 Initial revision
kono
parents:
diff changeset
80 register char *p;
d35df41eac69 Initial revision
kono
parents:
diff changeset
81 int j = 3;
16
ca0bce3b4810 struct copy
kono
parents: 15
diff changeset
82 struct { int b; void (*c)(struct aa); } q = {3,main1},r;
39
c63c4fdeb9a7 struct done.
kono
parents: 37
diff changeset
83 struct aa *aap[3];
885
1a027275743d struct returinng function have to be indirect.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 883
diff changeset
84 struct bb bb0 = {{1,2}}; // = {1,2}; should be Ok
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
85 j = 3;
d35df41eac69 Initial revision
kono
parents:
diff changeset
86
624
4d28634e46e4 *** empty log message ***
kono
parents: 574
diff changeset
87 aaa.a[0] = 55;
4d28634e46e4 *** empty log message ***
kono
parents: 574
diff changeset
88 aaa.a[99] = 66;
4d28634e46e4 *** empty log message ***
kono
parents: 574
diff changeset
89 main01(j,aaa);
4d28634e46e4 *** empty log message ***
kono
parents: 574
diff changeset
90
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
91 bbb = main0(123);
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
92 printf("#0091:copied main0 ccc.a[55] %d==123\n",bbb.a[55]);
39
c63c4fdeb9a7 struct done.
kono
parents: 37
diff changeset
93 aap[2] = &bbb;
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
94 *aap[2] = main0(123);
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
95 printf("#0094:complex copied main0 ccc.a[55] %d==123\n",bbb.a[55]);
39
c63c4fdeb9a7 struct done.
kono
parents: 37
diff changeset
96 bbb.a[55]=0;
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
97 j = main0(123).a[55];
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
98 printf("#0097:new main0 ccc.a[55] in temporal copy %d==123\n",j);
39
c63c4fdeb9a7 struct done.
kono
parents: 37
diff changeset
99
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
100 j = 552;
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
101 bbb = main3(bbb);
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
102 printf("#0101:main3 bbb.a[55] in temporal copy %d==552 %d==1\n",j,bbb.a[55]);
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
103 j = main3(bbb).a[55];
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
104 printf("#0103:main3 bbb.a[55] in temporal copy %d==2 %d\n",j,bbb.a[53]);
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
105 j = main3(bbb).a[53];
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
106 printf("#0105:main3 bbb.a[55] in temporal copy %d==53 %d\n",j,bbb.a[53]);
45
b9266c88495c *** empty log message ***
kono
parents: 39
diff changeset
107
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
108 printf("#0107:%d==3\n",q.b);
37
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
109 /* 3==3 */
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
110 r = q;
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
111 printf("#0110:%d==3\n",r.b);
37
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
112 /* 3==3 */
15
6667dbd4f718 eax before function call
kono
parents: 13
diff changeset
113 (*r.c)(aaa);
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
114 printf("#0113:main aaa.a[55] %d\n",aaa.a[55]);
37
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
115 /* main aaa.a[55] 123 */
15
6667dbd4f718 eax before function call
kono
parents: 13
diff changeset
116 bbb.a[0]=44;
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
117 aaa = bbb;
15
6667dbd4f718 eax before function call
kono
parents: 13
diff changeset
118 aaa.a[99]=55; /* core dump? */
6667dbd4f718 eax before function call
kono
parents: 13
diff changeset
119 (*r.c)(aaa);
37
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
120 /* main aaa.a[55] 0 */
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
121 printf("#0120:main aaa.a[55] %d\n",aaa.a[55]);
8
e714bcee688b *** empty log message ***
kono
parents: 0
diff changeset
122 p = av[0];
487
b4d9809d6ee2 type attribute (half done)
kono
parents: 467
diff changeset
123 if (!p) return 55;
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
124 i = p[1];
d35df41eac69 Initial revision
kono
parents:
diff changeset
125 p = p+i;
37
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
126 /* 47 ./a.out */
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 624
diff changeset
127 printf("#0126:%d %s\n",i,p-i+3);
258
22949117768f Complex function argments. Struct is done. Long long is odd.
kono
parents: 172
diff changeset
128 aaa1.b[0]=33;
22949117768f Complex function argments. Struct is done. Long long is odd.
kono
parents: 172
diff changeset
129 aaa1.b[1]=55;
22949117768f Complex function argments. Struct is done. Long long is odd.
kono
parents: 172
diff changeset
130 bbb1 = main5(aaa,aaa1);
885
1a027275743d struct returinng function have to be indirect.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 883
diff changeset
131 printf("#0130:main5-2 %d %d\n",bb0.b[0],
880
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
132 main5(bbb,bbb1).b[0]);
885
1a027275743d struct returinng function have to be indirect.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 883
diff changeset
133 printf("#0132:main5-1 %d %d\n",bb0.b[0],
880
5313ed059cee no tabs in source
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 870
diff changeset
134 main5(bbb,main5(aaa,aaa1)).b[0]);
820
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
135
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
136 main6();
883
05c2757853b1 non parse mode fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 880
diff changeset
137 main7();
172
096559f07a70 some check
kono
parents: 46
diff changeset
138 return 0;
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
139 }
d35df41eac69 Initial revision
kono
parents:
diff changeset
140
820
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
141 typedef struct {
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
142 char x,y;
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
143 } s;
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
144
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
145 s P[15],Q[15];
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
146
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
147 static void
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
148 l(s p, s q){
896
d712ee10feb7 local_nptr for locally defined struct
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 885
diff changeset
149 printf("#0148:%d %d\n", p.x, p.y);
820
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
150 }
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
151
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
152 INLINE void
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
153 main6()
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
154 {
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
155 int j = 0;
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
156 P[j].x = Q[j].x = 10;
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
157 P[j].y = Q[j].y = -7;
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
158
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
159 l(P[j],Q[j]);
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
160 }
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
161
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
162
9598ecec0af5 rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 748
diff changeset
163
574
aad312f61654 remove too much inmode.
kono
parents: 491
diff changeset
164 INLINE void
0
d35df41eac69 Initial revision
kono
parents:
diff changeset
165 tmp()
d35df41eac69 Initial revision
kono
parents:
diff changeset
166 {
d35df41eac69 Initial revision
kono
parents:
diff changeset
167 }
37
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
168
412ad2e6c2a2 struct copy
kono
parents: 16
diff changeset
169
870
e3de6b70abe9 struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 820
diff changeset
170 INLINE void
e3de6b70abe9 struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 820
diff changeset
171 main7(struct aa a1)
e3de6b70abe9 struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 820
diff changeset
172 {
e3de6b70abe9 struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 820
diff changeset
173 struct aa b = main0(0xff);
896
d712ee10feb7 local_nptr for locally defined struct
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 885
diff changeset
174 printf("#0173:main7 b.a[55] %d\n",b.a[55]);
870
e3de6b70abe9 struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 820
diff changeset
175 }
e3de6b70abe9 struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 820
diff changeset
176