Hello world, the attached, rather simple, patch, fixes a regression where the locus was not set, leading to an ICE on a warning.
Regression-tested on trunk. OK on all affected and open branches (7/6/5)? Regards Thomas 2016-11-01 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/69544 * match.c (gfc_match_where): Fill in locus for assigment in simple WHERE statement. 2016-11-01 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/69544 * gfortran.dg/where_5.f90: New test.
Index: match.c =================================================================== --- match.c (Revision 241590) +++ match.c (Arbeitskopie) @@ -6265,8 +6265,12 @@ gfc_match_where (gfc_statement *st) c = gfc_get_code (EXEC_WHERE); c->expr1 = expr; + /* Put in the assignment. It will not be processed by add_statement, so we + need to copy the location here. */ + c->next = XCNEW (gfc_code); *c->next = new_st; + c->next->loc = gfc_current_locus; gfc_clear_new_st (); new_st.op = EXEC_WHERE;
! { dg-do compile } ! { dg-options "-Wcharacter-truncation" } subroutine where_ice (i,j) implicit none character(8) :: y(10,10,2) integer :: i integer :: j character(12) :: txt(5) where (txt(1:3) /= '' ) y(1:3,i,j) = txt(1:3) ! { dg-warning "CHARACTER expression will be truncated" } end subroutine where_ice