http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50815

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice-on-valid-code, patch
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2011-10-26
                 CC|                            |burnus at gcc dot gnu.org
     Ever Confirmed|0                           |1

--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-10-26 
11:36:59 UTC ---
With the trunk (i.e. tree checking) one gets:
test.f90:1:0: error: mismatching comparison operand types
integer(kind=4) *
integer(kind=4)
D.1725 = _string != .string;
test.f90:1:0: internal compiler error: verify_gimple failed

The issue is that the check "Actual string length does not match the declared
one for dummy argument" does not make sense for assumed-shape arrays.

--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -4654,8 +4654,10 @@ add_argument_checking (stmtblock_t *block, gfc_symbol
*sym)
           if the actual argument is (part of) an array, but only if the
           dummy argument is an array. (See "Sequence association" in
           Section 12.4.1.4 for F95 and 12.4.1.5 for F2003.)  */
-       if (fsym->attr.pointer || fsym->attr.allocatable
-           || (fsym->as && fsym->as->type == AS_ASSUMED_SHAPE))
+       if (fsym->ts.deferred)
+         continue;
+       else if (fsym->attr.pointer || fsym->attr.allocatable
+                || (fsym->as && fsym->as->type == AS_ASSUMED_SHAPE))
          {
            comparison = NE_EXPR;
            message = _("Actual string length does not match the declared one"

Reply via email to