re PR fortran/66045 (ICE on incorrect code with null)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Mon, 18 May 2015 22:21:08 +0000 (22:21 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Mon, 18 May 2015 22:21:08 +0000 (22:21 +0000)
2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/66045
* expr.c (gfc_check_assign):  Check for assignment of NULL() instead
of the (intended) pointer assignment.

2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/66045
* gfortran.dg/null1.f90: New test.

From-SVN: r223322

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

index 8f571b40b5505f5800563dafaa9b2046ad751b51..a8598a2004a7f7e5f8caa447cb71394f16397c57 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/66043
+       * gfortran.dg/storage_size_6.f90: New tests.
+
 2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/66044
index aa79243fa04b261e85f1bf3ac320429ed15f744d..a0c37566cfbf037d3f86b17e5532cd9bdba28ba6 100644 (file)
@@ -3128,19 +3128,22 @@ gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform)
        bad_proc = true;
 
       /* (ii) The assignment is in the main program; or  */
-      if (gfc_current_ns->proc_name->attr.is_main_program)
+      if (gfc_current_ns->proc_name
+         && gfc_current_ns->proc_name->attr.is_main_program)
        bad_proc = true;
 
       /* (iii) A module or internal procedure...  */
-      if ((gfc_current_ns->proc_name->attr.proc == PROC_INTERNAL
-          || gfc_current_ns->proc_name->attr.proc == PROC_MODULE)
+      if (gfc_current_ns->proc_name
+         && (gfc_current_ns->proc_name->attr.proc == PROC_INTERNAL
+             || gfc_current_ns->proc_name->attr.proc == PROC_MODULE)
          && gfc_current_ns->parent
          && (!(gfc_current_ns->parent->proc_name->attr.function
                || gfc_current_ns->parent->proc_name->attr.subroutine)
              || gfc_current_ns->parent->proc_name->attr.is_main_program))
        {
          /* ... that is not a function...  */
-         if (!gfc_current_ns->proc_name->attr.function)
+         if (gfc_current_ns->proc_name
+             && !gfc_current_ns->proc_name->attr.function)
            bad_proc = true;
 
          /* ... or is not an entry and has a different name.  */
index 9f5c0ba49ee2b7304b444ca80351ff019e5d20f5..1ae1f08f49c6bd2eeea57fa4bebdb99d54809080 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/66045
+       * gfortran.dg/null1.f90: New test.
+
 2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/66044
diff --git a/gcc/testsuite/gfortran.dg/null1.f90 b/gcc/testsuite/gfortran.dg/null1.f90
new file mode 100644 (file)
index 0000000..fc50f41
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! PR fortran/66045
+!
+! Original code from Gerhard Steinmetz
+! <gerhard dot steinmetz dot fortran at t-online dot de>
+program p
+   contains
+   integer :: null=null() ! { dg-error "NULL appears on right-hand side" }
+end