The following piece of code is rejected:
program tfe implicit none real ,dimension(1:4) :: x real ,dimension(0:3) :: y real ,dimension(-1:2) :: z call sub(x(:)) call sub(y(:)) call sub(z(:)) contains subroutine sub(a) implicit none real,dimension(1:4) :: a end subroutine sub end program tfe with these error messages: too_few_elements.f90:10.9: call sub(y(:)) 1 Warning: Actual argument contains too few elements for dummy argument 'a' (3/4) at (1) too_few_elements.f90:11.9: call sub(z(:)) 1 Warning: Actual argument contains too few elements for dummy argument 'a' (2/4) at (1) Seems like for arrays with the notation x(:) the actual size is miscomputed if they appear as an argument to a subroutine. Apparently this just happens for arrays whose lower bound is zero or less (y,z), while for positive lower bound everything is fine (x). Also there is no problem if the array is given in the form "y(0:3)" or just "y". The code above is accepted by gcc 4.1 and 4.2, but rejected by recent 4.3 trunk builds. So it seems to be a regression introduced in 4.3. The error messages come from interface.c(compare_actual_formal), line 1608. The size of the actual argument is computed by actual_size = get_expr_storage_size(a->expr); Maybe there is a problem in this routine? -- Summary: "Actual argument contains too few elements for dummy argument" is triggered for valid code Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jaydub66 at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32669