https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119241

--- Comment #18 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #17)
> Created attachment 60834 [details]
> functional patch with bugs
> 
> So this is a functional patch ontop of prerequesites that were posted for
> review.  There's bugs.  At least we have
> 
> FAIL: cobol.dg/group1/display2.cob   -O0  output pattern test
> FAIL: cobol.dg/group1/display2.cob   -O1  output pattern test
> FAIL: cobol.dg/group1/display2.cob   -O2  output pattern test
> FAIL: cobol.dg/group1/display2.cob   -O3 -fomit-frame-pointer -funroll-loops
> -fpeel-loops -ftracer -finline-functions  output pattern test
> FAIL: cobol.dg/group1/display2.cob   -O3 -g  output pattern test
> FAIL: cobol.dg/group1/display2.cob   -Os  output pattern test
> 
>                 === cobol Summary ===
> 
> # of expected passes            309
> # of unexpected failures        6
> # of expected failures          6
> 
> where the FAIL is
> 
> FAIL: cobol.dg/group1/display2.cob   -O0  output pattern test
> Output was:
> 1.00000000000000000000000000000000e+0 2.00000000000000000000000000000000e+0
> 
> Should match:
> 1 2

It's the following hunk.  real_to_decimal always uses e+exp notation
and a lower-case 'E'.  So we might want to post-process the string
instead of trying to re-format.

@@ -4884,7 +4883,8 @@ parser_display_internal(tree file_descriptor,
     // We make use of that here

     char ach[128];
-    strfromf128(ach, sizeof(ach), "%.33E", refer.field->data.value_of());
+    real_to_decimal (ach, TREE_REAL_CST_PTR (refer.field->data.value_of()),
+                    sizeof(ach), 33, 0);
     char *p = strchr(ach, 'E');
     if( !p )
       {
@@ -4901,9 +4901,8 @@ parser_display_internal(tree file_descriptor,
       else
         {
         int precision = 32 - exp;
-        char achFormat[24];
-        sprintf(achFormat, "%%.%df", precision);
-        strfromf128(ach, sizeof(ach), achFormat,
refer.field->data.value_of());
+       real_to_decimal (ach, TREE_REAL_CST_PTR (refer.field->data.value_of()),
+                        sizeof(ach), precision, 0);
         }
       __gg__remove_trailing_zeroes(ach);
       }

Reply via email to