The attached patch and ChangeLog entries are for the
backporting of 25 patches from trunk to the 6-branch.
The bugzilla PR's contained in the patch are

  fortran/41922 fortran/60774 fortran/61318 fortran/68566 fortran/69514
  fortran/69867 fortran/69962 fortran/70006 fortran/71067 fortran/71730
  fortran/71799 fortran/71859 fortran/71862 fortran/77260 fortran/77351
  fortran/77372 fortran/77380 fortran/77391 fortran/77420 fortran/77429 
  fortran/77460 fortran/77506 fortran/77507 fortran/77612 fortran/77694

The patch has been bootstrapped and regression tested on
x86_64-*-freebsd.  Ok to commit?

-- 
Steve
2016-09-28  Steven G. Kargl  <ka...@gcc.gnu.org>

        PR fortran/41922
        * target-memory.c (expr_to_char): Pass in locus and use it in error
        messages.
        (gfc_merge_initializers): Ditto.
        * target-memory.h: Update prototype for gfc_merge_initializers ().
        * trans-common.c (get_init_field): Use the correct locus.

        PR fortran/60774
        * parse.c (next_free,next_fixed): Issue error for statement label
        without a statement.

        PR fortran/61318
        * interface.c (compare_parameter): Use better locus for error message.

        PR fortran/68566
        * check.c (gfc_check_reshape): Check for constant expression.

        PR fortran/69514
        * array.c (gfc_match_array_constructor):  If type-spec is present,
        walk the array constructor performing possible conversions for 
        numeric types.

        PR fortran/69867
        * decl.c (build_struct): Ensure that pointers point to something.

        PR fortran/69962
        * decl.c (gfc_set_constant_character_len):  if expr is not
        constant issue an error instead of an ICE.

        PR fortran/70006
        * io.c (gfc_resolve_dt): Use correct locus.
        * resolve.c (resolve_branch): Ditto.

        PR fortran/71067
        * decl.c (match_data_constant): On error, set 'result' to NULL.

        PR fortran/71730
        * decl.c (char_len_param_value): Check return value of
        gfc_reduce_init_expr().

        PR fortran/71799
        * resolve.c(gfc_resolve_iterator): Failure of type conversion need
        not ICE.

        PR fortran/71859
        * check.c(numeric_check): Prevent ICE.  Issue error for invalid
        subroutine as an actual argument when numeric argument is expected.

        PR fortran/71862
        * class.c: Remove assert.  Iterate over component only if non-null.

        PR fortran/77260
        * gcc/fortran/trans-decl.c (generate_local_decl): Suppress warning
        for unused variable if symbol is entry point.

        PR fortran/77351
        * frontend-passes.c (remove_trim,combine_array_constructor): Check for
        NULL pointer.

        PR fortran/77372
        simplify.c (simplify_ieee_selected_real_kind): Check for NULL pointers.

        PR fortran/77380
        * dependency.c (gfc_check_dependency): Do not assert with
        -fcoarray=lib.

        PR fortran/77391
        * resolve.c (deferred_requirements): New function to check F2008:C402.
        (resolve_fl_variable,resolve_fl_parameter): Use it.

        PR fortran/77420
        * trans-common.c:  Handle array elements in equivalence when
        the lower and upper bounds of array spec are NULL.

        PR fortran/77429 
        * dependency.c (gfc_check_dependency):  Convert gcc_assert() to
        a conditional and possible call to  gfc_internal_error().

        PR fortran/77460
        * simplify.c (simplify_transformation_to_scalar):  On error, result
        may be NULL, simply return.

        PR fortran/77506
        * array.c (gfc_match_array_constructor): CHARACTER(len=*) cannot
        appear in an array constructor.

        PR fortran/77507
        * intrinsic.c (add_functions):  Use correct keyword.

        PR fortran/77612
        * decl.c (char_len_param_value): Check parent namespace for 
        seen_implicit_none.

        PR fortran/77694
        * frontend-passes.c (optimize_binop_array_assignment): Check pointer
        for NULL.

2016-09-28  Steven G. Kargl  <ka...@gcc.gnu.org>

        PR fortran/77507
        * ieee/ieee_arithmetic.F90 (IEEE_VALUE_4,IEEE_VALUE_8,IEEE_VALULE_10,
        IEEE_VALUE_16):  Use correct keyword.

2016-09-28  Steven G. Kargl  <ka...@gcc.gnu.org>

        PR fortran/41922
        * gfortran.dg/equiv_constraint_5.f90: Adjust the error message.
        * gfortran.dg/equiv_constraint_7.f90: Ditto.
        * gfortran.dg/pr41922.f90: New test.

        PR fortran/60774
        * gfortran.dg/empty_label.f: Adjust test for new error message.
        * gfortran.dg/empty_label.f90: Ditto.
        * gfortran.dg/empty_label_typedecl.f90: Ditto.
        * gfortran.dg/label_3.f90: Deleted (redundant with empty_label.f90).
        * gfortran.dg/warnings_are_errors_1.f90: Remove invalid statement label.

        PR fortran/61318
        * gfortran.dg/pr61318.f90: New test.

        PR fortran/68566
        * gfortran.dg/pr68566.f90: new test.

        PR fortran/69514
        * gfortran.dg/pr69514_1.f90: New test.
        * gfortran.dg/pr69514_2.f90: New test.

        PR fortran/69867
        * gfortran.dg/pr69867.f90: New test.

        PR fortran/69962
        * gfortran.dg/pr69962.f90: New test.

        PR fortran/70006
        * gfortran.dg/pr70006.f90: New test.

        PR fortran/71067
        * gfortran.dg/pr71067_1.f90: New test.
        * gfortran.dg/pr71067_2.f90: Ditto.

        PR fortran/71730
        * gfortran.dg/pr71730.f90: New test.
        * gfortran.dg/bounds_check_strlen_2.f90: Fix invalid code.
        * gfortran.dg/array_constructor_27.f03: Update dg-error message.
        * gfortran.dg/array_constructor_26.f03: Ditto.

        PR fortran/71799
        * gfortran.dg/pr71799.f90: New test.

        PR fortran/71859
        * gfortran.dg/pr71859.f90: New test.
        * gfortran.dg/intrinsic_numeric_arg.f: Update error message.
        * gfortran.dg/coarray_collectives_1.f90: Ditto.

        PR fortran/71862
        * gfortran.dg/pr71862.f90: New test.

        PR fortran/77260
        * gfortran.dg/pr77260_1.f90: New test.
        * gfortran.dg/pr77260_2.f90: Ditto.

        PR fortran/77351
        * gfortran.dg/pr77351.f90: New test.

        PR fortran/77372
        gfortran.dg/pr77372.f90: New test.

        PR fortran/77380
        * gfortran.dg/pr77380.f90: New test.

        PR fortran/77391
        * gfortran.dg/pr77391.f90: New test.

        PR fortran/77420
        * gfortran.dg/pr77420_1.f90: New test.
        * gfortran.dg/pr77420_2.f90: Ditto.
        * gfortran.dg/pr77420_3.f90: New test. Requires ...
        * gfortran.dg/pr77420_4.f90: this file.

        PR fortran/77429 
        * gfortran.dg/pr77429.f90: New test.

        PR fortran/77460
        * gfortran.dg/pr77460.f90: New test.

        PR fortran/77506
        * gfortran.dg/pr77506.f90: New test.

        PR fortran/77507
        * gfortran.dg/ieee/pr77507.f90: New test.

        PR fortran/77612
        * gfortran.dg/pr77612.f90: New test.

        PR fortran/77694
        * gfortran.dg/pr77694.f90: New test.

