public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: [patch,wip] warn on noncontiguous pointers
@ 2018-09-27  8:00 Bader, Reinhold
  2018-09-27 17:23 ` Thomas Koenig
  0 siblings, 1 reply; 11+ messages in thread
From: Bader, Reinhold @ 2018-09-27  8:00 UTC (permalink / raw)
  To: fortran

[-- Attachment #1: Type: text/plain, Size: 2969 bytes --]

Hello all, 

> We had a lengthy discussion on that one. Still, we can dig into the
> standard for that one.
>
> J3/10-007 says in 7.2.2.3  Data pointer assignment
>
> # 7 If the pointer object has the CONTIGUOUS attribute, the pointer
> # target shall be contiguous.
>
> # 9 If bounds-remapping-list is specified, the pointer target shall
> # be simply contiguous (6.5.4) or of rank one
>
> program test
>   implicit none
>   real,pointer :: fptr1(:)
>   real,pointer,contiguous :: fptr3(:,:,:)
>
>   allocate(fptr1(12))
>   call random_number(fptr1)
>
>   !Test pointer reshape II
>
>   fptr3(1:2,1:2,1:2) => fptr1(4:)
>
> end program
>
> So, by paragraph 9, this would be OK. Let's see what paragraph 7
> means when it says "contiguous". 5.3.7 says
>
> An object is contiguous if it is
>
> # (1) an object with the CONTIGUOUS attribute,
> # (2) a nonpointer whole array that is not assumed-shape,
> # (3) an assumed-shape array that is argument associated with an
>     array that is contiguous,
> # (4) an array allocated by an ALLOCATE statement,
> # (5) a pointer associated with a contiguous target, or
> # (6) a nonzero-sized array section (6.5.3) provided that
> #   (a) its base object is contiguous,
> #   (b) it does not have a vector subscript,
> #   (c) the elements of the section, in array element order, are a
> #       subset of the base object elements that are consecutive in
> #       array element order,
> #   (d) if the array is of type character and a substring-range appears,
> #       the substring-range specifies all of the characters of the
> #       parent string (6.4.1),
> #   (e) only its final part-ref has nonzero rank, and
> #   (f) it is not the real or imaginary part (6.4.4) of an array of type
> #       complex.
>
> An object is not contiguous if it is an array subobject, and
>
> [conditions not relevant elided]
>
> # It is processor dependent whether any other object is contiguous.
>
> If we go down the list, we see that fptr1(4:) is not contiguous; it
> is not an array (it is a pointer), so (4) also does not apply.

I don't agree with this conclusion. First, the array and pointer properties
are not mutually exclusive (they are conveyed by specifying the DIMENSION
and
POINTER attribute, independently). 
Specifically for the array section fptr1(4:) all conditions 
in item (6) are fulfilled, and therefore it is a contiguous TARGET suitable
for appearing on the RHS of a contiguous pointer assignment.

Regards
Reinhold



>
> So, we are in the realm of processor dependent behavior, so we can
> chose what to do.
>
> The last time we discussed this, we agreed on a hard error.  One
> important argument is that a mistakenly applied contiguous
> attribute will lead to wrong code, and that it is quite easy
> to check this, as we do now.
> 
> So, I think we should leave the behavior as it is now, and
>
>> Maybe the ScaTeLib code needs to be updated.
>
> sounds like a good idea to me.
> 
> Regards
>
>       Thomas


[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 7773 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread
* [patch,wip] warn on noncontiguous pointers
@ 2018-09-26 18:51 Cesar Philippidis
  2018-09-26 20:49 ` Thomas Koenig
  0 siblings, 1 reply; 11+ messages in thread
From: Cesar Philippidis @ 2018-09-26 18:51 UTC (permalink / raw)
  To: Fortran List, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 843 bytes --]

As of GCC 8, gfortran now errors when a pointer with a contiguous
attribute is set to point to a target without a contiguous attribute. I
think this is overly strict, and should probably be demoted to a
pedantic warning as I've done in the attached patch.

I ran into this issue while I was tuning GCC for lsdalton. Specifically,
CMake generates (not exactly because I reduced it) the following test
case for ScaTeLib to determine if that library can be enabled:

program test
   implicit none
   real,pointer :: fptr1(:)
   real,pointer,contiguous :: fptr3(:,:,:)

   allocate(fptr1(12))
   call random_number(fptr1)

   !Test pointer reshape II

   fptr3(1:2,1:2,1:2) => fptr1(4:)
end program

Note how fptr1 doesn't have a contiguous attribute. Does anyone have
thoughts on this? Maybe the ScaTeLib code needs to be updated.

Thanks,
Cesar

[-- Attachment #2: 0001-Fortran-Disable-Assignment-to-contiguous-pointer-fro.patch --]
[-- Type: text/x-patch, Size: 1195 bytes --]

Disable "Assignment to contiguous pointer from non-contiguous target" error

2018-XX-YY  Cesar Philippidis  <cesar@codesourcery.com>

	gcc/fortran/
	* expr.c (gfc_check_pointer_assign): Demote "Assignment to
	contiguous pointer from non-contiguous target" to a warning.
---

diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 3315bb840af..74caa4f2d59 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -3957,13 +3957,13 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
 	  }
     }
 
-  /* Error for assignments of contiguous pointers to targets which is not
+  /* Warn for assignments of contiguous pointers to targets which is not
      contiguous.  Be lenient in the definition of what counts as
      contiguous.  */
 
   if (lhs_attr.contiguous && !gfc_is_simply_contiguous (rvalue, false, true))
-    gfc_error ("Assignment to contiguous pointer from non-contiguous "
-	       "target at %L", &rvalue->where);
+    gfc_warning (OPT_Wpedantic, "Assignment to contiguous pointer from "
+		 "non-contiguous target at %L", &rvalue->where);
 
   /* Warn if it is the LHS pointer may lives longer than the RHS target.  */
   if (warn_target_lifetime
-- 
2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2018-10-05  6:14 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-27  8:00 [patch,wip] warn on noncontiguous pointers Bader, Reinhold
2018-09-27 17:23 ` Thomas Koenig
2018-09-28  5:12   ` AW: " Bader, Reinhold
2018-09-28 16:59     ` N.M. Maclaren
2018-09-30 18:12     ` Thomas Koenig
2018-10-01 13:36       ` Cesar Philippidis
2018-10-03 21:16       ` Cesar Philippidis
2018-10-05  6:14         ` Thomas Koenig
  -- strict thread matches above, loose matches on Subject: below --
2018-09-26 18:51 Cesar Philippidis
2018-09-26 20:49 ` Thomas Koenig
2018-09-26 20:55   ` Cesar Philippidis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).