------- Comment #8 from dfranke at gcc dot gnu dot org 2010-05-05 23:08 ------- It's late, but a conjecture ...
trans-array.c (gfc_conv_array_initializer): /* Create an array constructor from an initialization expression. We assume the frontend already did any expansions and conversions. */ Initialization expressions are required to be fully simplify-able at compile time, otherwise an error is reported. Here, we have an allowed init expression that has not been simplified but comes as a function call to be executed at runtime. Hence, to fix this, one may need to handle EXPR_FUNCTION - or fully expand the constructor. Another candidate for this issue is MATMUL: INTEGER :: i INTEGER, PARAMETER :: N = 100, M = 1 INTEGER, PARAMETER :: A(N, M) = RESHAPE((/ (i, i = 1, N) /), (/ N, M /)) INTEGER, PARAMETER :: B(M, N) = RESHAPE((/ (i, i = 1, N) /), (/ M, N /)) INTEGER, PARAMETER :: C(N, N) = MATMUL(A, B) PRINT *, SIZE(C), C(N/2, N/2) END For increasing N it (a) takes longer and longer - probably quadratic time - and (b) eventually all memory will be used which leads to a crash. Adding a max-constructor-size check to MATMUL will again bring us here. Test by unconditionally returning NULL in MATMUL: $ time gfortran-svn matmul.f03 && ./a.out matmul.f03: In function 'MAIN__': matmul.f03:1:0: internal compiler error: in gfc_conv_array_initializer, at fortran/trans-array.c:4222 -- dfranke at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ice-on-valid-code Known to fail| |4.6.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43996