When comparing arrays whose shapes do not conform, the contant folding code ran into problems trying to get the value of an extent that did not exist. There were actually two problems. First, the routine "CheckConformance()" was returning "true" when the compiler was unable to get the extent of an array. Second, the function "ApplyElementwise()" was calling "CheckConformance()" prior to folding the elements of two arrays, but it was ignoring the return value. Differential Revision: https://reviews.llvm.org/D91440
42 lines
1.3 KiB
Fortran
42 lines
1.3 KiB
Fortran
! RUN: %S/test_errors.sh %s %t %f18
|
|
! Test comparisons that use the intrinsic SHAPE() as an operand
|
|
program testShape
|
|
contains
|
|
subroutine sub1(arrayDummy)
|
|
integer :: arrayDummy(:)
|
|
integer, allocatable :: arrayDeferred(:)
|
|
integer :: arrayLocal(2) = [88, 99]
|
|
if (all(shape(arrayDummy)==shape(8))) then
|
|
print *, "hello"
|
|
end if
|
|
if (all(shape(27)==shape(arrayDummy))) then
|
|
print *, "hello"
|
|
end if
|
|
if (all(64==shape(arrayDummy))) then
|
|
print *, "hello"
|
|
end if
|
|
if (all(shape(arrayDeferred)==shape(8))) then
|
|
print *, "hello"
|
|
end if
|
|
if (all(shape(27)==shape(arrayDeferred))) then
|
|
print *, "hello"
|
|
end if
|
|
if (all(64==shape(arrayDeferred))) then
|
|
print *, "hello"
|
|
end if
|
|
!ERROR: Dimension 1 of left operand has extent 1, but right operand has extent 0
|
|
!ERROR: Dimension 1 of left operand has extent 1, but right operand has extent 0
|
|
if (all(shape(arrayLocal)==shape(8))) then
|
|
print *, "hello"
|
|
end if
|
|
!ERROR: Dimension 1 of left operand has extent 0, but right operand has extent 1
|
|
!ERROR: Dimension 1 of left operand has extent 0, but right operand has extent 1
|
|
if (all(shape(27)==shape(arrayLocal))) then
|
|
print *, "hello"
|
|
end if
|
|
if (all(64==shape(arrayLocal))) then
|
|
print *, "hello"
|
|
end if
|
|
end subroutine sub1
|
|
end program testShape
|