[flang] Fix errors in tests and predefined modules
authorTim Keith <tkeith@nvidia.com>
Tue, 6 Aug 2019 21:14:33 +0000 (14:14 -0700)
committerTim Keith <tkeith@nvidia.com>
Wed, 7 Aug 2019 17:51:35 +0000 (10:51 -0700)
There were many places in tests and predefined modules that had
incorrect code that we weren't detecting until now.

Most of the problems were deferred-shape arrays that should have
been implied-shape. For example:
`real, parameter :: a(:) = [1.0, 2.0]`
should have `(*)` rather than `(:)`.

There were also a few places with deferred-shape arrays that were
not allocatable/pointer or explicit-shape ones that were.

Original-commit: flang-compiler/f18@0a959ce1d81dd2e54b72886db699b12c7ad59d88
Reviewed-on: https://github.com/flang-compiler/f18/pull/630

16 files changed:
flang/module/ieee_exceptions.f90
flang/module/iso_fortran_env.f90
flang/test/evaluate/folding05.f90
flang/test/evaluate/folding06.f90
flang/test/evaluate/folding08.f90
flang/test/semantics/allocate01.f90
flang/test/semantics/allocate12.f90
flang/test/semantics/modfile14.f90
flang/test/semantics/modfile18.f90
flang/test/semantics/modfile24.f90
flang/test/semantics/modfile25.f90
flang/test/semantics/modfile26.f90
flang/test/semantics/modfile27.f90
flang/test/semantics/modfile28.f90
flang/test/semantics/resolve37.f90
flang/test/semantics/stop01.f90

index bc9da86..a9f16e6 100644 (file)
@@ -28,9 +28,9 @@ module ieee_exceptions
     ieee_inexact = ieee_flag_type(16)
 
   type(ieee_flag_type), parameter :: &
