The following code allocates an array with one dimension size 0, but does not give an array bounds error message when compiled with /CHECK. It's not obvious to me whether ALLOCATE should have returned non-zero, but it does not.
PROGRAM p1
INTEGER :: n=0,m=5
INTEGER :: i,ifail
INTEGER, ALLOCATABLE :: a(:,:)
INTRINSIC SHAPE,SIZE
!
ALLOCATE (a(n,m),STAT=ifail)
IF (ifail/=0) STOP
PRINT *, SIZE(a)
PRINT*, SHAPE(a)
DO i=1,m
a(:,i)=i
END DO
PRINT *, a
END PROGRAM p1