This test, which is reduced from a test that Jakub reduced from the Polyhedron test_fpu.f90, segfaults in execution.
integer, dimension (8388608) :: i, j, k equivalence (i(1), j(10)) i = 5 k = i end $ /irun/bin/gfortran -fmax-stack-var-size=1000000 JAKUBS_TEST.f90 [EMAIL PROTECTED] /cygdrive/d/gfortran/pb04/lin/f90 $ ./a Segmentation fault (core dumped) It does this for any optimization/options that I have tried. The code produced is MAIN__ () { static union { int4 j[8388608]; int4 i[8388608]; } equiv.0; static int4 j[8388608]; static int4 i[8388608]; static int4 k[8388608]; { int4 S.0; S.0 = 1; while (1) { if (S.0 > 8388608) goto L.1; else (void) 0; i[NON_LVALUE_EXPR <S.0> + -1] = 5; S.0 = S.0 + 1; } L.1:; } { int4 S.1; S.1 = 1; while (1) { if (S.1 > 8388608) goto L.2; else (void) 0; k[NON_LVALUE_EXPR <S.1> + -1] = i[NON_LVALUE_EXPR <S.1> + -1]; S.1 = S.1 + 1; } L.2:; } } whereas a working version of gfortran produces MAIN__ () { static union { int4 j[8388608]; int4 i[8388608]; } equiv.0; static int4 k[8388608]; { int4[8388608] * D.481; D.481 = &equiv.0.i; { int4 S.0; S.0 = 1; while (1) { if (S.0 > 8388608) goto L.1; else (void) 0; (*D.481)[NON_LVALUE_EXPR <S.0> + -1] = 5; S.0 = S.0 + 1; } L.1:; } } { int4[8388608] * D.484; D.484 = &equiv.0.i; { int4 S.1; S.1 = 1; while (1) { if (S.1 > 8388608) goto L.2; else (void) 0; k[NON_LVALUE_EXPR <S.1> + -1] = (*D.484)[NON_LVALUE_EXPR <S.1> + -1]; S.1 = S.1 + 1; } L.2:; } } } Notice the appearance in the broken version of non-union static arrays for i and j, which are what the subsequent code refers to. I understand from the list that this is not what it appears to be but.... looks, walks and squits like a duck to me! Paul T -- Summary: Equivalence broken since 20051013 Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: paul dot richard dot thomas at cea dot fr http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24424