From: Thomas Koenig Date: Sun, 6 Nov 2016 20:30:31 +0000 (+0000) Subject: backport: re PR fortran/69544 (Internal compiler error with -Wall and where) X-Git-Tag: releases/gcc-5.5.0~718 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ba41008c0fad8226d4bc5fd8bf83769792a0b6d;p=thirdparty%2Fgcc.git backport: re PR fortran/69544 (Internal compiler error with -Wall and where) 2016-11-06 Thomas Koenig Backport from trunk PR fortran/69544 PR fortran/78178 * gfortran.dg/where_5.f90: New test. * gfortran.dg/where_6.f90: New test. 2016-11-06 Thomas Koenig Backport from trunk PR fortran/69544 PR fortran/78178 * match.c (match_simple_where): Fill in locus for assigment in simple WHERE statement. (gfc_match_where): Likewise. From-SVN: r241886 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0cb900e9e920..17e1d0032647 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2016-11-06 Thomas Koenig + + Backport from trunk + PR fortran/69544 + PR fortran/78178 + * match.c (match_simple_where): Fill in locus for assigment + in simple WHERE statement. + (gfc_match_where): Likewise. + 2016-11-01 Thomas Koenig Backport from trunk diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 7262b399a07d..c32eef7881d6 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -5930,6 +5930,7 @@ match_simple_where (void) c->next = XCNEW (gfc_code); *c->next = new_st; + c->next->loc = gfc_current_locus; gfc_clear_new_st (); new_st.op = EXEC_WHERE; @@ -5986,8 +5987,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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ddabb4a264bf..79afa96bd386 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2016-11-06 Thomas Koenig + + Backport from trunk + PR fortran/69544 + PR fortran/78178 + * gfortran.dg/where_5.f90: New test. + * gfortran.dg/where_6.f90: New test. + 2016-11-05 Martin Sebor Backport from trunk. diff --git a/gcc/testsuite/gfortran.dg/where_5.f90 b/gcc/testsuite/gfortran.dg/where_5.f90 new file mode 100644 index 000000000000..5ada63d6a5d1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/where_5.f90 @@ -0,0 +1,15 @@ +! { 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 diff --git a/gcc/testsuite/gfortran.dg/where_6.f90 b/gcc/testsuite/gfortran.dg/where_6.f90 new file mode 100644 index 000000000000..c7c43db84237 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/where_6.f90 @@ -0,0 +1,15 @@ +! { 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) + if (.true.) where (txt(1:3) /= '' ) y(1:3,i,j) = txt(1:3) ! { dg-warning "CHARACTER expression will be truncated" } + +end subroutine where_ice