https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107424
Tobias Burnus <burnus at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |burnus at gcc dot gnu.org Keywords| |ice-on-valid-code, | |wrong-code Summary|[13 Regression] ICE in |[13 Regression] ICE in |gfc_trans_omp_do, at |gfc_trans_omp_do, at |fortran/trans-openmp.cc:539 |fortran/trans-openmp.cc:539 |7 |7 - and wrong code - with | |non-rectangular loops --- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> --- The following program does not ICE but it shows with -Wall: Warning: āiā is used uninitialized the code is as above (comment 0) except for: do i = 1, 9, 1 ! <<< only change: Stride == 1; ICE has stride == 2. do j = 1, i Looking at the dump: integer(kind=4) D.4264; D.4264 = i; // BAD: Uninitialized variable #pragma omp for collapse(2) { { #pragma omp simd collapse(2) for (i = 1; i <= 9; i = i + 1) for (j = 1; j <= D.4264; j = j + 1) // Wrong: use loop war 'i' not 'D.4264'! { L.1:; } -------------- Draft patch for this issue ā but not for the original issue (the ICE): --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -5224 +5224 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock, - from = gfc_evaluate_now (se.expr, pblock); + from = DECL_P (se.expr) ? se.expr : gfc_evaluate_now (se.expr, pblock); @@ -5229 +5229 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock, - to = gfc_evaluate_now (se.expr, pblock); + to = DECL_P (se.expr) ? se.expr : gfc_evaluate_now (se.expr, pblock); @@ -5234 +5234 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock, - step = gfc_evaluate_now (se.expr, pblock); + step = DECL_P (se.expr) ? se.expr : gfc_evaluate_now (se.expr, pblock);