-    ieee_usual(:) = [ &
+    ieee_usual(*) = [ &
       ieee_overflow, ieee_divide_by_zero, ieee_invalid ], &
-    ieee_all(:) = [ &
+    ieee_all(*) = [ &
       ieee_usual, ieee_underflow, ieee_inexact ]
 
   type :: ieee_modes_type ! Fortran 2018, 17.7
index 326b2a2..25e417d 100644 (file)
@@ -20,16 +20,16 @@ module iso_fortran_env
   integer, parameter :: atomic_int_kind = 8
   integer, parameter :: atomic_logical_kind = 8
 
-  integer, parameter :: character_kinds(:) = [1, 2, 4]
+  integer, parameter :: character_kinds(*) = [1, 2, 4]
   integer, parameter :: int8 = 1, int16 = 2, int32 = 4, int64 = 8, int128 = 16
-  integer, parameter :: integer_kinds(:) = [int8, int16, int32, int64, int128]
+  integer, parameter :: integer_kinds(*) = [int8, int16, int32, int64, int128]
   integer, parameter :: &
     logical8 = 1, logical16 = 2, logical32 = 4, logical64 = 8
-  integer, parameter :: logical_kinds(:) = &
+  integer, parameter :: logical_kinds(*) = &
     [logical8, logical16, logical32, logical64]
   integer, parameter :: &
     real16 = 2, real32 = 4, real64 = 8, real80 = 10, real128 = 16
-  integer, parameter :: real_kinds(:) = &
+  integer, parameter :: real_kinds(*) = &
     [real16, 3, real32, real64, real80, real128]
 
   integer, parameter :: current_team = -1, initial_team = -2, parent_team = -3
index 46880ef..6457aa4 100644 (file)
Binary files a/flang/test/evaluate/folding05.f90 and b/flang/test/evaluate/folding05.f90 differ
index ab32fec..148a3fa 100644 (file)
@@ -22,27 +22,27 @@ module m
     integer(8) i
   end type
 
-  integer(8), parameter :: new_shape(:) = [2, 4]
+  integer(8), parameter :: new_shape(*) = [2, 4]
   integer(4), parameter :: order(2) = [2, 1]
 
 
   ! Testing integers (similar to real and complex)
-  integer(4), parameter :: int_source(:) = [1, 2, 3, 4, 5, 6]
+  integer(4), parameter :: int_source(*) = [1, 2, 3, 4, 5, 6]
   integer(4), parameter :: int_pad(2) = [7, 8]
-  integer(4), parameter :: int_expected_result(:, :) = reshape([1, 5, 2, 6, 3, 7, 4, 8], new_shape)
-  integer(4), parameter :: int_result(:, :) = reshape(int_source, new_shape, int_pad, order)
+  integer(4), parameter :: int_expected_result(*, *) = reshape([1, 5, 2, 6, 3, 7, 4, 8], new_shape)
+  integer(4), parameter :: int_result(*, *) = reshape(int_source, new_shape, int_pad, order)
   logical, parameter :: test_reshape_integer_1 = all(int_expected_result == int_result)
   logical, parameter :: test_reshape_integer_2 = all(shape(int_result, 8).EQ.new_shape)
 
 
   ! Testing characters
-  character(kind=1, len=3), parameter ::char_source(:) = ["abc", "def", "ghi", "jkl", "mno", "pqr"]
+  character(kind=1, len=3), parameter ::char_source(*) = ["abc", "def", "ghi", "jkl", "mno", "pqr"]
   character(kind=1,len=3), parameter :: char_pad(2) = ["stu", "vxy"]
 
-  character(kind=1, len=3), parameter :: char_expected_result(:, :) = &
+  character(kind=1, len=3), parameter :: char_expected_result(*, *) = &
     reshape(["abc", "mno", "def", "pqr", "ghi", "stu", "jkl", "vxy"], new_shape)
 
-  character(kind=1, len=3), parameter :: char_result(:, :) = &
+  character(kind=1, len=3), parameter :: char_result(*, *) = &
     reshape(char_source, new_shape, char_pad, order)
 
   logical, parameter :: test_reshape_char_1 = all(char_result == char_expected_result)
@@ -50,16 +50,16 @@ module m
 
 
   ! Testing derived types
-  type(A), parameter :: derived_source(:) = &
+  type(A), parameter :: derived_source(*) = &
     [A(x=1.5, i=1), A(x=2.5, i=2), A(x=3.5, i=3), A(x=4.5, i=4), A(x=5.5, i=5), A(x=6.5, i=6)]
 
   type(A), parameter :: derived_pad(2) = [A(x=7.5, i=7), A(x=8.5, i=8)]
 
-  type(A), parameter :: derived_expected_result(:, :) = &
+  type(A), parameter :: derived_expected_result(*, *) = &
     reshape([a::a(x=1.5_4,i=1_8),a(x=5.5_4,i=5_8),a(x=2.5_4,i=2_8), a(x=6.5_4,i=6_8), &
       a(x=3.5_4,i=3_8),a(x=7.5_4,i=7_8),a(x=4.5_4,i=4_8),a(x=8.5_4,i=8_8)], new_shape)
 
-  type(A), parameter :: derived_result(:, :) = reshape(derived_source, new_shape, derived_pad, order)
+  type(A), parameter :: derived_result(*, *) = reshape(derived_source, new_shape, derived_pad, order)
 
   logical, parameter :: test_reshape_derived_1 = all((derived_result%x.EQ.derived_expected_result%x) &
       .AND.(derived_result%i.EQ.derived_expected_result%i))
index d8753ea..a18ae0e 100644 (file)
@@ -28,56 +28,54 @@ module m
     end type
     type(t) :: ta(0:2)
     character(len=2) :: ca(-1:1)
-    integer, parameter :: lba1(:) = lbound(a1)
+    integer, parameter :: lba1(*) = lbound(a1)
     logical, parameter :: test_lba1 = all(lba1 == [0])
-    integer, parameter :: lba2(:) = lbound(a2)
+    integer, parameter :: lba2(*) = lbound(a2)
     logical, parameter :: test_lba2 = all(lba2 == [0])
-    integer, parameter :: uba2(:) = ubound(a2)
-    logical, parameter :: test_uba2 = all(uba2 == [-1])
-    integer, parameter :: lbtadim(:) = lbound(ta,1)
+    integer, parameter :: lbtadim(*) = lbound(ta,1)
     logical, parameter :: test_lbtadim = lbtadim == 0
-    integer, parameter :: ubtadim(:) = ubound(ta,1)
+    integer, parameter :: ubtadim(*) = ubound(ta,1)
     logical, parameter :: test_ubtadim = ubtadim == 2
-    integer, parameter :: lbta1(:) = lbound(ta)
+    integer, parameter :: lbta1(*) = lbound(ta)
     logical, parameter :: test_lbta1 = all(lbta1 == [0])
-    integer, parameter :: ubta1(:) = ubound(ta)
+    integer, parameter :: ubta1(*) = ubound(ta)
     logical, parameter :: test_ubta1 = all(ubta1 == [2])
-    integer, parameter :: lbta2(:) = lbound(ta(:))
+    integer, parameter :: lbta2(*) = lbound(ta(:))
     logical, parameter :: test_lbta2 = all(lbta2 == [1])
-    integer, parameter :: ubta2(:) = ubound(ta(:))
+    integer, parameter :: ubta2(*) = ubound(ta(:))
     logical, parameter :: test_ubta2 = all(ubta2 == [3])
-    integer, parameter :: lbta3(:) = lbound(ta%a)
+    integer, parameter :: lbta3(*) = lbound(ta%a)
     logical, parameter :: test_lbta3 = all(lbta3 == [1])
-    integer, parameter :: ubta3(:) = ubound(ta%a)
+    integer, parameter :: ubta3(*) = ubound(ta%a)
     logical, parameter :: test_ubta3 = all(ubta3 == [3])
-    integer, parameter :: lbca1(:) = lbound(ca)
+    integer, parameter :: lbca1(*) = lbound(ca)
     logical, parameter :: test_lbca1 = all(lbca1 == [-1])
-    integer, parameter :: ubca1(:) = ubound(ca)
+    integer, parameter :: ubca1(*) = ubound(ca)
     logical, parameter :: test_ubca1 = all(ubca1 == [1])
-    integer, parameter :: lbca2(:) = lbound(ca(:)(1:1))
+    integer, parameter :: lbca2(*) = lbound(ca(:)(1:1))
     logical, parameter :: test_lbca2 = all(lbca2 == [1])
-    integer, parameter :: ubca2(:) = ubound(ca(:)(1:1))
+    integer, parameter :: ubca2(*) = ubound(ca(:)(1:1))
     logical, parameter :: test_ubca2 = all(ubca2 == [3])
-    integer, parameter :: lbfoo(:) = lbound(foo())
+    integer, parameter :: lbfoo(*) = lbound(foo())
     logical, parameter :: test_lbfoo = all(lbfoo == [1,1])
-    integer, parameter :: ubfoo(:) = ubound(foo())
+    integer, parameter :: ubfoo(*) = ubound(foo())
     logical, parameter :: test_ubfoo = all(ubfoo == [2,3])
   end subroutine
   subroutine test2
     real :: a(2:3,4:6)
     associate (b => a)
       block
-        integer, parameter :: lbb(:) = lbound(b)
+        integer, parameter :: lbb(*) = lbound(b)
         logical, parameter :: test_lbb = all(lbb == [2,4])
-        integer, parameter :: ubb(:) = ubound(b)
+        integer, parameter :: ubb(*) = ubound(b)
         logical, parameter :: test_ubb = all(ubb == [3,6])
       end block
     end associate
     associate (b => a + 0)
       block
-        integer, parameter :: lbb(:) = lbound(b)
+        integer, parameter :: lbb(*) = lbound(b)
         logical, parameter :: test_lbb = all(lbb == [1,1])
-        integer, parameter :: ubb(:) = ubound(b)
+        integer, parameter :: ubb(*) = ubound(b)
         logical, parameter :: test_ubb = all(ubb == [2,3])
       end block
     end associate
index b6423d5..e5fa2d2 100644 (file)
@@ -44,7 +44,7 @@ subroutine C932(ed1, ed5, ed7, edc9, edc10, okad1, okpd1, okacd5)
   use :: m, only: a_type
   type TestType1
     integer, allocatable :: ok(:)
-    integer :: nok(:)
+    integer :: nok(10)
   end type
   type TestType2
     integer, pointer :: ok
index 1cfb1d1..2d71366 100644 (file)
@@ -25,7 +25,7 @@ subroutine C941_C942b_C950(xsrc, x1, a2, b2, cx1, ca2, cb1, cb2, c1)
   end type
 
   type type2
-    type(type1) :: t1(:)
+    type(type1), pointer :: t1(:)
   end type
 
   type A
index 99bbb0e..a82f74a 100644 (file)
@@ -1,4 +1,4 @@
-! Copyright (c) 2018, NVIDIA CORPORATION.  All rights reserved.
+! Copyright (c) 2018-2019, NVIDIA CORPORATION.  All rights reserved.
 !
 ! Licensed under the Apache License, Version 2.0 (the "License");
 ! you may not use this file except in compliance with the License.
@@ -75,7 +75,7 @@ end
 !    class(t1),intent(inout)::dtv
 !    integer(4),intent(in)::unit
 !    character(*,1),intent(in)::iotype
-!    integer(4),intent(in)::v_list(1_8:)
+!    integer(4),intent(in)::v_list(:)
 !    integer(4),intent(out)::iostat
 !    character(*,1),intent(inout)::iomsg
 !  end
index cfac23a..7a3aa20 100644 (file)
@@ -20,7 +20,7 @@ module m
   real, parameter :: a2(2) = [4.0, 5.0]
   real, parameter :: a3(0) = [real::]
   real, parameter :: a4(55) = [real::((1.0*k,k=1,j),j=1,10)]
-  real, parameter :: a5(:) = [6.0, 7.0, 8.0]
+  real, parameter :: a5(*) = [6.0, 7.0, 8.0]
   real, parameter :: a6(2) = [9, 10]
   real, parameter :: a7(6) = [([(1.0*k,k=1,j)],j=1,3)]
   real, parameter :: a8(13) = [real::1,2_1,3_2,4_4,5_8,6_16,7._2,8._3,9._4,10._8,11._16,(12.,12.5),(13._8,13.5)]
@@ -33,7 +33,7 @@ end module m
 !real(4),parameter::a2(1_8:2_8)=[Real(4)::4._4,5._4]
 !real(4),parameter::a3(1_8:0_8)=[Real(4)::]
 !real(4),parameter::a4(1_8:55_8)=[Real(4)::1._4,1._4,2._4,1._4,2._4,3._4,1._4,2._4,3._4,4._4,1._4,2._4,3._4,4._4,5._4,1._4,2._4,3._4,4._4,5._4,6._4,1._4,2._4,3._4,4._4,5._4,6._4,7._4,1._4,2._4,3._4,4._4,5._4,6._4,7._4,8._4,1._4,2._4,3._4,4._4,5._4,6._4,7._4,8._4,9._4,1._4,2._4,3._4,4._4,5._4,6._4,7._4,8._4,9._4,1.e1_4]
-!real(4),parameter::a5(1_8:)=[Real(4)::6._4,7._4,8._4]
+!real(4),parameter::a5(1_8:*)=[Real(4)::6._4,7._4,8._4]
 !real(4),parameter::a6(1_8:2_8)=[Real(4)::9._4,1.e1_4]
 !real(4),parameter::a7(1_8:6_8)=[Real(4)::1._4,1._4,2._4,1._4,2._4,3._4]
 !real(4),parameter::a8(1_8:13_8)=[Real(4)::1._4,2._4,3._4,4._4,5._4,6._4,7._4,8._4,9._4,1.e1_4,1.1e1_4,1.2e1_4,1.3e1_4]
index 8e01317..1ad3a6c 100644 (file)
@@ -49,7 +49,7 @@ end
 ! coarray-spec in components and with non-constants bounds
 module m3
   type t
-    real, allocatable :: c(1:5)[1:10,1:*]
+    real, allocatable :: c(:)[1:10,1:*]
     complex, allocatable, codimension[5,*] :: d
   end type
   real, allocatable :: e[:,:,:]
@@ -63,7 +63,7 @@ end
 !Expect: m3.mod
 !module m3
 ! type::t
-!  real(4),allocatable::c(1_8:5_8)[1_8:10_8,1_8:*]
+!  real(4),allocatable::c(:)[1_8:10_8,1_8:*]
 !  complex(4),allocatable::d[1_8:5_8,1_8:*]
 ! end type
 ! real(4),allocatable::e[:,:,:]
index de67beb..40c3425 100644 (file)
 ! Test compile-time analysis of shapes.
 
 module m1
-  integer(8), parameter :: a0s(:) = shape(3.14159)
+  integer(8), parameter :: a0s(*) = shape(3.14159)
   real :: a1(5,5,5)
-  integer(8), parameter :: a1s(:) = shape(a1)
-  integer(8), parameter :: a1ss(:) = shape(a1s)
-  integer(8), parameter :: a1sss(:) = shape(a1ss)
-  integer(8), parameter :: a1rs(:) = [rank(a1),rank(a1s),rank(a1ss),rank(a1sss)]
-  integer(8), parameter :: a1n(:) = [size(a1),size(a1,1),size(a1,2)]
-  integer(8), parameter :: a1sn(:) = [size(a1s),size(a1ss),size(a1sss)]
-  integer(8), parameter :: ac1s(:) = shape([1])
-  integer(8), parameter :: ac2s(:) = shape([1,2,3])
-  integer(8), parameter :: ac3s(:) = shape([(1,j=1,4)])
-  integer(8), parameter :: ac3bs(:) = shape([(1,j=4,1,-1)])
-  integer(8), parameter :: ac4s(:) = shape([((j,k,j*k,k=1,3),j=1,4)])
-  integer(8), parameter :: ac5s(:) = shape([((0,k=5,1,-2),j=9,2,-3)])
-  integer(8), parameter :: rss(:) = shape(reshape([(0,j=1,90)], -[2,3]*(-[5_8,3_8])))
+  integer(8), parameter :: a1s(*) = shape(a1)
+  integer(8), parameter :: a1ss(*) = shape(a1s)
+  integer(8), parameter :: a1sss(*) = shape(a1ss)
+  integer(8), parameter :: a1rs(*) = [rank(a1),rank(a1s),rank(a1ss),rank(a1sss)]
+  integer(8), parameter :: a1n(*) = [size(a1),size(a1,1),size(a1,2)]
+  integer(8), parameter :: a1sn(*) = [size(a1s),size(a1ss),size(a1sss)]
+  integer(8), parameter :: ac1s(*) = shape([1])
+  integer(8), parameter :: ac2s(*) = shape([1,2,3])
+  integer(8), parameter :: ac3s(*) = shape([(1,j=1,4)])
+  integer(8), parameter :: ac3bs(*) = shape([(1,j=4,1,-1)])
+  integer(8), parameter :: ac4s(*) = shape([((j,k,j*k,k=1,3),j=1,4)])
+  integer(8), parameter :: ac5s(*) = shape([((0,k=5,1,-2),j=9,2,-3)])
+  integer(8), parameter :: rss(*) = shape(reshape([(0,j=1,90)], -[2,3]*(-[5_8,3_8])))
  contains
   subroutine subr(x,n1,n2)
     real, intent(in) :: x(:,:)
     integer, intent(in) :: n1(3), n2(:)
-    real :: a(:,:,:)
+    real, allocatable :: a(:,:,:)
     a = reshape(x,n1)
     a = reshape(x,n2(10:30:9)) ! fails if we can't figure out triplet shape
   end subroutine
 end module m1
 !Expect: m1.mod
 ! module m1
-! integer(8),parameter::a0s(1_8:)=[Integer(8)::]
+! integer(8),parameter::a0s(1_8:*)=[Integer(8)::]
 ! real(4)::a1(1_8:5_8,1_8:5_8,1_8:5_8)
-! integer(8),parameter::a1s(1_8:)=[Integer(8)::5_8,5_8,5_8]
-! integer(8),parameter::a1ss(1_8:)=[Integer(8)::3_8]
-! integer(8),parameter::a1sss(1_8:)=[Integer(8)::1_8]
-! integer(8),parameter::a1rs(1_8:)=[Integer(8)::3_8,1_8,1_8,1_8]
-! integer(8),parameter::a1n(1_8:)=[Integer(8)::125_8,5_8,5_8]
-! integer(8),parameter::a1sn(1_8:)=[Integer(8)::3_8,1_8,1_8]
-! integer(8),parameter::ac1s(1_8:)=[Integer(8)::1_8]
-! integer(8),parameter::ac2s(1_8:)=[Integer(8)::3_8]
-! integer(8),parameter::ac3s(1_8:)=[Integer(8)::4_8]
-! integer(8),parameter::ac3bs(1_8:)=[Integer(8)::4_8]
-! integer(8),parameter::ac4s(1_8:)=[Integer(8)::36_8]
-! integer(8),parameter::ac5s(1_8:)=[Integer(8)::9_8]
-! integer(8),parameter::rss(1_8:)=[Integer(8)::10_8,9_8]
+! integer(8),parameter::a1s(1_8:*)=[Integer(8)::5_8,5_8,5_8]
+! integer(8),parameter::a1ss(1_8:*)=[Integer(8)::3_8]
+! integer(8),parameter::a1sss(1_8:*)=[Integer(8)::1_8]
+! integer(8),parameter::a1rs(1_8:*)=[Integer(8)::3_8,1_8,1_8,1_8]
+! integer(8),parameter::a1n(1_8:*)=[Integer(8)::125_8,5_8,5_8]
+! integer(8),parameter::a1sn(1_8:*)=[Integer(8)::3_8,1_8,1_8]
+! integer(8),parameter::ac1s(1_8:*)=[Integer(8)::1_8]
+! integer(8),parameter::ac2s(1_8:*)=[Integer(8)::3_8]
+! integer(8),parameter::ac3s(1_8:*)=[Integer(8)::4_8]
+! integer(8),parameter::ac3bs(1_8:*)=[Integer(8)::4_8]
+! integer(8),parameter::ac4s(1_8:*)=[Integer(8)::36_8]
+! integer(8),parameter::ac5s(1_8:*)=[Integer(8)::9_8]
+! integer(8),parameter::rss(1_8:*)=[Integer(8)::10_8,9_8]
 ! contains
 ! subroutine subr(x,n1,n2)
-! real(4),intent(in)::x(1_8:,1_8:)
+! real(4),intent(in)::x(:,:)
 ! integer(4),intent(in)::n1(1_8:3_8)
-! integer(4),intent(in)::n2(1_8:)
+! integer(4),intent(in)::n2(:)
 ! end
 ! end
index e5feb2e..c03406b 100644 (file)
@@ -21,11 +21,11 @@ module m1
   ! INTEGER(KIND=4)  handles  5 <= P < 10
   ! INTEGER(KIND=8)  handles 10 <= P < 19
   ! INTEGER(KIND=16) handles 19 <= P < 39
-  integer, parameter :: iranges(:) = &
+  integer, parameter :: iranges(*) = &
     [range(0_1), range(0_2), range(0_4), range(0_8), range(0_16)]
   logical, parameter :: ircheck = all([2, 4, 9, 18, 38] == iranges)
-  integer, parameter :: intpvals(:) = [0, 2, 3, 4, 5, 9, 10, 18, 19, 38, 39]
-  integer, parameter :: intpkinds(:) = &
+  integer, parameter :: intpvals(*) = [0, 2, 3, 4, 5, 9, 10, 18, 19, 38, 39]
+  integer, parameter :: intpkinds(*) = &
     [(selected_int_kind(intpvals(j)),j=1,size(intpvals))]
   logical, parameter :: ipcheck = &
     all([1, 1, 2, 2, 4, 4, 8, 8, 16, 16, -1] == intpkinds)
@@ -36,12 +36,12 @@ module m1
   ! REAL(KIND=8)  handles  7 <= P < 16
   ! REAL(KIND=10) handles 16 <= P < 19 (if available; ifort is KIND=16)
   ! REAL(KIND=16) handles 19 <= P < 34 (would be 32 with Power double/double)
-  integer, parameter :: realprecs(:) = &
+  integer, parameter :: realprecs(*) = &
     [precision(0._2), precision(0._3), precision(0._4), precision(0._8), &
      precision(0._10), precision(0._16)]
   logical, parameter :: rpreccheck = all([3, 2, 6, 15, 18, 33] == realprecs)
-  integer, parameter :: realpvals(:) = [0, 3, 4, 6, 7, 15, 16, 18, 19, 33, 34]
-  integer, parameter :: realpkinds(:) = &
+  integer, parameter :: realpvals(*) = [0, 3, 4, 6, 7, 15, 16, 18, 19, 33, 34]
+  integer, parameter :: realpkinds(*) = &
     [(selected_real_kind(realpvals(j),0),j=1,size(realpvals))]
   logical, parameter :: realpcheck = &
     all([2, 2, 4, 4, 8, 8, 10, 10, 16, 16, -1] == realpkinds)
@@ -51,25 +51,25 @@ module m1
   ! REAL(KIND=8)  handles 38 <= R < 308
   ! REAL(KIND=10) handles 308 <= R < 4932 (if available; ifort is KIND=16)
   ! REAL(KIND=16) handles 4932 <= R < 9864 (except Power double/double)
-  integer, parameter :: realranges(:) = &
+  integer, parameter :: realranges(*) = &
     [range(0._2), range(0._3), range(0._4), range(0._8), range(0._10), &
      range(0._16)]
   logical, parameter :: rrangecheck = &
     all([4, 37, 37, 307, 4931, 9863] == realranges)
-  integer, parameter :: realrvals(:) = &
+  integer, parameter :: realrvals(*) = &
     [0, 4, 5, 37, 38, 307, 308, 4931, 4932, 9863, 9864]
-  integer, parameter :: realrkinds(:) = &
+  integer, parameter :: realrkinds(*) = &
     [(selected_real_kind(0,realrvals(j)),j=1,size(realrvals))]
   logical, parameter :: realrcheck = &
     all([2, 2, 3, 3, 8, 8, 10, 10, 16, 16, -2] == realrkinds)
   logical, parameter :: radixcheck = &
     all([radix(0._2), radix(0._3), radix(0._4), radix(0._8), &
          radix(0._10), radix(0._16)] == 2)
-  integer, parameter :: intdigits(:) = &
+  integer, parameter :: intdigits(*) = &
     [digits(0_1), digits(0_2), digits(0_4), digits(0_8), digits(0_16)]
   logical, parameter :: intdigitscheck = &
     all([7, 15, 31, 63, 127] == intdigits)
-  integer, parameter :: realdigits(:) = &
+  integer, parameter :: realdigits(*) = &
     [digits(0._2), digits(0._3), digits(0._4), digits(0._8), digits(0._10), &
      digits(0._16)]
   logical, parameter :: realdigitscheck = &
@@ -77,24 +77,24 @@ module m1
 end module m1
 !Expect: m1.mod
 !module m1
-!integer(4),parameter::iranges(1_8:)=[Integer(4)::2_4,4_4,9_4,18_4,38_4]
+!integer(4),parameter::iranges(1_8:*)=[Integer(4)::2_4,4_4,9_4,18_4,38_4]
 !logical(4),parameter::ircheck=.true._4
-!integer(4),parameter::intpvals(1_8:)=[Integer(4)::0_4,2_4,3_4,4_4,5_4,9_4,10_4,18_4,19_4,38_4,39_4]
-!integer(4),parameter::intpkinds(1_8:)=[Integer(4)::1_4,1_4,2_4,2_4,4_4,4_4,8_4,8_4,16_4,16_4,-1_4]
+!integer(4),parameter::intpvals(1_8:*)=[Integer(4)::0_4,2_4,3_4,4_4,5_4,9_4,10_4,18_4,19_4,38_4,39_4]
+!integer(4),parameter::intpkinds(1_8:*)=[Integer(4)::1_4,1_4,2_4,2_4,4_4,4_4,8_4,8_4,16_4,16_4,-1_4]
 !logical(4),parameter::ipcheck=.true._4
-!integer(4),parameter::realprecs(1_8:)=[Integer(4)::3_4,2_4,6_4,15_4,18_4,33_4]
+!integer(4),parameter::realprecs(1_8:*)=[Integer(4)::3_4,2_4,6_4,15_4,18_4,33_4]
 !logical(4),parameter::rpreccheck=.true._4
-!integer(4),parameter::realpvals(1_8:)=[Integer(4)::0_4,3_4,4_4,6_4,7_4,15_4,16_4,18_4,19_4,33_4,34_4]
-!integer(4),parameter::realpkinds(1_8:)=[Integer(4)::2_4,2_4,4_4,4_4,8_4,8_4,10_4,10_4,16_4,16_4,-1_4]
+!integer(4),parameter::realpvals(1_8:*)=[Integer(4)::0_4,3_4,4_4,6_4,7_4,15_4,16_4,18_4,19_4,33_4,34_4]
+!integer(4),parameter::realpkinds(1_8:*)=[Integer(4)::2_4,2_4,4_4,4_4,8_4,8_4,10_4,10_4,16_4,16_4,-1_4]
 !logical(4),parameter::realpcheck=.true._4
-!integer(4),parameter::realranges(1_8:)=[Integer(4)::4_4,37_4,37_4,307_4,4931_4,9863_4]
+!integer(4),parameter::realranges(1_8:*)=[Integer(4)::4_4,37_4,37_4,307_4,4931_4,9863_4]
 !logical(4),parameter::rrangecheck=.true._4
-!integer(4),parameter::realrvals(1_8:)=[Integer(4)::0_4,4_4,5_4,37_4,38_4,307_4,308_4,4931_4,4932_4,9863_4,9864_4]
-!integer(4),parameter::realrkinds(1_8:)=[Integer(4)::2_4,2_4,3_4,3_4,8_4,8_4,10_4,10_4,16_4,16_4,-2_4]
+!integer(4),parameter::realrvals(1_8:*)=[Integer(4)::0_4,4_4,5_4,37_4,38_4,307_4,308_4,4931_4,4932_4,9863_4,9864_4]
+!integer(4),parameter::realrkinds(1_8:*)=[Integer(4)::2_4,2_4,3_4,3_4,8_4,8_4,10_4,10_4,16_4,16_4,-2_4]
 !logical(4),parameter::realrcheck=.true._4
 !logical(4),parameter::radixcheck=.true._4
-!integer(4),parameter::intdigits(1_8:)=[Integer(4)::7_4,15_4,31_4,63_4,127_4]
+!integer(4),parameter::intdigits(1_8:*)=[Integer(4)::7_4,15_4,31_4,63_4,127_4]
 !logical(4),parameter::intdigitscheck=.true._4
-!integer(4),parameter::realdigits(1_8:)=[Integer(4)::11_4,8_4,24_4,53_4,64_4,112_4]
+!integer(4),parameter::realdigits(1_8:*)=[Integer(4)::11_4,8_4,24_4,53_4,64_4,112_4]
 !logical(4),parameter::realdigitscheck=.true._4
 !end
index b9c2369..5197d47 100644 (file)
@@ -19,14 +19,14 @@ module m1
   type :: t1
     integer :: ia1(2)
   end type t1
-  type(t1), parameter :: t1x1(:) = [t1::t1(ia1=[1,2]),t1(ia1=[3,4])]
+  type(t1), parameter :: t1x1(*) = [t1::t1(ia1=[1,2]),t1(ia1=[3,4])]
   logical, parameter :: t1check1 = t1x1(2)%ia1(1) == 3
   logical, parameter :: t1check2 = all(t1x1(1)%ia1 == [1,2])
   logical, parameter :: t1check3 = all(t1x1(:)%ia1(1) == [1,3])
   type :: t2
     type(t1) :: dta1(2)
   end type t2
-  type(t2), parameter :: t2x1(:) = &
+  type(t2), parameter :: t2x1(*) = &
     [t2 :: t2(dta1=[t1::t1x1]), &
            t2(dta1=[t1::t1(ia1=[5,6]),t1(ia1=[7,8])])]
   logical, parameter :: t2check1 = t2x1(1)%dta1(2)%ia1(2) == 4
@@ -42,14 +42,14 @@ end module m1
 !type::t1
 !integer(4)::ia1(1_8:2_8)
 !end type
-!type(t1),parameter::t1x1(1_8:)=[t1::t1(ia1=[Integer(4)::1_4,2_4]),t1(ia1=[Integer(4)::3_4,4_4])]
+!type(t1),parameter::t1x1(1_8:*)=[t1::t1(ia1=[Integer(4)::1_4,2_4]),t1(ia1=[Integer(4)::3_4,4_4])]
 !logical(4),parameter::t1check1=.true._4
 !logical(4),parameter::t1check2=.true._4
 !logical(4),parameter::t1check3=.true._4
 !type::t2
 !type(t1)::dta1(1_8:2_8)
 !end type
-!type(t2),parameter::t2x1(1_8:)=[t2::t2(dta1=[t1::t1(ia1=[Integer(4)::1_4,2_4]),t1(ia1=[Integer(4)::3_4,4_4])]),t2(dta1=[t1::t1(ia1=[Integer(4)::5_4,6_4]),t1(ia1=[Integer(4)::7_4,8_4])])]
+!type(t2),parameter::t2x1(1_8:*)=[t2::t2(dta1=[t1::t1(ia1=[Integer(4)::1_4,2_4]),t1(ia1=[Integer(4)::3_4,4_4])]),t2(dta1=[t1::t1(ia1=[Integer(4)::5_4,6_4]),t1(ia1=[Integer(4)::7_4,8_4])])]
 !logical(4),parameter::t2check1=.true._4
 !logical(4),parameter::t2check2=.true._4
 !logical(4),parameter::t2check3=.true._4
index 8a089ce..962bffd 100644 (file)
@@ -21,7 +21,7 @@ character(kind=4,len=:), parameter :: c4 = 4_"Hi! 你好!"
 ! In CHARACTER(1) literals, codepoints > 0xff are serialized into UTF-8;
 ! each of those bytes then gets encoded into UTF-8 for the module file.
 character(kind=1,len=:), parameter :: c1 = 1_"Hi! 你好!"
-character(kind=4,len=:), parameter :: c4a(:) = [4_"一", 4_"二", 4_"三", 4_"四", 4_"五"]
+character(kind=4,len=:), parameter :: c4a(*) = [4_"一", 4_"二", 4_"三", 4_"四", 4_"五"]
 integer, parameter :: lc4 = len(c4)
 integer, parameter :: lc1 = len(c1)
 end module m
@@ -30,7 +30,7 @@ end module m
 !module m
 !character(:,4),parameter::c4=4_"Hi! \344\275\240\345\245\275!"
 !character(:,1),parameter::c1=1_"Hi! \344\275\240\345\245\275!"
-!character(:,4),parameter::c4a(1_8:)=[CHARACTER(KIND=4,LEN=1)::"\344\270\200","\344\272\214","\344\270\211","\345\233\233","\344\272\224"]
+!character(:,4),parameter::c4a(1_8:*)=[CHARACTER(KIND=4,LEN=1)::"\344\270\200","\344\272\214","\344\270\211","\345\233\233","\344\272\224"]
 !integer(4),parameter::lc4=7_4
 !integer(4),parameter::lc1=11_4
 !end
index 58fd433..0f275b4 100644 (file)
@@ -41,7 +41,7 @@ integer, parameter ::  p = 0/0
 integer, parameter ::  q = 1+2*(1/0)
 !ERROR: Must be a constant value
 integer(kind=2/0) r
-integer, parameter :: sok(:)=[1,2]/[1,2]
+integer, parameter :: sok(*)=[1,2]/[1,2]
 !ERROR: Must be a constant value
-integer, parameter :: snok(:)=[1,2]/[1,0]
+integer, parameter :: snok(*)=[1,2]/[1,0]
 end
index 06d966e..7e5f8c8 100644 (file)
@@ -18,11 +18,11 @@ program main
   integer, pointer :: p_i
   integer(kind = 1) :: invalid = 0
   integer, dimension(1:100) :: iarray
-  integer, dimension(1:100), pointer :: p_iarray
-  integer, allocatable, dimension(1:100) :: aiarray
+  integer, dimension(:), pointer :: p_iarray
+  integer, allocatable, dimension(:) :: aiarray
   logical :: l = .false.
   logical, dimension(1:100) :: larray
-  logical, allocatable, dimension(1:100) :: alarray
+  logical, allocatable, dimension(:) :: alarray
   character(len = 128) :: chr1
   character(kind = 4, len = 128) :: chr2