diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f48729e34b2..4f807eaf299 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2009-08-14 Janus Weil + + PR fortran/41070 + * resolve.c (resolve_structure_cons): Make sure that ts.u.derived is + only used if type is BT_DERIVED. + 2009-08-13 Janus Weil PR fortran/40941 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 9baef621eac..ff32ae6e21d 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -830,8 +830,8 @@ resolve_structure_cons (gfc_expr *expr) /* See if the user is trying to invoke a structure constructor for one of the iso_c_binding derived types. */ - if (expr->ts.u.derived && expr->ts.u.derived->ts.is_iso_c && cons - && cons->expr != NULL) + if (expr->ts.type == BT_DERIVED && expr->ts.u.derived + && expr->ts.u.derived->ts.is_iso_c && cons && cons->expr != NULL) { gfc_error ("Components of structure constructor '%s' at %L are PRIVATE", expr->ts.u.derived->name, &(expr->where)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1a47faeef95..44329fb3c53 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-08-14 Janus Weil + + PR fortran/41070 + * gfortran.dg/structure_constructor_10.f90: New. + 2009-08-14 Olatunji Ruwase * gcc.dg/pragma-re-1.c: Supported on all platforms. diff --git a/gcc/testsuite/gfortran.dg/structure_constructor_10.f90 b/gcc/testsuite/gfortran.dg/structure_constructor_10.f90 new file mode 100644 index 00000000000..eed7fa3a9d2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/structure_constructor_10.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! PR 41070: [4.5 Regression] Error: Components of structure constructor '' at (1) are PRIVATE +! +! Contributed by Michael Richmond + +MODULE cdf_aux_mod +IMPLICIT NONE + +TYPE :: one_parameter + CHARACTER (8) :: name +END TYPE one_parameter + +TYPE :: the_distribution + CHARACTER (8) :: name +END TYPE the_distribution + +TYPE (the_distribution), PARAMETER :: the_beta = the_distribution('cdf_beta') +END MODULE cdf_aux_mod + +SUBROUTINE cdf_beta() + USE cdf_aux_mod + IMPLICIT NONE + CALL check_complements(the_beta%name) +END SUBROUTINE cdf_beta + +! { dg-final { cleanup-modules "cdf_aux_mod" } } +