Hi Steve,
Am 03.03.23 um 20:57 schrieb Steve Kargl via Gcc-patches:
On Thu, Mar 02, 2023 at 11:03:48PM +0100, Harald Anlauf via Fortran wrote:
- if (attr->class_ok)
- /* Class container has already been built. */
+ /* Class container has already been built with same name. */
+ if (attr->class_ok
+ && ts->u.derived->components->attr.dimension >= attr->dimension
+ && ts->u.derived->components->attr.codimension >= attr->codimension
+ && ts->u.derived->components->attr.class_pointer >= attr->pointer
+ && ts->u.derived->components->attr.allocatable >= attr->allocatable)
I suppose I'm a bit confused here. dimension, codimension,
pointer and allocatable are 1-bit bitfields in the attr
struct. These can have the values 0 and 1, so the above
conditionals are always true.
thanks for looking into it.
The above part is from the original draft. I thought I could
generate testcases that allow to exercise this part, and found
a new case that is not covered by the patch and still ICEs:
subroutine bar (x)
class(*) :: x
dimension :: x(:)
allocatable :: x
end
:-(
We'll need to revisit the logic...
The rest of the patch looks reasonable. If Tobias has no
objections or comments, it's ok to commit once the above
is explained.
Thanks,
Harald