diff --git a/gcc/cobol/UAT/failsuite.src/run_functions.at b/gcc/cobol/UAT/failsuite.src/run_functions.at
index b616ddec6ede790075c71ff8dedf3ba121bd8f5d..5a5319dfc5051b7571ed4d52f2a77126c86865ba 100644
--- a/gcc/cobol/UAT/failsuite.src/run_functions.at
+++ b/gcc/cobol/UAT/failsuite.src/run_functions.at
@@ -85,20 +85,31 @@ AT_DATA([prog.cob], [
            STOP RUN.
 ])
 
-AT_CHECK([$COMPILE prog.cob], [0], [],
-[prog.cob:11: warning: FUNCTION 'FORMATTED-CURRENT-DATE' has format in variable
-prog.cob:18: warning: FUNCTION 'FORMATTED-DATE' has format in variable
-prog.cob:24: warning: FUNCTION 'FORMATTED-DATETIME' has format in variable
-prog.cob:31: warning: FUNCTION 'FORMATTED-TIME' has format in variable
-prog.cob:37: warning: FUNCTION 'INTEGER-OF-FORMATTED-DATE' has format in variable
-prog.cob:44: warning: FUNCTION 'SECONDS-FROM-FORMATTED-TIME' has format in variable
-prog.cob:51: warning: FUNCTION 'TEST-FORMATTED-DATETIME' has format in variable
+AT_CHECK([$COMPILE prog.cob], [1], [], 
+[prog.cob:12: error: format must be literal at 'invalid-date-format'
+prog.cob:12: syntax error at 'invalid-date-format'
+prog.cob:16: syntax error at 'END-IF'
+prog.cob:18: error: format must be literal at 'invalid-date-format'
+prog.cob:18: syntax error at 'invalid-date-format'
+prog.cob:22: syntax error at 'END-IF'
+prog.cob:25: error: format must be literal at 'invalid-datetime-format'
+prog.cob:25: syntax error at 'invalid-datetime-format'
+prog.cob:29: syntax error at 'END-IF'
+prog.cob:31: error: format must be literal at 'invalid-time-format'
+prog.cob:31: syntax error at 'invalid-time-format'
+prog.cob:35: syntax error at 'END-IF'
+prog.cob:38: error: format must be literal at 'invalid-date-format'
+prog.cob:38: syntax error at 'invalid-date-format'
+prog.cob:42: syntax error at 'END-IF'
+prog.cob:45: error: format must be literal at 'invalid-time-format'
+prog.cob:45: syntax error at 'invalid-time-format'
+prog.cob:49: syntax error at 'END-IF'
+prog.cob:52: error: format must be literal at 'invalid-datetime-format'
+prog.cob:52: syntax error at 'invalid-datetime-format'
+prog.cob:56: syntax error at 'END-IF'
+cobol1: error: failed compiling prog.cob
 ])
 
-# running the program
-AT_CHECK([$COBCRUN_DIRECT ./a.out], [0], [], [])
-
-
 AT_CLEANUP
 
 
@@ -115,9 +126,9 @@ AT_DATA([prog.cob], [
            MOVE E TO Z.
            STOP RUN.
 ])
-AT_CHECK([$COMPILE prog.cob], [1], [], [prog.cob:8: syntax error: symbol 'PI' not found at 'TO'
-prog.cob:9: syntax error: symbol 'E' not found at 'TO'
-prog.cob:10: syntax error: symbol 'E' not found at 'TO'
+AT_CHECK([$COMPILE prog.cob], [1], [],
+[prog.cob:8: error: symbol 'PI' not found at 'TO'
+prog.cob:9: error: symbol 'E' not found at 'TO'
 cobol1: error: failed compiling prog.cob
 ])
 AT_CLEANUP
diff --git a/gcc/cobol/UAT/failsuite.src/syn_misc.at b/gcc/cobol/UAT/failsuite.src/syn_misc.at
index a2fc97bcb66ccdcf2d40d5be9ddb4b8eddb90de6..74fd6908165ad2209a3dd7412486c99df7301d92 100644
--- a/gcc/cobol/UAT/failsuite.src/syn_misc.at
+++ b/gcc/cobol/UAT/failsuite.src/syn_misc.at
@@ -36,7 +36,11 @@ AT_DATA([prog.cob], [
                    X"1"
            END-DISPLAY.
 ])
-AT_CHECK([$COMPILE_ONLY prog.cob], [1], [], [Needs better error messages])
+AT_CHECK([$COMPILE_ONLY prog.cob], [1], [], [prog.cob:9: error: invalid hexadecimal value: X"GH" at 'X"GH"'
+prog.cob:9: syntax error at 'X"GH"'
+prog.cob:10: syntax error: hex literal '1' has an odd number (1) of characters at '1'
+cobol1: error: failed compiling prog.cob
+])
 AT_CLEANUP
 
 
diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index bdd16530de9c19804ca34c5c6693cfba35c534b8..18e4ed2d0deca875347b7a20d898b5d678f8c1d7 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -5128,7 +5128,7 @@ parser_exit(void)
       // Create a buffer that grows in size, as needed, to accommodate the
       // data that needs to be returned.
       
-#pragma warning "Fix me"
+#pragma GCC warning "Fix me: Create a buffer that grows in size"
 
       tree array_type = build_array_type_nelts(UCHAR,
                                     current_function->returning->data.capacity);
diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l
index 3cdfd0f75317665a1d1dfb19bfd0c41df2b0cb64..9879dd749b2aed33338eb773bb2c55b1f9e4c734 100644
--- a/gcc/cobol/scan.l
+++ b/gcc/cobol/scan.l
@@ -58,6 +58,7 @@ hfc       (({hpref}{hfrac}{bexp}{fsuff_opt})|({hpref}{hdseq}{bexp}{fsuff_opt}))
 
 boolseq   (([''][01]+[''])|([""][01]+[""]))
 hexseq    ((['']{hdseq}[''])|([""]{hdseq}[""]))
+nonseq    (([''][[:alnum:]]+][''])|([""][[:alnum:]]+[""]))
 
 INTEGER   0*[1-9][[:digit:]]*
 INTEGERZ  [[:digit:]]+
@@ -1076,6 +1077,8 @@ USE({SPC}FOR)?		{ return USE; }
 			  yy_push_state(quoted2); }
   N?X/{hexseq}		{ yylval.literal.set_prefix(yytext, yyleng);
 	    		  yy_push_state(hex_state); }
+  N?X{nonseq}		{ yyerrorv("error: invalid hexadecimal value: %s", yytext);
+			  return NO_CONDITION; }
   [[:blank:]]*\r?\n     {}
 
   WORKING-STORAGE{SECTION} { return WORKING_STORAGE_SECT; }
@@ -1309,6 +1312,9 @@ USE({SPC}FOR)?		{ return USE; }
     B/{boolseq}			{ is_not = false; yy_push_state(bool_state); }
   N?X/{hexseq}			{ yylval.literal.set_prefix(yytext, yyleng);
 	    			  yy_push_state(hex_state); }
+  N?X{nonseq}		{ yyerrorv("error: invalid hexadecimal value: %s", yytext);
+			  return NO_CONDITION; }
+
   BX/{hexseq}			{ yylval.numstr.radix = hexadecimal_e;
 			  	  yy_push_state(numstr_state); }
 
@@ -1547,29 +1553,25 @@ USE({SPC}FOR)?		{ return USE; }
 <datetime_fmt>{
   [(] 				{ return *yytext; }
 
-  ['']{DATETIME_FMT}['']	{ yylval.string = strdup(yytext + 1);
-				  yylval.string[yyleng-2] = '\0';
-				  pop_return DATETIME_FMT; }
+  ['']{DATETIME_FMT}['']	|
   [""]{DATETIME_FMT}[""]	{ yylval.string = strdup(yytext + 1);
 				  yylval.string[yyleng-2] = '\0';
 				  pop_return DATETIME_FMT; }
 
-  ['']{DATE_FMT}['']		{ yylval.string = strdup(yytext + 1);
-				  yylval.string[yyleng-2] = '\0';
-				  pop_return DATE_FMT; }
+  ['']{DATE_FMT}['']		|
   [""]{DATE_FMT}[""]		{ yylval.string = strdup(yytext + 1);
 				  yylval.string[yyleng-2] = '\0';
 				  pop_return DATE_FMT; }
 
-  ['']{TIME_FMT}['']		{ yylval.string = strdup(yytext + 1);
-				  yylval.string[yyleng-2] = '\0';
-				  pop_return TIME_FMT; }
+  ['']{TIME_FMT}['']		|
   [""]{TIME_FMT}[""]		{ yylval.string = strdup(yytext + 1);
 				  yylval.string[yyleng-2] = '\0';
 				  pop_return TIME_FMT; }
 
   {SPC}				// ignore
-  . 				{ return NO_CONDITION; }
+  {NAME}			{ yyerror("error: format must be literal"); 
+				  pop_return NO_CONDITION; }
+  . 				{ yyless(0); pop_return NO_CONDITION; }
 }
 
 <function>{