diff --git a/gcc/cobol/symbols.cc b/gcc/cobol/symbols.cc
index dbb56bc54a59b2ac9461bbbd683fa90231702824..12adfda716bf51caed69ecfd18740ca21e2b89de 100644
--- a/gcc/cobol/symbols.cc
+++ b/gcc/cobol/symbols.cc
@@ -1312,14 +1312,9 @@ static struct symbol_elem_t *
     if( redefined ) {
       assert( group == redefined );
       max_memsize = std::max(max_memsize, field_memsize(field));
-      field->data.capacity = redefined->data.capacity;
-      if( is_table(field) ) { // reduce capacity by occurs, if any
-        if( field->data.digits == field->data.capacity ) {
-          field->data.digits /= field->occurs.ntimes();
-        }
-        field->data.capacity /= field->occurs.ntimes();    
+      if( redefined->data.memsize == redefined->data.capacity ) {
+        redefined->data.memsize = 0;
       }
-      field->data.memsize = 0;
       continue;
     }
     group->data.capacity += field_size(field);
@@ -1335,7 +1330,9 @@ static struct symbol_elem_t *
   if( group->data.memsize == group->data.capacity ) group->data.memsize = 0;
 
   if( 0 < group->data.memsize && group->data.memsize < group->data.capacity ) {
-    warnx( "%s:%d: small capacity?\n\t%s", __func__, __LINE__, field_str(group) );
+    if( yydebug ) {
+      warnx( "%s:%d: small capacity?\n\t%s", __func__, __LINE__, field_str(group) );
+    }
     group->data.memsize = group->data.capacity;
   }