]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/50070 (Segmentation fault at size_binop_loc in fold-const.c)
authorJanus Weil <janus@gcc.gnu.org>
Wed, 17 Aug 2011 09:14:18 +0000 (11:14 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Wed, 17 Aug 2011 09:14:18 +0000 (11:14 +0200)
2011-08-17  Janus Weil  <janus@gcc.gnu.org>

PR fortran/50070
* resolve.c (resolve_fl_variable): Reject non-constant character lengths
in COMMON variables.

2011-08-17  Janus Weil  <janus@gcc.gnu.org>

PR fortran/50070
* gfortran.dg/common_13.f90: New.

From-SVN: r177825

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/common_13.f90 [new file with mode: 0644]

index 63d5327aad882b1044ce4c7f10fedf7eb9e941c5..d7f4b6d37d5007df04eb5d689b7f89deb7c3eca4 100644 (file)
@@ -1,3 +1,9 @@
+2011-08-17  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/50070
+       * resolve.c (resolve_fl_variable): Reject non-constant character lengths
+       in COMMON variables.
+
 2011-08-16  Tobias Burnus  <burnus@net-b.de>
            Dominique Dhumieres  <dominiq@lps.ens.fr>
 
index 27e3ce995ba997839272b0b7e696490209fb2ad1..7557ab8891d6e9bd76ae29d9c2358147ed7e8c55 100644 (file)
@@ -10169,15 +10169,22 @@ resolve_fl_variable (gfc_symbol *sym, int mp_flag)
 
       if (!gfc_is_constant_expr (e)
          && !(e->expr_type == EXPR_VARIABLE
-              && e->symtree->n.sym->attr.flavor == FL_PARAMETER)
-         && sym->ns->proc_name
-         && (sym->ns->proc_name->attr.flavor == FL_MODULE
-             || sym->ns->proc_name->attr.is_main_program)
-         && !sym->attr.use_assoc)
-       {
-         gfc_error ("'%s' at %L must have constant character length "
-                    "in this context", sym->name, &sym->declared_at);
-         return FAILURE;
+              && e->symtree->n.sym->attr.flavor == FL_PARAMETER))
+       {
+         if (!sym->attr.use_assoc && sym->ns->proc_name
+             && (sym->ns->proc_name->attr.flavor == FL_MODULE
+                 || sym->ns->proc_name->attr.is_main_program))
+           {
+             gfc_error ("'%s' at %L must have constant character length "
+                       "in this context", sym->name, &sym->declared_at);
+             return FAILURE;
+           }
+         if (sym->attr.in_common)
+           {
+             gfc_error ("COMMON variable '%s' at %L must have constant "
+                        "character length", sym->name, &sym->declared_at);
+             return FAILURE;
+           }
        }
     }
 
index f435f140b853e405a49baf70306620233e0b0e3a..1d070a8b433c0c42f31ece7b417e3224eff2d396 100644 (file)
@@ -1,3 +1,8 @@
+2011-08-17  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/50070
+       * gfortran.dg/common_13.f90: New.
+
 2011-08-16  Jason Merrill  <jason@redhat.com>
 
        PR c++/50086
diff --git a/gcc/testsuite/gfortran.dg/common_13.f90 b/gcc/testsuite/gfortran.dg/common_13.f90
new file mode 100644 (file)
index 0000000..07c78f1
--- /dev/null
@@ -0,0 +1,11 @@
+! { dg-do compile }
+!
+! PR 50070: Segmentation fault at size_binop_loc in fold-const.c
+!
+! Contributed by Vittorio Zecca <zeccav@gmail.com>
+
+subroutine sub
+  common n,z             ! { dg-error "must have constant character length" }
+  integer :: n
+  character(len=n) :: z
+end