https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123782
--- Comment #16 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> --- (In reply to Steve Kargl from comment #15) > (In reply to Jerry DeLisle from comment #14) > > Another tidbit I found is that the array a has the attribute TARGET but > > subcomponents do not. > > > > So the c => a%x is invalid whereas c => a is valid. This has nothing to do > > with contiguous. > > > > Regarding contiguous: > > > > Expression, Valid as RHS of => ?, Reason > > > > a, Yes, declared target > > a(3:8), Yes, section of target array > > obj, Yes, derived type variable with target > > obj%comp, Yes, component of target variable > > obj(4)%comp, Yes, same > > obj%comp_array, No, whole component array — not TARGET > > obj_array(:)%comp, No, very common mistake — same reason > > local variable > > without TARGET,No, compiler error > > Where did you get these tidbits? From Fortran 2018, > Internet search, one of the many chat sources. The only thing that's clear is it's not clear. Probably a red herring. > 8.5.17 TARGET attribute > ... > If an object has the TARGET attribute, then all of its nonpointer > subobjects also have the TARGET attribute. > > 5.4.3.2.1 Data object classification > ... > A data object is either a constant, variable, or a subobject of a constant. > ... > Subobjects are portions of data objects that can be referenced and defined > (variables only) independently of the other portions. > > program foo > type a_t > integer comp_array(5) > end type a_t > type(a_t), target :: obj > integer, pointer :: x(:) > obj%comp_array = [1, 2, 3, 4, 5] > x => obj%comp_array > print '(*(I0,1X))', x > end program foo > > Am I missing something? I don't think so. It did not make sense to me either. I am surprised at the different interpretations one finds on these things. Regarding my other comment on Simply Contiguous, I am re-reading the 2023 section on it.