Index: gcc/fortran/array.c
===================================================================
--- gcc/fortran/array.c	(revision 240590)
+++ gcc/fortran/array.c	(working copy)
@@ -1072,6 +1072,7 @@ match_array_cons_element (gfc_constructo
 match
 gfc_match_array_constructor (gfc_expr **result)
 {
+  gfc_constructor *c;
   gfc_constructor_base head, new_cons;
   gfc_undo_change_set changed_syms;
   gfc_expr *expr;
@@ -1124,6 +1125,15 @@ gfc_match_array_constructor (gfc_expr **
 	      gfc_restore_last_undo_checkpoint ();
 	      goto cleanup;
 	    }
+
+	  if (ts.type == BT_CHARACTER
+	      && ts.u.cl && !ts.u.cl->length && !ts.u.cl->length_from_typespec)
+	    {
+	      gfc_error ("Type-spec at %L cannot contain an asterisk for a "
+			 "type parameter", &where);
+	      gfc_restore_last_undo_checkpoint ();
+	      goto cleanup;
+	    }
 	}
     }
   else if (m == MATCH_ERROR)
@@ -1177,8 +1187,6 @@ done:
 	 be converted.  See PR fortran/67803.  */
       if (ts.type == BT_CHARACTER)
 	{
-	  gfc_constructor *c;
-
 	  c = gfc_constructor_first (head);
 	  for (; c; c = gfc_constructor_next (c))
 	    {
@@ -1201,6 +1209,14 @@ done:
 		}
 	    }
 	}
+
+      /* Walk the constructor and ensure type conversion for numeric types.  */
+      if (gfc_numeric_ts (&ts))
+	{
+	  c = gfc_constructor_first (head);
+	  for (; c; c = gfc_constructor_next (c))
+	    gfc_convert_type (c->expr, &ts, 1);
+	}
     }
   else
     expr = gfc_get_array_expr (BT_UNKNOWN, 0, &where);
Index: gcc/fortran/check.c
===================================================================
--- gcc/fortran/check.c	(revision 240590)
+++ gcc/fortran/check.c	(working copy)
@@ -72,6 +72,11 @@ type_check (gfc_expr *e, int n, bt type)
 static bool
 numeric_check (gfc_expr *e, int n)
 {
+  /* Users sometime use a subroutine designator as an actual argument to
+     an intrinsic subprogram that expects an argument with a numeric type.  */
+  if (e->symtree && e->symtree->n.sym->attr.subroutine)
+    goto error;
+
   if (gfc_numeric_ts (&e->ts))
     return true;
 
@@ -86,7 +91,9 @@ numeric_check (gfc_expr *e, int n)
       return true;
     }
 
