]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/43039 ([lto/-fwhole-file] fortran-dev - ICE in gfc_conv_component_ref...
authorPaul Thomas <pault@gcc.gnu.org>
Thu, 18 Mar 2010 21:23:35 +0000 (21:23 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Thu, 18 Mar 2010 21:23:35 +0000 (21:23 +0000)
2010-03-18  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/43039
        * trans-expr.c (conv_parent_component_references): Ensure that
'dt' has a backend_decl.

        PR fortran/43043
        * trans-expr.c (gfc_conv_structure): Ensure that the derived
type has a backend_decl.

        PR fortran/43044
        * resolve.c (resolve_global_procedure): Check that the 'cl'
structure is not NULL.

From-SVN: r157552

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/fortran/trans-expr.c

index 231deaa758231a1abe760b1b9d9f2e9436ab5012..dc155fa1574def7ed14092452217e8337ef592fa 100644 (file)
@@ -1,3 +1,17 @@
+2010-03-18  Paul Thomas  <pault@gcc.gnu.org>
+
+        PR fortran/43039
+        * trans-expr.c (conv_parent_component_references): Ensure that
+       'dt' has a backend_decl.
+
+        PR fortran/43043
+        * trans-expr.c (gfc_conv_structure): Ensure that the derived
+       type has a backend_decl.
+
+        PR fortran/43044
+        * resolve.c (resolve_global_procedure): Check that the 'cl'
+       structure is not NULL.
+
 2010-03-18  Shujing Zhao  <pearly.zhao@oracle.com>
 
        * lang.opt (-ffixed-line-length-, ffree-line-length-): Remove
index de316da840ddcc6fd482acb5aee21dee4bf3e5d5..24ec7a8a1de8b8ade767f5b8658a8266acf78be9 100644 (file)
@@ -1851,12 +1851,13 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
      
       /* Non-assumed length character functions.  */
       if (sym->attr.function && sym->ts.type == BT_CHARACTER
-         && gsym->ns->proc_name->ts.u.cl->length != NULL)
+           && gsym->ns->proc_name->ts.u.cl != NULL
+           && gsym->ns->proc_name->ts.u.cl->length != NULL)
        {
          gfc_charlen *cl = sym->ts.u.cl;
 
          if (!sym->attr.entry_master && sym->attr.if_source == IFSRC_UNKNOWN
-              && cl && cl->length && cl->length->expr_type != EXPR_CONSTANT)
+                && cl && cl->length && cl->length->expr_type != EXPR_CONSTANT)
            {
               gfc_error ("Nonconstant character-length function '%s' at %L "
                         "must have an explicit interface", sym->name,
index abc2a24318a943838b180b8817328cd424ac6915..b9ea5579ac8e970cf41cf6486f14187e63cd4313 100644 (file)
@@ -507,6 +507,9 @@ conv_parent_component_references (gfc_se * se, gfc_ref * ref)
   parent.u.c.sym = dt;
   parent.u.c.component = dt->components;
 
+  if (dt->backend_decl == NULL)
+    gfc_get_derived_type (dt);
+
   if (dt->attr.extension && dt->components)
     {
       if (dt->attr.is_class)
@@ -4454,6 +4457,8 @@ gfc_conv_structure (gfc_se * se, gfc_expr * expr, int init)
        {
          gfc_component *data;
          data = gfc_find_component (cm->ts.u.derived, "$data", true, true);
+         if (!data->backend_decl)
+           gfc_get_derived_type (cm->ts.u.derived);
          val = gfc_conv_initializer (c->expr, &cm->ts,
                                      TREE_TYPE (data->backend_decl),
                                      data->attr.dimension,