Skip to content

Commit a727fec

Browse files
Fix Java code generation bugs in VALUE ALL literal initialization (#790)
* fix: codegen.c * Fix Java code generation for VALUE ALL literal initialization * Fix missing dot in memcpy method call and resolve variable scope error where loop variable i0 was referenced outside the for loop. * test: add test for VALUE ALL
1 parent 224ca97 commit a727fec

2 files changed

Lines changed: 50 additions & 2 deletions

File tree

cobj/codegen.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2213,7 +2213,7 @@ static void joutput_initialize_literal(cb_tree x, struct cb_field *f,
22132213
if (l->size >= f->size) {
22142214
joutput_prefix();
22152215
joutput_data(x);
2216-
joutput("memcpy (");
2216+
joutput(".memcpy (");
22172217
joutput_string(l->data, f->size);
22182218
joutput(", %d);\n", f->size);
22192219
return;
@@ -2234,7 +2234,7 @@ static void joutput_initialize_literal(cb_tree x, struct cb_field *f,
22342234
if (n) {
22352235
joutput_prefix();
22362236
joutput_data(x);
2237-
joutput(".memcpy(i0 * %u, ", (unsigned int)l->size);
2237+
joutput(".memcpy(%u, ", (unsigned int)(i * l->size));
22382238
joutput_string(l->data, n);
22392239
joutput(", %u);\n", (unsigned int)n);
22402240
}

tests/run.src/initialize.at

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,51 @@ AT_CHECK([${COMPILE} prog.cob])
142142
AT_CHECK([java prog], [0], [ 0])
143143

144144
AT_CLEANUP
145+
146+
AT_SETUP([INITIALIZE with VALUE ALL literal])
147+
148+
AT_DATA([prog.cbl], [
149+
IDENTIFICATION DIVISION.
150+
PROGRAM-ID. prog.
151+
DATA DIVISION.
152+
WORKING-STORAGE SECTION.
153+
01 WS-SHORT PIC X(3) VALUE ALL "AB".
154+
01 WS-EXACT PIC X(4) VALUE ALL "AB".
155+
01 WS-LONG PIC X(5) VALUE ALL "AB".
156+
01 WS-GE1 PIC X(3) VALUE ALL "ABCDE".
157+
01 WS-GE2 PIC X(5) VALUE ALL "ABCDE".
158+
PROCEDURE DIVISION.
159+
DISPLAY "@<:@" WS-SHORT "@:>@".
160+
DISPLAY "@<:@" WS-EXACT "@:>@".
161+
DISPLAY "@<:@" WS-LONG "@:>@".
162+
DISPLAY "@<:@" WS-GE1 "@:>@".
163+
DISPLAY "@<:@" WS-GE2 "@:>@".
164+
INITIALIZE WS-SHORT.
165+
INITIALIZE WS-EXACT.
166+
INITIALIZE WS-LONG.
167+
INITIALIZE WS-GE1.
168+
INITIALIZE WS-GE2.
169+
DISPLAY "@<:@" WS-SHORT "@:>@".
170+
DISPLAY "@<:@" WS-EXACT "@:>@".
171+
DISPLAY "@<:@" WS-LONG "@:>@".
172+
DISPLAY "@<:@" WS-GE1 "@:>@".
173+
DISPLAY "@<:@" WS-GE2 "@:>@".
174+
STOP RUN.
175+
])
176+
177+
AT_CHECK([${COMPILE} prog.cbl], [0], [],
178+
[prog.cbl:9: Warning: Value size exceeds data size
179+
])
180+
AT_CHECK([java prog], [0], [[[ABA]]
181+
[[ABAB]]
182+
[[ABABA]]
183+
[[ABC]]
184+
[[ABCDE]]
185+
[[ ]]
186+
[[ ]]
187+
[[ ]]
188+
[[ ]]
189+
[[ ]]
190+
])
191+
192+
AT_CLEANUP

0 commit comments

Comments
 (0)