Arrays 两个数组构造函数相加的奇怪结果

Arrays 两个数组构造函数相加的奇怪结果,arrays,fortran,Arrays,Fortran,我正在尝试下面的代码,它只是添加两个数组构造函数来获得一维数组。但是,根据这些表达式中是否使用了one(在隐含DO循环之外),我使用gfortran-5.3得到了(1)、(3)和(6)的错误结果。另一方面,ifort-14.0和Sun fortran 8.7为所有情况提供了正确的结果。奇怪的是,如果我尝试一个类似但更复杂的表达式,即使是Sun fortran也会表现出奇怪的行为(即,它在编译过程中被冻结…),因此我想知道我是否在这些表达式中使用了一些错误或危险的语法。有什么想法吗。。。?(顺便说

我正在尝试下面的代码,它只是添加两个数组构造函数来获得一维数组。但是,根据这些表达式中是否使用了
one
(在隐含DO循环之外),我使用gfortran-5.3得到了(1)、(3)和(6)的错误结果。另一方面,ifort-14.0和Sun fortran 8.7为所有情况提供了正确的结果。奇怪的是,如果我尝试一个类似但更复杂的表达式,即使是Sun fortran也会表现出奇怪的行为(即,它在编译过程中被冻结…),因此我想知道我是否在这些表达式中使用了一些错误或危险的语法。有什么想法吗。。。?(顺便说一句,如果我在两个构造函数之间只留下一个构造函数,它们总是按预期工作。)

ifort14.0和Sun Fortran 8.7的结果:

       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
gfortran-5.3的结果:

       1           1           0           1
       1           1           1           1
       1           1           0           1
       1           1           1           1
       1           1           1           1
       1           1           0           1
       1           1           1           1

当使用关联结构时,结果与预期一致

    program main

        use, intrinsic :: iso_fortran_env, only: &
            compiler_version, &
            compiler_options

        implicit none
        integer :: k
        !integer, dimension(2), parameter :: zero = [0,0], one = [1,1]
        integer, parameter :: N = 1

        associate( zero => [0,0], one => [1,1] )
            print *, [  one,   ( zero, k=1,N) ] + [ ( zero, k=1,N),  one   ]  !! (1)
            print *, [ [1, 1], ( zero, k=1,N) ] + [ ( zero, k=1,N), [1, 1] ]  !! (2)
            print *, [  one,   ([0, 0],k=1,N) ] + [ ([0, 0],k=1,N),  one   ]  !! (3)
            print *, [ [1, 1], ([0, 0],k=1,N) ] + [ ([0, 0],k=1,N), [1, 1] ]  !! (4)
            print *, [  1, 1,  ( 0, 0, k=1,N) ] + [ ( 0, 0, k=1,N),  1, 1  ]  !! (5)
            print *, [  one,   ( 0, 0, k=1,N) ] + [ ( 0, 0, k=1,N),  one   ]  !! (6)
            print *, [ (one, k=1,1), (zero, k=1,N) ] + [ (zero, k=1,N), (one, k=1,1) ] !! (7)
        end associate

        print *, 'This result was compiled by ', &
            compiler_version(), ' using the options ', &
            compiler_options()

    end program
使用GNU Fortran(Debian 5.3.1-14)5.3.1 20160409我得到

       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1

       This result was compiled by GCC version 5.3.1 20160409 using the options -mtune=generic -march=x86-64 -O3 -Wall -std=f2008ts

“我觉得这些很好。”弗朗西斯卡勒斯:好的,非常感谢!删除parameter属性也会产生预期的结果。。。我已尝试删除“参数”,它也在我的计算机上给出了预期的结果(CentOS+gfort4.8或5)。因此,罪魁祸首似乎是参数属性。。。
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1
       1           1           1           1

       This result was compiled by GCC version 5.3.1 20160409 using the options -mtune=generic -march=x86-64 -O3 -Wall -std=f2008ts