trans-expr.c (conv_parent_component_references): New function to build missing parent...
authorPaul Thomas <pault@gcc.gnu.org>
Tue, 29 Jul 2008 20:44:09 +0000 (20:44 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Tue, 29 Jul 2008 20:44:09 +0000 (20:44 +0000)
commit7d1f1e6144bab4e9e2fadc324c5213b415efb952
tree1d8aa1d99f6217a1f9fdc2522ae987cc7d2f9586
parente54cf1573e36c71c5277d59fd1c1915984b06432
trans-expr.c (conv_parent_component_references): New function to build missing parent references.

2008-07-29  Paul Thomas  <pault@gcc.gnu.org>

fortran/
* trans-expr.c (conv_parent_component_references): New function
to build missing parent references.
(gfc_conv_variable): Call it
* symbol.c (gfc_add_component): Check that component name in a
derived type extension does not appear in parent.
(gfc_find_component): For a derived type extension, check if
the component appears in the parent derived type by calling
self. Separate errors for private components and private types.
* decl.c (match_data_constant): Add extra arg to call to
gfc_match_structure_constructor.
(check_extended_derived_type): New function to check that a
parent derived type exists and that it is OK for exension.
(gfc_get_type_attr_spec): Add extra argument 'name' and return
it if extends is specified.
(gfc_match_derived_decl): Match derived type extension and
build a first component of the parent derived type if OK. Add
the f2k namespace if not present.
* gfortran.h : Add the extension attribute.
* module.c : Handle attribute 'extension'.
* match.h : Modify prototypes for gfc_get_type_attr_spec and
gfc_match_structure_constructor.
* primary.c (build_actual_constructor): New function extracted
from gfc_match_structure_constructor and modified to call self
iteratively to build derived type extensions, when f2k named
components are used.
(gfc_match_structure_constructor): Do not throw error for too
many components if a parent type is being handled. Use
gfc_find_component to generate errors for non-existent or
private components.  Iteratively call self for derived type
extensions so that parent constructor is built.  If extension
and components left over, throw error.
(gfc_match_rvalue): Add extra arg to call to
gfc_match_structure_constructor.
* trans-array.c (gfc_conv_resolve_dependencies): If lhs and rhs
are the same symbol, aliassing does not matter.
testsuite/
* gfortran.dg/extends_1.f03: New test.
* gfortran.dg/extends_2.f03: New test.
* gfortran.dg/extends_3.f03: New test.
* gfortran.dg/extends_4.f03: New test.
* gfortran.dg/extends_5.f03: New test.
* gfortran.dg/extends_6.f03: New test.
* gfortran.dg/private_type_6.f90: Modify error message.
* gfortran.dg/structure_constructor_7.f03: Modify error message.
* gfortran.dg/structure_constructor_8.f03: Modify error message.

From-SVN: r138275
20 files changed:
gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/fortran/gfortran.h
gcc/fortran/match.h
gcc/fortran/module.c
gcc/fortran/primary.c
gcc/fortran/symbol.c
gcc/fortran/trans-array.c
gcc/fortran/trans-expr.c
gcc/fortran/trans-io.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/extends_1.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/extends_2.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/extends_3.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/extends_4.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/extends_5.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/extends_6.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/private_type_6.f90
gcc/testsuite/gfortran.dg/structure_constructor_7.f03
gcc/testsuite/gfortran.dg/structure_constructor_8.f03