PROGRAM Test_INTEGER_select ! Every wrong branch leads to destruction. INTEGER, PARAMETER :: maxI = HUGE (maxI) INTEGER, PARAMETER :: minI = -1 * maxI INTEGER :: I = 0 SELECT CASE (I) CASE (:-1) CALL abort CASE (1:) CALL abort CASE DEFAULT CONTINUE END SELECT SELECT CASE (I) CASE (3,2,1) CALL abort CASE (0) CONTINUE CASE DEFAULT call abort END SELECT ! Not aborted by here, so it worked ! See about weird corner cases I = maxI SELECT CASE (I) CASE (:-1) CALL abort CASE (1:) CONTINUE CASE DEFAULT CALL abort END SELECT SELECT CASE (I) CASE (3,2,1,:0) CALL abort CASE (maxI) CONTINUE CASE DEFAULT call abort END SELECT I = minI SELECT CASE (I) CASE (:-1) CONTINUE CASE (1:) CALL abort CASE DEFAULT CALL abort END SELECT SELECT CASE (I) CASE (3:,2,1,0) CALL abort CASE (minI) CONTINUE CASE DEFAULT call abort END SELECT END