Tested on x86_64-unknown-linux-gnu.

The only remaining _Float128 use is now via the strtof128 inline
which is used in two places to commpute the end of a numeric
literal and verify against the parsed end(?) to do diagnostics.
I'm not sure why or whether this is necessary - I'd have expected
lexing to number tokens and then parsing to diagnose unwanted
characters?  So my preference would be to remove the diagnostic
and where number parsing support error reporting assert that all
lexed numbers can be handled by them.  In any case test coverage
would be nice to have here.

OK?

Thanks,
Richard.

        * symbols.h (cbl_field_t::value_set): Remove.
        (strfromf128): Remove.
        * parse.y (cbl_field_t::value_set): Remove.
---
 gcc/cobol/parse.y   | 22 ----------------------
 gcc/cobol/symbols.h |  9 ++-------
 2 files changed, 2 insertions(+), 29 deletions(-)

diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y
index 43ecef0de8f..390e115f37e 100644
--- a/gcc/cobol/parse.y
+++ b/gcc/cobol/parse.y
@@ -12810,28 +12810,6 @@ cbl_field_t::has_subordinate( const cbl_field_t *that 
) const {
   return false;
 }
 
-bool
-cbl_field_t::value_set( _Float128 value ) {
-  data = value;
-  char *initial = string_of(data.value_of());
-  if( !initial ) return false;
-
-  // Trim trailing zeros.
-  char *p = initial + strlen(initial);
-  for( --p; initial <= p; --p ) {
-    if( *p != '0' ) break;
-    *p = '\0';
-  }
-
-  data.digits = (p - initial) + 1;
-  p = strchr(initial, '.');
-  data.rdigits = p? initial + data.digits - p : 0;
-
-  data.initial = initial;
-  data.capacity = type_capacity(type, data.digits);
-  return true;
-}
-
 const char *
 cbl_field_t::value_str() const {
     if( data.etc_type == cbl_field_data_t::value_e )
diff --git a/gcc/cobol/symbols.h b/gcc/cobol/symbols.h
index f51a2051f51..72bb188ec5b 100644
--- a/gcc/cobol/symbols.h
+++ b/gcc/cobol/symbols.h
@@ -51,16 +51,12 @@
 #if ! (__HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT))
 static_assert( sizeof(output) == sizeof(long double), "long doubles?" );
 
+// ???  This is still used for verificataion that __nptr parses as
+// float number via setting *__endptr.
 static inline _Float128
 strtof128 (const char *__restrict __nptr, char **__restrict __endptr) {
   return strtold(nptr, endptr);
 }
-
-static inline int
-strfromf128 (char *restrict string, size_t size,
-            const char *restrict format, _Float128 value) {
-  return  strfroml(str, n, format, fp);
-}
 #endif
 
 extern const char *numed_message;
@@ -600,7 +596,6 @@ struct cbl_field_t {
   bool has_subordinate( const cbl_field_t *that ) const;
 
   const char * internalize();
-  bool value_set( _Float128 value );
   const char *value_str() const;
 
   bool is_key_name() const { return has_attr(record_key_e); }
-- 
2.43.0

Reply via email to