https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119254
Bug ID: 119254
Summary: ICE on unterminated cobol string due to use of
cbl_internal_error
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: cobol
Assignee: unassigned at gcc dot gnu.org
Reporter: dmalcolm at gcc dot gnu.org
Target Milestone: ---
I tried this test.cob file:
identification division.
program-id. hello.
procedure division.
display "Hello World!
stop run.
where the string to be displayed is missing a terminator.
The output is:
[BEGIN QUOTE]
../../src/gcc/testsuite/cobol.dg/typo-2.cob:5:21: error: syntax error:
unterminated string 'Hello World! stop run.'
5 | stop run.
| ^
3 | procedure division.
| ^
0x39ad16a emit_diagnostic_valist(diagnostic_t, unsigned long,
diagnostic_option_id, char const*, __va_list_tag (*) [1])
../../src/gcc/diagnostic-global-context.cc:97
0x10f19a2 cbl_internal_error(char const*, ...)
../../src/gcc/cobol/util.cc:2231
0x10acade lexer()
../../src/gcc/cobol/scan.l:2466
0x10aedea next_token()
../../src/gcc/cobol/scan_post.h:238
0x10aee08 prelex()
../../src/gcc/cobol/scan_post.h:249
0x10af1aa yylex()
../../src/gcc/cobol/scan_post.h:373
0xfff11c yyparse()
cobol/parse.cc:15933
0x10f15c0 parse_file
../../src/gcc/cobol/util.cc:2144
0x10f17e2 cobol_parse_files(int, char const**)
../../src/gcc/cobol/util.cc:2205
0xf331bb cobol_langhook_parse_file
../../src/gcc/cobol/cobol1.cc:457
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
[END QUOTE]
scan.l's <<EOF>> handler has:
2462 if( YY_START == quoted1 || YY_START == quoted2 ) {
2463 error_msg(yylloc, "syntax error: unterminated
string '%s'",
2464 tmpstring);
2465 cbl_internal_error("");
2466 }
so it's calling cbl_internal_error, which reports DK_ICE.
ICE is intended for handling a crash; it shouldn't be used for
recovering/aborting on syntax errors in the user's code.