2012-07-15  Tobias Burnus  <burnus@net-b.de>

	* trans-intrinsic.c (gfc_conv_associated): Compare sm
	instead of stride.

2012-07-15  Tobias Burnus  <burnus@net-b.de>

	* intrinsics/associated.c (associated): Compare sm
	instead of stride.

Index: gcc/fortran/trans-intrinsic.c
===================================================================
--- gcc/fortran/trans-intrinsic.c	(Revision 189481)
+++ gcc/fortran/trans-intrinsic.c	(Arbeitskopie)
@@ -5849,19 +5849,19 @@ gfc_conv_associated (gfc_se *se, gfc_exp
           se->expr = fold_build2_loc (input_location, TRUTH_AND_EXPR,
 				      boolean_type_node, tmp, tmp2);
         }
       else
         {
 	  /* An array pointer of zero length is not associated if target is
 	     present.  */
 	  arg1se.descriptor_only = 1;
 	  gfc_conv_expr_lhs (&arg1se, arg1->expr);
-	  tmp = gfc_conv_descriptor_stride_get (arg1se.expr,
+	  tmp = gfc_conv_descriptor_sm_get (arg1se.expr,
 					    gfc_rank_cst[arg1->expr->rank - 1]);
 	  nonzero_arraylen = fold_build2_loc (input_location, NE_EXPR,
 					      boolean_type_node, tmp,
 					      build_int_cst (TREE_TYPE (tmp), 0));
 
           /* A pointer to an array, call library function _gfor_associated.  */
           gcc_assert (ss2 != gfc_ss_terminator);
           arg1se.want_pointer = 1;
           gfc_conv_expr_descriptor (&arg1se, arg1->expr, ss1);
Index: libgfortran/intrinsics/associated.c
===================================================================
--- libgfortran/intrinsics/associated.c	(Revision 189480)
+++ libgfortran/intrinsics/associated.c	(Arbeitskopie)
@@ -42,17 +42,17 @@ associated (const gfc_array_void *pointe
 
   rank = GFC_DESCRIPTOR_RANK (pointer);
   for (n = 0; n < rank; n++)
     {
       long extent;
       extent = GFC_DESCRIPTOR_EXTENT(pointer,n);
 
       if (extent != GFC_DESCRIPTOR_EXTENT(target,n))
         return 0;
-      if (GFC_DESCRIPTOR_STRIDE(pointer,n) != GFC_DESCRIPTOR_STRIDE(target,n) && extent != 1)
+      if (GFC_DESCRIPTOR_SM (pointer,n) != GFC_DESCRIPTOR_SM (target,n) && extent != 1)
         return 0;
       if (extent <= 0)
 	return 0;
     }
 
   return 1;
 }
