# QSORT Problem

## QSORT Problem

UBROUTINE call_qsort

I'm having some problems with the QSORT subroutine. I have some code along the lines of the given below. The user-defined ordering function is called "compare".

SUBROUTINE call_qsort
USE IFPORT
IMPLICIT NONE
INTEGER :: nlett
CHARACTER (3), ALLOCATABLE :: templett(:)
INTEGER (kind=2), EXTERNAL :: compare
! ..
! .. External Functions ..
nlett = 10
ALLOCATE(templett(nlett))
templett = ...
CALL qsort(templett,nlett,3,compare)
…
…
END SUBROUTINE call_qsort

FUNCTION compare(a,b)
IMPLICIT NONE
INTEGER (kind=2) :: compare
CHARACTER (3) :: a, b
INTRINSIC LGT
! ..
IF (LGT(a,b)) THEN
compare = 5
ELSE IF (LGT(b,a)) THEN
compare = -5
ELSE
compare = 0
END IF
END FUNCTION compare

When I run the code I get the error

Fort: (18): Dummy character variable ‘B’ has length 3 which is greater than actual variable length 1

Does anyone have an idea of what is going wrong - have I missed something obvious?!

2 posts / 0 new
For more complete information about compiler optimizations, see our Optimization Notice.

Your compare routine is being called with a single character passed for the second argument. Offhand I don't see why that would happen but my guess is that it relates to code you omitted. Ordinarily I'd recommend using CHARACTER(*) in the dummy argument declaration of B, but you should try to figure out why it is getting only one character.

Steve - Intel Developer Support