From 3f75cac2238688b5654cb70c046ae2c1711a0066 Mon Sep 17 00:00:00 2001 From: janus Date: Fri, 14 Aug 2009 22:02:45 +0000 Subject: [PATCH] 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-14 Janus Weil PR fortran/41070 * gfortran.dg/structure_constructor_10.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150781 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 6 +++++ gcc/fortran/resolve.c | 4 ++-- gcc/testsuite/ChangeLog | 5 ++++ .../gfortran.dg/structure_constructor_10.f90 | 28 ++++++++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/structure_constructor_10.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f48729e..4f807ea 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 9baef62..ff32ae6 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 1a47fae..44329fb 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 0000000..eed7fa3 --- /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" } } + -- 2.7.4