-  gfc_error ("%qs argument of %qs intrinsic at %L must be a numeric type",
+error:
+
+  gfc_error ("%qs argument of %qs intrinsic at %L must have a numeric type",
 	     gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
 	     &e->where);
 
@@ -3820,7 +3827,7 @@ gfc_check_reshape (gfc_expr *source, gfc
       if (!type_check (order, 3, BT_INTEGER))
 	return false;
 
-      if (order->expr_type == EXPR_ARRAY)
+      if (order->expr_type == EXPR_ARRAY && gfc_is_constant_expr (order))
 	{
 	  int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
 	  gfc_expr *e;
Index: gcc/fortran/class.c
===================================================================
--- gcc/fortran/class.c	(revision 240590)
+++ gcc/fortran/class.c	(working copy)
@@ -238,12 +238,14 @@ gfc_add_component_ref (gfc_expr *e, cons
     /* Avoid losing memory.  */
     gfc_free_ref_list (*tail);
   c = gfc_find_component (derived, name, true, true, tail);
-  gcc_assert (c);
-  for (ref = *tail; ref->next; ref = ref->next)
-    ;
-  ref->next = next;
-  if (!next)
-    e->ts = c->ts;
+
+  if (c) {
+    for (ref = *tail; ref->next; ref = ref->next)
+      ;
+    ref->next = next;
+    if (!next)
+      e->ts = c->ts;
+  }
 }
 
 
Index: gcc/fortran/decl.c
===================================================================
--- gcc/fortran/decl.c	(revision 240590)
+++ gcc/fortran/decl.c	(working copy)
@@ -395,6 +395,7 @@ match_data_constant (gfc_expr **result)
     {
       gfc_error ("Symbol %qs must be a PARAMETER in DATA statement at %C",
 		 name);
+      *result = NULL;
       return MATCH_ERROR;
     }
   else if (dt_sym && gfc_fl_struct (dt_sym->attr.flavor))
@@ -905,6 +906,7 @@ char_len_param_value (gfc_expr **expr, b
     goto syntax;
   else if ((*expr)->expr_type == EXPR_VARIABLE)
     {
+      bool t;
       gfc_expr *e;
 
       e = gfc_copy_expr (*expr);
@@ -916,7 +918,16 @@ char_len_param_value (gfc_expr **expr, b
 	  && e->ref->u.ar.dimen_type[0] == DIMEN_RANGE)
 	goto syntax;
 
-      gfc_reduce_init_expr (e);
+      t = gfc_reduce_init_expr (e);
+
+      if (!t && e->ts.type == BT_UNKNOWN
+	  && e->symtree->n.sym->attr.untyped == 1
+	  && (e->symtree->n.sym->ns->seen_implicit_none == 1
+	      || e->symtree->n.sym->ns->parent->seen_implicit_none == 1))
+	{
+	  gfc_free_expr (e);
+	  goto syntax;
+	}
 
       if ((e->ref && e->ref->type == REF_ARRAY
 	   && e->ref->u.ar.type != AR_ELEMENT)
@@ -1485,10 +1496,14 @@ gfc_set_constant_character_len (int len,
   gfc_char_t *s;
   int slen;
 
-  gcc_assert (expr->expr_type == EXPR_CONSTANT);
-
   if (expr->ts.type != BT_CHARACTER)
     return;
+ 
+  if (expr->expr_type != EXPR_CONSTANT)
+    {
+      gfc_error_now ("CHARACTER length must be a constant at %L", &expr->where);
+      return;
+    }
 
   slen = expr->value.character.length;
   if (len != slen)
@@ -1912,8 +1927,10 @@ build_struct (const char *name, gfc_char
 
       if (c->initializer->expr_type == EXPR_CONSTANT)
 	gfc_set_constant_character_len (len, c->initializer, -1);
-      else if (mpz_cmp (c->ts.u.cl->length->value.integer,
-			c->initializer->ts.u.cl->length->value.integer))
+      else if (c->initializer
+		&& c->initializer->ts.u.cl
+		&& mpz_cmp (c->ts.u.cl->length->value.integer,
+			    c->initializer->ts.u.cl->length->value.integer))
 	{
 	  gfc_constructor *ctor;
 	  ctor = gfc_constructor_first (c->initializer->value.constructor);
Index: gcc/fortran/dependency.c
===================================================================
--- gcc/fortran/dependency.c	(revision 240590)
+++ gcc/fortran/dependency.c	(working copy)
@@ -1252,7 +1252,14 @@ gfc_check_dependency (gfc_expr *expr1, g
   gfc_constructor *c;
   int n;
 
-  gcc_assert (expr1->expr_type == EXPR_VARIABLE);
+  /* -fcoarray=lib can end up here with expr1->expr_type set to EXPR_FUNCTION
+     and a reference to _F.caf_get, so skip the assert.  */
+  if (expr1->expr_type == EXPR_FUNCTION
+      && strcmp (expr1->value.function.name, "_F.caf_get") == 0)
+    return 0;
+
+  if (expr1->expr_type != EXPR_VARIABLE)
+    gfc_internal_error ("gfc_check_dependency: expecting an EXPR_VARIABLE");
 
   switch (expr2->expr_type)
     {
Index: gcc/fortran/frontend-passes.c
===================================================================
--- gcc/fortran/frontend-passes.c	(revision 240590)
+++ gcc/fortran/frontend-passes.c	(working copy)
@@ -1061,6 +1061,9 @@ optimize_binop_array_assignment (gfc_cod
 {
   gfc_expr *e;
 
+  if (!*rhs)
+    return false;
+
   e = *rhs;
   if (e->expr_type == EXPR_OP)
     {
@@ -1137,6 +1140,8 @@ remove_trim (gfc_expr *rhs)
   bool ret;
 
   ret = false;
+  if (!rhs)
+    return ret;
 
   /* Check for a // b // trim(c).  Looping is probably not
      necessary because the parser usually generates
@@ -1274,6 +1279,9 @@ combine_array_constructor (gfc_expr *e)
   op1 = e->value.op.op1;
   op2 = e->value.op.op2;
 
+  if (!op1 || !op2)
+    return false;
+
   if (op1->expr_type == EXPR_ARRAY && op2->rank == 0)
     scalar_first = false;
   else if (op2->expr_type == EXPR_ARRAY && op1->rank == 0)
Index: gcc/fortran/interface.c
===================================================================
--- gcc/fortran/interface.c	(revision 240590)
+++ gcc/fortran/interface.c	(working copy)
@@ -2146,7 +2146,7 @@ compare_parameter (gfc_symbol *formal, g
     {
       if (where)
 	gfc_error ("Type mismatch in argument %qs at %L; passed %s to %s",
-		   formal->name, &actual->where, gfc_typename (&actual->ts),
+		   formal->name, where, gfc_typename (&actual->ts),
 		   gfc_typename (&formal->ts));
       return 0;
     }
Index: gcc/fortran/intrinsic.c
===================================================================
--- gcc/fortran/intrinsic.c	(revision 240590)
+++ gcc/fortran/intrinsic.c	(working copy)
@@ -1239,7 +1239,8 @@ add_functions (void)
     *z = "z", *ln = "len", *ut = "unit", *han = "handler",
     *num = "number", *tm = "time", *nm = "name", *md = "mode",
     *vl = "values", *p1 = "path1", *p2 = "path2", *com = "command",
-    *ca = "coarray", *sub = "sub", *dist = "distance", *failed="failed";
+    *ca = "coarray", *sub = "sub", *dist = "distance", *failed="failed",
+    *c_ptr_1 = "c_ptr_1", *c_ptr_2 = "c_ptr_2";
 
   int di, dr, dd, dl, dc, dz, ii;
 
@@ -2811,8 +2812,8 @@ add_functions (void)
   /* The following functions are part of ISO_C_BINDING.  */
   add_sym_2 ("c_associated", GFC_ISYM_C_ASSOCIATED, CLASS_INQUIRY, ACTUAL_NO,
 	     BT_LOGICAL, dl, GFC_STD_F2003, gfc_check_c_associated, NULL, NULL,
-	     "C_PTR_1", BT_VOID, 0, REQUIRED,
-	     "C_PTR_2", BT_VOID, 0, OPTIONAL);
+	     c_ptr_1, BT_VOID, 0, REQUIRED,
+	     c_ptr_2, BT_VOID, 0, OPTIONAL);
   make_from_module();
 
   add_sym_1 ("c_loc", GFC_ISYM_C_LOC, CLASS_INQUIRY, ACTUAL_NO,
Index: gcc/fortran/io.c
===================================================================
--- gcc/fortran/io.c	(revision 240590)
+++ gcc/fortran/io.c	(working copy)
@@ -3052,7 +3052,7 @@ gfc_resolve_dt (gfc_dt *dt, locus *loc)
       && dt->format_label->defined == ST_LABEL_UNKNOWN)
     {
       gfc_error ("FORMAT label %d at %L not defined", dt->format_label->value,
-		 &dt->format_label->where);
+		 loc);
       return false;
     }
 
Index: gcc/fortran/parse.c
===================================================================
--- gcc/fortran/parse.c	(revision 240590)
+++ gcc/fortran/parse.c	(working copy)
@@ -1071,13 +1071,8 @@ next_free (void)
 	    }
 
 	  if (gfc_match_eos () == MATCH_YES)
-	    {
-	      gfc_warning_now (0, "Ignoring statement label in empty statement "
-			       "at %L", &label_locus);
-	      gfc_free_st_label (gfc_statement_label);
-	      gfc_statement_label = NULL;
-	      return ST_NONE;
-	    }
+	    gfc_error_now ("Statement label without statement at %L",
+			   &label_locus);
 	}
     }
   else if (c == '!')
@@ -1333,8 +1328,7 @@ next_fixed (void)
 
 blank_line:
   if (digit_flag)
-    gfc_warning_now (0, "Ignoring statement label in empty statement at %L",
-		     &label_locus);
+    gfc_error_now ("Statement label without statement at %L", &label_locus);
 
   gfc_current_locus.lb->truncated = 0;
   gfc_advance_line ();
Index: gcc/fortran/resolve.c
===================================================================
--- gcc/fortran/resolve.c	(revision 240590)
+++ gcc/fortran/resolve.c	(working copy)
@@ -6508,15 +6508,15 @@ gfc_resolve_iterator (gfc_iterator *iter
   /* Convert start, end, and step to the same type as var.  */
   if (iter->start->ts.kind != iter->var->ts.kind
       || iter->start->ts.type != iter->var->ts.type)
-    gfc_convert_type (iter->start, &iter->var->ts, 2);
+    gfc_convert_type (iter->start, &iter->var->ts, 1);
 
   if (iter->end->ts.kind != iter->var->ts.kind
       || iter->end->ts.type != iter->var->ts.type)
-    gfc_convert_type (iter->end, &iter->var->ts, 2);
+    gfc_convert_type (iter->end, &iter->var->ts, 1);
 
   if (iter->step->ts.kind != iter->var->ts.kind
       || iter->step->ts.type != iter->var->ts.type)
-    gfc_convert_type (iter->step, &iter->var->ts, 2);
+    gfc_convert_type (iter->step, &iter->var->ts, 1);
 
   if (iter->start->expr_type == EXPR_CONSTANT
       && iter->end->expr_type == EXPR_CONSTANT
@@ -8936,7 +8936,7 @@ resolve_branch (gfc_st_label *label, gfc
   if (label->defined == ST_LABEL_UNKNOWN)
     {
       gfc_error ("Label %d referenced at %L is never defined", label->value,
-		 &label->where);
+		 &code->loc);
       return;
     }
 
@@ -11495,6 +11495,27 @@ resolve_fl_variable_derived (gfc_symbol 
 }
 
 
+/* F2008, C402 (R401):  A colon shall not be used as a type-param-value
+   except in the declaration of an entity or component that has the POINTER
+   or ALLOCATABLE attribute.  */
+
+static bool
+deferred_requirements (gfc_symbol *sym)
+{
+  if (sym->ts.deferred
+      && !(sym->attr.pointer
+	   || sym->attr.allocatable
+	   || sym->attr.omp_udr_artificial_var))
+    {
+      gfc_error ("Entity %qs at %L has a deferred type parameter and "
+		 "requires either the POINTER or ALLOCATABLE attribute",
+		 sym->name, &sym->declared_at);
+      return false;
+    }
+  return true;
+}
+
+
 /* Resolve symbols with flavor variable.  */
 
 static bool
@@ -11534,17 +11555,8 @@ resolve_fl_variable (gfc_symbol *sym, in
     }
 
   /* Constraints on deferred type parameter.  */
-  if (sym->ts.deferred
-      && !(sym->attr.pointer
-	   || sym->attr.allocatable
-	   || sym->attr.omp_udr_artificial_var))
-    {
-      gfc_error ("Entity %qs at %L has a deferred type parameter and "
-		 "requires either the pointer or allocatable attribute",
-		     sym->name, &sym->declared_at);
-      specification_expr = saved_specification_expr;
-      return false;
-    }
+  if (!deferred_requirements (sym))
+    return false;
 
   if (sym->ts.type == BT_CHARACTER)
     {
@@ -13663,6 +13675,10 @@ resolve_fl_parameter (gfc_symbol *sym)
       return false;
     }
 
+  /* Constraints on deferred type parameter.  */
+  if (!deferred_requirements (sym))
+    return false;
+
   /* Make sure a parameter that has been implicitly typed still
      matches the implicit type, since PARAMETER statements can precede
      IMPLICIT statements.  */
Index: gcc/fortran/simplify.c
===================================================================
--- gcc/fortran/simplify.c	(revision 240590)
+++ gcc/fortran/simplify.c	(working copy)
@@ -489,6 +489,8 @@ simplify_transformation_to_scalar (gfc_e
 	}
 
       result = op (result, gfc_copy_expr (a));
+      if (!result)
+	return result;
     }
 
   return result;
@@ -7043,9 +7045,17 @@ gfc_simplify_compiler_version (void)
 gfc_expr *
 simplify_ieee_selected_real_kind (gfc_expr *expr)
 {
-  gfc_actual_arglist *arg = expr->value.function.actual;
-  gfc_expr *p = arg->expr, *q = arg->next->expr,
-	   *rdx = arg->next->next->expr;
+  gfc_actual_arglist *arg;
+  gfc_expr *p = NULL, *q = NULL, *rdx = NULL;
+
+  arg = expr->value.function.actual;
+  p = arg->expr;
+  if (arg->next)
+    {
+      q = arg->next->expr;
+      if (arg->next->next)
+	rdx = arg->next->next->expr;
+    }
 
   /* Currently, if IEEE is supported and this module is built, it means
      all our floating-point types conform to IEEE. Hence, we simply handle
Index: gcc/fortran/target-memory.c
===================================================================
--- gcc/fortran/target-memory.c	(revision 240590)
+++ gcc/fortran/target-memory.c	(working copy)
@@ -639,7 +639,8 @@ gfc_target_interpret_expr (unsigned char
    error.  */
 
 static size_t
-expr_to_char (gfc_expr *e, unsigned char *data, unsigned char *chk, size_t len)
+expr_to_char (gfc_expr *e, locus *loc,
+	      unsigned char *data, unsigned char *chk, size_t len)
 {
   int i;
   int ptr;
@@ -663,7 +664,7 @@ expr_to_char (gfc_expr *e, unsigned char
 	    continue;
 	  ptr = TREE_INT_CST_LOW(DECL_FIELD_OFFSET(cmp->backend_decl))
 	    + TREE_INT_CST_LOW(DECL_FIELD_BIT_OFFSET(cmp->backend_decl))/8;
-	  expr_to_char (c->expr, &data[ptr], &chk[ptr], len);
+	  expr_to_char (c->expr, loc, &data[ptr], &chk[ptr], len);
 	}
       return len;
     }
@@ -674,12 +675,16 @@ expr_to_char (gfc_expr *e, unsigned char
   buffer = (unsigned char*)alloca (len);
   len = gfc_target_encode_expr (e, buffer, len);
 
-    for (i = 0; i < (int)len; i++)
+  for (i = 0; i < (int)len; i++)
     {
       if (chk[i] && (buffer[i] != data[i]))
 	{
-	  gfc_error ("Overlapping unequal initializers in EQUIVALENCE "
-		     "at %L", &e->where);
+	  if (loc)
+	    gfc_error ("Overlapping unequal initializers in EQUIVALENCE "
+			"at %L", loc);
+	  else
+	    gfc_error ("Overlapping unequal initializers in EQUIVALENCE "
+			"at %C");
 	  return 0;
 	}
       chk[i] = 0xFF;
@@ -695,7 +700,8 @@ expr_to_char (gfc_expr *e, unsigned char
    the union declaration.  */
 
 size_t
-gfc_merge_initializers (gfc_typespec ts, gfc_expr *e, unsigned char *data,
+gfc_merge_initializers (gfc_typespec ts, gfc_expr *e, locus *loc,
+			unsigned char *data,
 			unsigned char *chk, size_t length)
 {
   size_t len = 0;
@@ -705,8 +711,7 @@ gfc_merge_initializers (gfc_typespec ts,
     {
     case EXPR_CONSTANT:
     case EXPR_STRUCTURE:
-      len = expr_to_char (e, &data[0], &chk[0], length);
-
+      len = expr_to_char (e, loc, &data[0], &chk[0], length);
       break;
 
     case EXPR_ARRAY:
@@ -718,7 +723,7 @@ gfc_merge_initializers (gfc_typespec ts,
 	  if (mpz_cmp_si (c->offset, 0) != 0)
 	    len = elt_size * (size_t)mpz_get_si (c->offset);
 
-	  len = len + gfc_merge_initializers (ts, c->expr, &data[len],
+	  len = len + gfc_merge_initializers (ts, c->expr, loc, &data[len],
 					      &chk[len], length - len);
 	}
       break;
Index: gcc/fortran/target-memory.h
===================================================================
--- gcc/fortran/target-memory.h	(revision 240590)
+++ gcc/fortran/target-memory.h	(working copy)
@@ -44,7 +44,7 @@ int gfc_interpret_derived (unsigned char
 int gfc_target_interpret_expr (unsigned char *, size_t, gfc_expr *, bool);
 
 /* Merge overlapping equivalence initializers for trans-common.c. */
-size_t gfc_merge_initializers (gfc_typespec, gfc_expr *,
+size_t gfc_merge_initializers (gfc_typespec, gfc_expr *, locus *,
 			       unsigned char *, unsigned char *,
 			       size_t);
 
Index: gcc/fortran/trans-common.c
===================================================================
--- gcc/fortran/trans-common.c	(revision 240590)
+++ gcc/fortran/trans-common.c	(working copy)
@@ -532,10 +532,15 @@ get_init_field (segment_info *head, tree
   memset (chk, '\0', (size_t)length);
   for (s = head; s; s = s->next)
     if (s->sym->value)
-      gfc_merge_initializers (s->sym->ts, s->sym->value,
+      {
+	locus *loc = NULL;
+	if (s->sym->ns->equiv && s->sym->ns->equiv->eq)
+	  loc = &s->sym->ns->equiv->eq->expr->where;
+	gfc_merge_initializers (s->sym->ts, s->sym->value, loc,
 			      &data[s->offset],
 			      &chk[s->offset],
 			     (size_t)s->length);
+      }
   
   for (i = 0; i < length; i++)
     CONSTRUCTOR_APPEND_ELT (v, NULL, build_int_cst (type, data[i]));
@@ -800,13 +805,21 @@ element_number (gfc_array_ref *ar)
       if (ar->dimen_type[i] != DIMEN_ELEMENT)
         gfc_internal_error ("element_number(): Bad dimension type");
 
-      mpz_sub (n, *get_mpz (ar->start[i]), *get_mpz (as->lower[i]));
+      if (as && as->lower[i])
+	mpz_sub (n, *get_mpz (ar->start[i]), *get_mpz (as->lower[i]));
+      else
+	mpz_sub_ui (n, *get_mpz (ar->start[i]), 1);
  
       mpz_mul (n, n, multiplier);
       mpz_add (offset, offset, n);
  
-      mpz_sub (extent, *get_mpz (as->upper[i]), *get_mpz (as->lower[i]));
-      mpz_add_ui (extent, extent, 1);
+      if (as && as->upper[i] && as->lower[i])
+	{
+	  mpz_sub (extent, *get_mpz (as->upper[i]), *get_mpz (as->lower[i]));
+	  mpz_add_ui (extent, extent, 1);
+	}
+      else
+	mpz_set_ui (extent, 0);
  
       if (mpz_sgn (extent) < 0)
         mpz_set_ui (extent, 0);
Index: gcc/fortran/trans-decl.c
===================================================================
--- gcc/fortran/trans-decl.c	(revision 240590)
+++ gcc/fortran/trans-decl.c	(working copy)
@@ -5279,9 +5279,19 @@ generate_local_decl (gfc_symbol * sym)
 	    }
 	  else if (!sym->attr.use_assoc)
 	    {
-	      gfc_warning (OPT_Wunused_variable,
-			   "Unused variable %qs declared at %L",
-			   sym->name, &sym->declared_at);
+	      /* Corner case: the symbol may be an entry point.  At this point,
+		 it may appear to be an unused variable.  Suppress warning.  */
+	      bool enter = false;
+	      gfc_entry_list *el;
+
+	      for (el = sym->ns->entries; el; el=el->next)
+		if (strcmp(sym->name, el->sym->name) == 0)
+		  enter = true;
+
+	      if (!enter)
+		gfc_warning (OPT_Wunused_variable,
+			     "Unused variable %qs declared at %L",
+			     sym->name, &sym->declared_at);
 	      if (sym->backend_decl != NULL_TREE)
 		TREE_NO_WARNING(sym->backend_decl) = 1;
 	    }
Index: gcc/testsuite/gfortran.dg/array_constructor_26.f03
===================================================================
--- gcc/testsuite/gfortran.dg/array_constructor_26.f03	(revision 240590)
+++ gcc/testsuite/gfortran.dg/array_constructor_26.f03	(working copy)
@@ -10,7 +10,6 @@ MODULE WinData
   INTEGER (1), PARAMETER :: MAXFLD = 25_1, MAXHED = 5_1, MAXCHR = 80_1
   integer :: i
   TYPE TWindowData
-    CHARACTER (MAX_FLD_HED, 1) :: DWFdHd(MAXFLD) = [(" ", i = 1, MAXFLD)]
-    ! { dg-error "specification expression" "" { target *-*-* } 13 }
+    CHARACTER (MAX_FLD_HED, 1) :: DWFdHd(MAXFLD) = [(" ", i = 1, MAXFLD)] ! { dg-error "Scalar INTEGER expression" }
   END TYPE TWindowData
 END MODULE WinData
Index: gcc/testsuite/gfortran.dg/array_constructor_27.f03
===================================================================
--- gcc/testsuite/gfortran.dg/array_constructor_27.f03	(revision 240590)
+++ gcc/testsuite/gfortran.dg/array_constructor_27.f03	(working copy)
@@ -8,8 +8,7 @@
 implicit none
 
 type t
-  character (a) :: arr (1) = [ "a" ]
-  ! { dg-error "specification expression" "" { target *-*-* } 11 }
+  character (a) :: arr (1) = [ "a" ] ! { dg-error "Scalar INTEGER expression" }
 end type t
 
 end
Index: gcc/testsuite/gfortran.dg/bounds_check_strlen_2.f90
===================================================================
--- gcc/testsuite/gfortran.dg/bounds_check_strlen_2.f90	(revision 240590)
+++ gcc/testsuite/gfortran.dg/bounds_check_strlen_2.f90	(working copy)
@@ -11,8 +11,8 @@ CONTAINS
 
   SUBROUTINE test (str, n)
     IMPLICIT NONE
-    CHARACTER(len=n) :: str
     INTEGER :: n
+    CHARACTER(len=n) :: str
   END SUBROUTINE test
 
   SUBROUTINE test2 (str)
Index: gcc/testsuite/gfortran.dg/c_assoc_2.f03
===================================================================
--- gcc/testsuite/gfortran.dg/c_assoc_2.f03	(revision 240590)
+++ gcc/testsuite/gfortran.dg/c_assoc_2.f03	(working copy)
@@ -20,7 +20,7 @@ contains
        call abort()
     end if
 
-    if(.not. c_associated()) then ! { dg-error "Missing actual argument 'C_PTR_1' in call to 'c_associated'" }
+    if(.not. c_associated()) then ! { dg-error "Missing actual argument 'c_ptr_1' in call to 'c_associated'" }
        call abort()
     end if
 
Index: gcc/testsuite/gfortran.dg/c_assoc_4.f90
===================================================================
--- gcc/testsuite/gfortran.dg/c_assoc_4.f90	(revision 240590)
+++ gcc/testsuite/gfortran.dg/c_assoc_4.f90	(working copy)
@@ -9,6 +9,6 @@ PROGRAM test
 
   TYPE (C_PTR) :: x, y
 
-  PRINT *, C_ASSOCIATED([x,y])  ! { dg-error "'C_PTR_1' argument of 'c_associated' intrinsic at .1. must be a scalar" }
+  PRINT *, C_ASSOCIATED([x,y])  ! { dg-error "'c_ptr_1' argument of 'c_associated' intrinsic at .1. must be a scalar" }
 
 END PROGRAM test
Index: gcc/testsuite/gfortran.dg/coarray_collectives_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/coarray_collectives_1.f90	(revision 240590)
+++ gcc/testsuite/gfortran.dg/coarray_collectives_1.f90	(working copy)
@@ -14,7 +14,7 @@ program test
   integer(8) :: i8
   character(len=19, kind=4) :: msg4
 
-  call co_sum("abc") ! { dg-error "must be a numeric type" }
+  call co_sum("abc") ! { dg-error "must have a numeric type" }
   call co_max(cmplx(1.0,0.0)) ! { dg-error "shall be of type integer, real or character" }
   call co_min(cmplx(0.0,1.0)) ! { dg-error "shall be of type integer, real or character" }
 
Index: gcc/testsuite/gfortran.dg/empty_label.f
===================================================================
--- gcc/testsuite/gfortran.dg/empty_label.f	(revision 240590)
+++ gcc/testsuite/gfortran.dg/empty_label.f	(working copy)
@@ -1,7 +1,4 @@
 C { dg-do compile }
-C { dg-options "-Werror -fmax-errors=1" }
-100   ! { dg-error "empty statement" }
+100   ! { dg-error "Statement label without statement" }
       end
-subroutine foo ! Not checked ...
-end function ! ... but an error
-C { dg-excess-errors "warnings being treated as errors" }
+
Index: gcc/testsuite/gfortran.dg/empty_label.f90
===================================================================
--- gcc/testsuite/gfortran.dg/empty_label.f90	(revision 240590)
+++ gcc/testsuite/gfortran.dg/empty_label.f90	(working copy)
@@ -1,7 +1,3 @@
 ! { dg-do compile }
-! { dg-options "-Werror -fmax-errors=1" }
-100   ! { dg-error "empty statement" }
+100   ! { dg-error "Statement label without statement" }
 end
-subroutine foo ! Not checked ...
-end function ! ... but an error
-! { dg-excess-errors "warnings being treated as errors" }
Index: gcc/testsuite/gfortran.dg/empty_label_typedecl.f90
===================================================================
--- gcc/testsuite/gfortran.dg/empty_label_typedecl.f90	(revision 240590)
+++ gcc/testsuite/gfortran.dg/empty_label_typedecl.f90	(working copy)
@@ -1,8 +1,6 @@
 ! { dg-do compile }
-! { dg-options "-Werror" }
 subroutine s
   type t
-  1 ! { dg-error "empty statement" }
+  1 ! { dg-error "Statement label without statement" }
   end type
 end subroutine
-! { dg-excess-errors "warnings being treated as errors" }
Index: gcc/testsuite/gfortran.dg/equiv_constraint_5.f90
===================================================================
--- gcc/testsuite/gfortran.dg/equiv_constraint_5.f90	(revision 240590)
+++ gcc/testsuite/gfortran.dg/equiv_constraint_5.f90	(working copy)
@@ -19,13 +19,13 @@
   END TYPE T2
   TYPE T3
     sequence
-    integer :: i=2 ! { dg-error "Overlapping unequal initializers" }
+    integer :: i=2
   END TYPE T3
   TYPE(T1) :: a1
   TYPE(T2) :: a2
   TYPE(T3) :: a3
   EQUIVALENCE (a1, a2)
-  EQUIVALENCE (a1, a3)
+  EQUIVALENCE (a1, a3) ! { dg-error "Overlapping unequal initializers" }
   write(6, *) a1, a2, a3
 END
 
Index: gcc/testsuite/gfortran.dg/equiv_constraint_7.f90
===================================================================
--- gcc/testsuite/gfortran.dg/equiv_constraint_7.f90	(revision 240590)
+++ gcc/testsuite/gfortran.dg/equiv_constraint_7.f90	(working copy)
@@ -5,7 +5,7 @@
 ! Started out being in BLOCK DATA; however, blockdata variables must be in
 ! COMMON and therefore cannot have F95 style initializers....
  MODULE DATA
-  INTEGER :: I=1,J=2  ! { dg-error "Overlapping unequal initializers" }
-  EQUIVALENCE(I,J)
+  INTEGER :: I=1,J=2
+  EQUIVALENCE(I,J)  ! { dg-error "Overlapping unequal initializers" }
  END MODULE DATA
  END
Index: gcc/testsuite/gfortran.dg/ieee/pr77372.f90
===================================================================
--- gcc/testsuite/gfortran.dg/ieee/pr77372.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/ieee/pr77372.f90	(working copy)
@@ -0,0 +1,7 @@
+! { dg-do compile }
+program p
+   use ieee_arithmetic
+   real(kind=ieee_selected_real_kind(10_1)) :: z1
+   real(kind=ieee_selected_real_kind(10_2)) :: z2
+   real(kind=ieee_selected_real_kind(10_4)) :: z4
+end
Index: gcc/testsuite/gfortran.dg/ieee/pr77507.f90
===================================================================
--- gcc/testsuite/gfortran.dg/ieee/pr77507.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/ieee/pr77507.f90	(working copy)
@@ -0,0 +1,7 @@
+! { dg-do compile }
+Program p
+  Use ieee_arithmetic
+  Use iso_c_binding
+  Print *, ieee_value(x=1.0, class=ieee_negative_inf)
+  Print *, c_associated(c_ptr_1=c_null_ptr)
+End Program
Index: gcc/testsuite/gfortran.dg/intrinsic_numeric_arg.f
===================================================================
--- gcc/testsuite/gfortran.dg/intrinsic_numeric_arg.f	(revision 240590)
+++ gcc/testsuite/gfortran.dg/intrinsic_numeric_arg.f	(working copy)
@@ -4,6 +4,6 @@
        LOGICAL Z
        CHARACTER A
        REAL R
-       R = ABS(Z) !  { dg-error " must be a numeric type" }
-       R = ABS(A) !  { dg-error " must be a numeric type" }
+       R = ABS(Z) !  { dg-error " must have a numeric type" }
+       R = ABS(A) !  { dg-error " must have a numeric type" }
        END
Index: gcc/testsuite/gfortran.dg/label_3.f90
===================================================================
--- gcc/testsuite/gfortran.dg/label_3.f90	(revision 240590)
+++ gcc/testsuite/gfortran.dg/label_3.f90	(working copy)
@@ -1,5 +1,5 @@
 ! { dg-do compile }
 ! PR fortran/25756.
 ! This used to ICE due to the space after the label.
-1 ! { dg-warning "Ignoring statement label in empty statement" }
+1 ! { dg-error "Statement label without statement" }
 end
Index: gcc/testsuite/gfortran.dg/pr41922.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr41922.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr41922.f90	(working copy)
@@ -0,0 +1,11 @@
+! { dg-do compile}
+! { dg-options -std=gnu }
+      Subroutine RestoreR8Run()
+      Implicit NONE
+      Integer   ISTORE
+      Real      XSTORE
+      character   CSTORE(8)
+      data cstore/8*' '/
+      data istore/0/
+      EQUIVALENCE (CSTORE(1),XSTORE,ISTORE) ! { dg-error "Overlapping unequal" }
+      end
Index: gcc/testsuite/gfortran.dg/pr61318.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr61318.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr61318.f90	(working copy)
@@ -0,0 +1,23 @@
+! { dg-do compile }
+!
+module gbl_message
+  type :: mytype
+    integer(kind=4) :: e
+  end type mytype
+  type(mytype), parameter :: seve = mytype(1)
+end module gbl_message
+
+module gbl_interfaces
+  interface
+    subroutine gagout(message)
+      character(len=*), intent(in) :: message
+    end subroutine gagout
+  end interface
+end module gbl_interfaces
+
+program test
+  use gbl_message
+  use gbl_interfaces
+  call gagout(seve%e,'Some string') ! { dg-error "Type mismatch in argument" }
+end program test
+! { dg-final { cleanup-modules "gbl_interfaces gbl_message" } }
Index: gcc/testsuite/gfortran.dg/pr68566.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr68566.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr68566.f90	(working copy)
@@ -0,0 +1,13 @@
+! { dg-do run }
+program p
+   character(len=20) s1, s2
+   integer, allocatable :: n(:)
+   n = [2,1]
+   s1 = '1 5 2 6 3 0 4 0'
+   write(s2,'(8(I0,1x))') reshape ([1,2,3,4,5,6], [2,4], [0,0], [2,1])
+   if (trim(s1) /= trim(s2)) call abort
+   write(s2,'(8(I0,1x))') reshape ([1,2,3,4,5,6], [2,4], [0,0], n)
+   if (trim(s1) /= trim(s2)) call abort
+   write(s2,'(8(I0,1x))') reshape ([1,2,3,4,5,6], [2,4], [0,0], [n])
+   if (trim(s1) /= trim(s2)) call abort
+end
Index: gcc/testsuite/gfortran.dg/pr69514_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr69514_1.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr69514_1.f90	(working copy)
@@ -0,0 +1,5 @@
+! { dg-do run }
+program foo
+   real, parameter :: x(3) = 2.0 * [real :: 1, 2, 3 ]
+   if (any(x /= [2., 4., 6.])) call abort
+end program foo
Index: gcc/testsuite/gfortran.dg/pr69514_2.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr69514_2.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr69514_2.f90	(working copy)
@@ -0,0 +1,49 @@
+! { dg-do run }
+program p
+ implicit none
+
+ real   , parameter :: arr(3) = [ real    :: 2, 2.5, (1.5, 2.5) ]
+ real   , parameter :: ari(3) = [ integer :: 2, 2.5, (1.5, 2.5) ]
+ real   , parameter :: arc(3) = [ complex :: 2, 2.5, (1.5, 2.5) ]
+ integer, parameter :: air(3) = [ real    :: 2, 2.5, (1.5, 2.5) ]
+ integer, parameter :: aii(3) = [ integer :: 2, 2.5, (1.5, 2.5) ]
+ integer, parameter :: aic(3) = [ complex :: 2, 2.5, (1.5, 2.5) ]
+ complex, parameter :: acr(3) = [ real    :: 2, 2.5, (1.5, 2.5) ]
+ complex, parameter :: aci(3) = [ integer :: 2, 2.5, (1.5, 2.5) ]
+ complex, parameter :: acc(3) = [ complex :: 2, 2.5, (1.5, 2.5) ]
+
+ real   , parameter :: mrr(3) =  4.5       * [ real    :: 2, 2.5, (3.5, 4.0) ]
+ real   , parameter :: mri(3) =  4.5       * [ integer :: 2, 2.5, (3.5, 4.0) ]
+ real   , parameter :: mrc(3) =  4.5       * [ complex :: 2, 2.5, (3.5, 4.0) ]
+ integer, parameter :: mir(3) =  4         * [ real    :: 2, 2.5, (3.5, 4.0) ]
+ integer, parameter :: mii(3) =  4         * [ integer :: 2, 2.5, (3.5, 4.0) ]
+ integer, parameter :: mic(3) =  4         * [ complex :: 2, 2.5, (3.5, 4.0) ]
+ complex, parameter :: mcr(3) = (4.5, 5.5) * [ real    :: 2, 2.5, (3.5, 4.0) ]
+ complex, parameter :: mci(3) = (4.5, 5.5) * [ integer :: 2, 2.5, (3.5, 4.0) ]
+ complex, parameter :: mcc(3) = (4.5, 5.5) * [ complex :: 2, 2.5, (3.5, 4.0) ]
+
+ if (any(arr /= [2.00, 2.50, 1.50])) call abort
+ if (any(ari /= [2.00, 2.00, 1.00])) call abort
+ if (any(arc /= [2.00, 2.50, 1.50])) call abort
+
+ if (any(air /= [2, 2, 1])) call abort
+ if (any(aii /= [2, 2, 1])) call abort
+ if (any(aic /= [2, 2, 1])) call abort
+
+ if (any(acr /= [(2.00, 0.00), (2.50, 0.00), (1.50, 0.00)])) call abort
+ if (any(aci /= [(2.00, 0.00), (2.00, 0.00), (1.00, 0.00)])) call abort
+ if (any(acc /= [(2.00, 0.00), (2.50, 0.00), (1.50, 2.50)])) call abort
+
+ if (any(mrr /= [9.00, 11.25, 15.75])) call abort
+ if (any(mri /= [9.00,  9.00, 13.50])) call abort
+ if (any(mrc /= [9.00, 11.25, 15.75])) call abort
+
+ if (any(mir /= [8, 10, 14])) call abort
+ if (any(mii /= [8,  8, 12])) call abort
+ if (any(mic /= [8, 10, 14])) call abort
+
+ if (any(mcr /= [(9.00, 11.00), (11.25, 13.75), (15.75, 19.25)])) call abort
+ if (any(mci /= [(9.00, 11.00), ( 9.00, 11.00), (13.50, 16.50)])) call abort
+ if (any(mcc /= [(9.00, 11.00), (11.25, 13.75), (-6.25, 37.25)])) call abort
+
+end program p
Index: gcc/testsuite/gfortran.dg/pr69867.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr69867.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr69867.f90	(working copy)
@@ -0,0 +1,6 @@
+! { dg-do compile }
+program p
+ type t
+  character(1) :: c(1)=[1] ! { dg-error "convert INTEGER.4. to CHARACTER.1." }
+ end type
+end
Index: gcc/testsuite/gfortran.dg/pr69962.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr69962.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr69962.f90	(working copy)
@@ -0,0 +1,6 @@
+! { dg-do compile }
+program p
+   integer :: n = 1
+   character(3), parameter :: x(2) = ['abc', 'xyz']
+   character(2), parameter :: y(2) = [x(2)(2:3), x(n)(1:2)] ! { dg-error "CHARACTER length must be a constant" }
+end
Index: gcc/testsuite/gfortran.dg/pr70006.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr70006.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr70006.f90	(working copy)
@@ -0,0 +1,9 @@
+! { dg-do compile}
+program test
+   print 1, 'string 1' ! { dg-error "FORMAT label 1" " " { target *-*-* } 3 }
+   print 1, 'string 2' ! { dg-error "FORMAT label 1" " " { target *-*-* } 4 }
+!1 format(a)
+   goto 2 ! { dg-error "Label 2 referenced" " " { target *-*-* } 6 }
+   goto 2 ! { dg-error "Label 2 referenced" " " { target *-*-* } 7 }
+!2 continue
+end program
Index: gcc/testsuite/gfortran.dg/pr71067_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr71067_1.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr71067_1.f90	(working copy)
@@ -0,0 +1,5 @@
+program p
+   integer :: i = 0
+   integer :: z(2)
+   data z /2*i/ ! { dg-error "must be a PARAMETER in DATA" }
+end
Index: gcc/testsuite/gfortran.dg/pr71067_2.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr71067_2.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr71067_2.f90	(working copy)
@@ -0,0 +1,7 @@
+! { dg-do compile }
+program p
+   integer :: a(2), b(2), c(2)
+   data a /2*b1'/ ! { dg-error "must be a PARAMETER in DATA" }
+   data b /2*o1'  ! { dg-error "must be a PARAMETER in DATA" }
+   data c /2*z1   ! { dg-error "must be a PARAMETER in DATA" }
+end
Index: gcc/testsuite/gfortran.dg/pr71730.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr71730.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr71730.f90	(working copy)
@@ -0,0 +1,5 @@
+! { dg-do compile }
+subroutine foo
+  implicit none
+  character(len=bar) :: a ! { dg-error "Scalar INTEGER expression" }
+end subroutine foo
Index: gcc/testsuite/gfortran.dg/pr71799.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr71799.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr71799.f90	(working copy)
@@ -0,0 +1,10 @@
+! { dg-do compile }
+subroutine test2(s)
+integer(1) :: i
+integer (8) :: s
+
+do i = 10, HUGE(i) - 10, 222 ! { dg-error "overflow converting" }
+  s = s + 1
+end do
+
+end subroutine test2
Index: gcc/testsuite/gfortran.dg/pr71859.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr71859.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr71859.f90	(working copy)
@@ -0,0 +1,8 @@
+! { dg-do compile }
+program p
+   call s(1)
+   x = abs(s)  ! { dg-error "must have a numeric type" }
+end
+subroutine s(n)
+   print *, n
+end
Index: gcc/testsuite/gfortran.dg/pr71862.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr71862.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr71862.f90	(working copy)
@@ -0,0 +1,16 @@
+! { dg-do compile }
+program p
+   type t
+      integer :: n = 0
+      integer, pointer :: q => null()
+   end type
+   type(t) :: x
+   print *, associated(x%q)
+   x = f()
+   print *, associated(x%q)
+contains
+   function f() result (z)    ! { dg-error "must be dummy, allocatable or pointer" }
+      class(t) :: z
+      print *, associated(z%q)
+   end
+end
Index: gcc/testsuite/gfortran.dg/pr77260_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77260_1.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77260_1.f90	(working copy)
@@ -0,0 +1,25 @@
+! { dg-do compile }
+! { dg-options "-Wall" }
+module foo
+
+   implicit none
+
+   private
+   public f1,f2
+
+   contains
+
+      integer function f1()
+         integer f2
+         f1=5
+      entry f2
+         f2=8
+      end function
+end module
+
+program test
+   use foo
+   implicit none
+   print *,f2()
+end program
+! { dg-final { cleanup-modules "foo" } }
Index: gcc/testsuite/gfortran.dg/pr77260_2.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77260_2.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77260_2.f90	(working copy)
@@ -0,0 +1,26 @@
+! { dg-do compile }
+! { dg-options "-Wall" }
+module foo
+
+   implicit none
+
+   private
+   public f1,f2
+
+   contains
+
+      integer function f1()
+         integer f2
+         integer f3           ! { dg-warning "Unused variable" }
+         f1=5
+      entry f2
+         f2=8
+      end function
+end module
+
+program test
+   use foo
+   implicit none
+   print *,f2()
+end program
+! { dg-final { cleanup-modules "foo" } }
Index: gcc/testsuite/gfortran.dg/pr77351.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77351.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77351.f90	(working copy)
@@ -0,0 +1,6 @@
+! { dg-do compile }
+program p
+   integer :: z(4) = [1, 2, 3, 4]
+   print *, any(shape(z) /= [4,1])  ! { dg-error "shape for elemental binary" }
+end
+! { dg-excess-errors "operands are incommensurate" }
Index: gcc/testsuite/gfortran.dg/pr77380.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77380.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77380.f90	(working copy)
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=lib -O2" }
+program p
+   integer :: z(2)[*] = 1
+   z(:)[1] = z(:)[*]       ! { dg-error "must be a scalar at" }
+end
Index: gcc/testsuite/gfortran.dg/pr77391.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77391.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77391.f90	(working copy)
@@ -0,0 +1,7 @@
+! { dg-do compile }
+program picky
+character(len=:), parameter :: a="whoops" ! { dg-error "POINTER or ALLOCATABLE" }
+character(len=:) :: b="whoops" ! { dg-error "POINTER or ALLOCATABLE" }
+character(len=:) :: good
+pointer good
+end program picky
Index: gcc/testsuite/gfortran.dg/pr77420_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77420_1.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77420_1.f90	(working copy)
@@ -0,0 +1,15 @@
+! { dg-do compile }
+module test_equivalence
+  real, private :: array1(100)
+  real, private :: array2(100)
+  equivalence(array1(3),array2(3))
+end module test_equivalence
+
+module mymodule
+  use test_equivalence
+  real, dimension(:), allocatable :: array1
+end module mymodule
+
+program test
+  use mymodule
+end program test
Index: gcc/testsuite/gfortran.dg/pr77420_2.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77420_2.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77420_2.f90	(working copy)
@@ -0,0 +1,15 @@
+! { dg-do compile }
+module test_equivalence
+  real, private :: array1(100)
+  real, private :: array2(100)
+  equivalence(array1,array2)
+end module test_equivalence
+
+module mymodule
+  use test_equivalence
+  real, dimension(:), allocatable :: array1
+end module mymodule
+
+program test
+  use mymodule
+end program test
Index: gcc/testsuite/gfortran.dg/pr77420_3.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77420_3.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77420_3.f90	(working copy)
@@ -0,0 +1,9 @@
+! { dg-do link }
+! { dg-additional-sources pr77420_4.f90 }
+!
+module h5global
+  implicit none
+  integer :: h5p_default_f, h5p_flags
+  equivalence(h5p_flags, h5p_default_f)
+end module h5global
+! { dg-final { cleanup-modules "h5global" } }
Index: gcc/testsuite/gfortran.dg/pr77420_4.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77420_4.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77420_4.f90	(working copy)
@@ -0,0 +1,10 @@
+! { dg-do compile { target { ! *-*-* } } }
+!
+program bug
+  use H5GLOBAL
+  implicit none
+  integer :: i
+  i=H5P_DEFAULT_F
+end program bug
+
+
Index: gcc/testsuite/gfortran.dg/pr77429.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77429.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77429.f90	(working copy)
@@ -0,0 +1,7 @@
+! { dg-do compile }
+program p
+   shape(1) = 0      ! { dg-error "expression in variable definition context" }
+   shape(1,2) = 0    ! { dg-error "expression in variable definition context" }
+   shape(1,2,3) = 0  ! { dg-error "Too many arguments in call" }
+   lbound([1]) = 0   ! { dg-error "expression in variable definition context" }
+end
Index: gcc/testsuite/gfortran.dg/pr77460.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77460.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77460.f90	(working copy)
@@ -0,0 +1,7 @@
+! { dg-do compile }
+  double precision, parameter :: x = huge(1d0)
+  print*, sum((/x,-x/))
+  print*, sum((/x,x,-x,-x/))  ! { dg-error "overflow" }
+  print*, sum((/x,-x,1d0/))
+  print*, sum((/1d0,x,-x/))
+end
Index: gcc/testsuite/gfortran.dg/pr77506.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77506.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77506.f90	(working copy)
@@ -0,0 +1,4 @@
+! { dg-do compile }
+program foo
+   print *, [character(len=*)::'ab','cd'] ! { dg-error "contain an asterisk" }
+end program foo
Index: gcc/testsuite/gfortran.dg/pr77612.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77612.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77612.f90	(working copy)
@@ -0,0 +1,13 @@
+! { dg-do compile }
+
+program bad_len
+
+  implicit none
+
+contains
+
+  subroutine sub
+    character(len = ICE) :: line ! { dg-error "INTEGER expression expected" }
+  end subroutine
+
+end program
Index: gcc/testsuite/gfortran.dg/pr77694.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr77694.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr77694.f90	(working copy)
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! { dg-options -O }
+program p
+   logical x(2), y(2)
+   x = .true.
+   y = .nt. x   ! { dg-error "Unknown operator" }
+end
Index: gcc/testsuite/gfortran.dg/warnings_are_errors_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/warnings_are_errors_1.f90	(revision 240590)
+++ gcc/testsuite/gfortran.dg/warnings_are_errors_1.f90	(working copy)
@@ -20,8 +20,6 @@
 1234  complex :: cplx ! { dg-error "defined but cannot be used" }
       cplx = 20.
 
-! gfc_warning_now:
- 1 ! { dg-error "Ignoring statement label in empty statement" }
        end
 ! { dg-final { output-exists-not } }
 ! { dg-excess-errors "warnings being treated as errors" }
Index: libgfortran/ieee/ieee_arithmetic.F90
===================================================================
--- libgfortran/ieee/ieee_arithmetic.F90	(revision 240590)
+++ libgfortran/ieee/ieee_arithmetic.F90	(working copy)
@@ -857,12 +857,12 @@ contains
 
   ! IEEE_VALUE
 
-  elemental real(kind=4) function IEEE_VALUE_4(X, C) result(res)
-    implicit none
+  elemental real(kind=4) function IEEE_VALUE_4(X, CLASS) result(res)
+
     real(kind=4), intent(in) :: X
-    type(IEEE_CLASS_TYPE), intent(in) :: C
+    type(IEEE_CLASS_TYPE), intent(in) :: CLASS
 
-    select case (C%hidden)
+    select case (CLASS%hidden)
       case (1)     ! IEEE_SIGNALING_NAN
         res = -1
         res = sqrt(res)
@@ -895,12 +895,12 @@ contains
      end select
   end function
 
-  elemental real(kind=8) function IEEE_VALUE_8(X, C) result(res)
-    implicit none
+  elemental real(kind=8) function IEEE_VALUE_8(X, CLASS) result(res)
+
     real(kind=8), intent(in) :: X
-    type(IEEE_CLASS_TYPE), intent(in) :: C
+    type(IEEE_CLASS_TYPE), intent(in) :: CLASS
 
-    select case (C%hidden)
+    select case (CLASS%hidden)
       case (1)     ! IEEE_SIGNALING_NAN
         res = -1
         res = sqrt(res)
@@ -934,12 +934,12 @@ contains
   end function
 
 #ifdef HAVE_GFC_REAL_10
-  elemental real(kind=10) function IEEE_VALUE_10(X, C) result(res)
-    implicit none
+  elemental real(kind=10) function IEEE_VALUE_10(X, CLASS) result(res)
+
     real(kind=10), intent(in) :: X
-    type(IEEE_CLASS_TYPE), intent(in) :: C
+    type(IEEE_CLASS_TYPE), intent(in) :: CLASS
 
-    select case (C%hidden)
+    select case (CLASS%hidden)
       case (1)     ! IEEE_SIGNALING_NAN
         res = -1
         res = sqrt(res)
@@ -971,15 +971,16 @@ contains
         res = 0
      end select
   end function
+
 #endif
 
 #ifdef HAVE_GFC_REAL_16
-  elemental real(kind=16) function IEEE_VALUE_16(X, C) result(res)
-    implicit none
+  elemental real(kind=16) function IEEE_VALUE_16(X, CLASS) result(res)
+
     real(kind=16), intent(in) :: X
-    type(IEEE_CLASS_TYPE), intent(in) :: C
+    type(IEEE_CLASS_TYPE), intent(in) :: CLASS
 
-    select case (C%hidden)
+    select case (CLASS%hidden)
       case (1)     ! IEEE_SIGNALING_NAN
         res = -1
         res = sqrt(res)

Reply via email to