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; }