/* "If the character length parameter value evaluates to a negative
value, the length of character entities declared is zero." */
- if (cl->length && !gfc_extract_int (cl->length, &i) && i <= 0)
+ if (cl->length && !gfc_extract_int (cl->length, &i) && i < 0)
{
gfc_warning_now ("CHARACTER variable has zero length at %L",
&cl->length->where);
! CHARACTER lengths weren't reduced early enough for all checks of
! them to be meaningful. Furthermore negative string lengths weren't
! dealt with correctly.
-CHARACTER(len=0) :: c1 ! { dg-warning "CHARACTER variable has zero length" }
+CHARACTER(len=0) :: c1 ! This is OK.
CHARACTER(len=-1) :: c2 ! { dg-warning "CHARACTER variable has zero length" }
PARAMETER(I=-100)
CHARACTER(len=I) :: c3 ! { dg-warning "CHARACTER variable has zero length" }
program test
implicit none
- character(len=0), parameter :: s0 = "" ! { dg-warning "zero length" }
+ character(len=0), parameter :: s0 = ""
character(len=1), parameter :: s1 = "a"
character(len=2), parameter :: s2 = "ab"
- character(len=0) :: t0 ! { dg-warning "CHARACTER variable has zero length" }
+ character(len=0) :: t0
character(len=1) :: t1
character(len=2) :: t2
integer :: i
! { dg-do compile }
program test
implicit none
- character(len=0), parameter :: s0 = "" ! { dg-warning "zero length" }
+ character(len=0), parameter :: s0 = ""
character(len=1), parameter :: s1 = "a"
character(len=2), parameter :: s2 = "ab"
- character(len=0) :: t0 ! { dg-warning "CHARACTER variable has zero length" }
+ character(len=0) :: t0
character(len=1) :: t1
character(len=2) :: t2
! { dg-do run }
character(len=1) :: s
- character(len=0) :: s0 ! { dg-warning "CHARACTER variable has zero length" }
+ character(len=0) :: s0
s = " "
s0 = ""
call bar ("")