diff options
author | Dominique d'Humieres <dominiq@lps.ens.fr> | 2017-10-01 11:49:48 +0200 |
---|---|---|
committer | Dominique d'Humieres <dominiq@gcc.gnu.org> | 2017-10-01 11:49:48 +0200 |
commit | efa1d7a21633c6e2e66245a11ba4347baf3d1767 (patch) | |
tree | c74716a9553d3b2eb2b6bee4de86477e13516762 /gcc/fortran/parse.c | |
parent | ce22a7f915090e738f52ea020581296092f4b0b1 (diff) | |
download | gcc-efa1d7a21633c6e2e66245a11ba4347baf3d1767.zip gcc-efa1d7a21633c6e2e66245a11ba4347baf3d1767.tar.gz gcc-efa1d7a21633c6e2e66245a11ba4347baf3d1767.tar.bz2 |
re PR fortran/61450 (ICE in gfc_global_used())
2017-10-01 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/61450
* parse.c (gfc_global_used): Replace the gfc_internal_error
with an error.
2017-10-01 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/61450
* gfortran.dg/binding_label_tests_28.f90: New test.
From-SVN: r253328
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r-- | gcc/fortran/parse.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index e958e6d..eb0f92e 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -5742,16 +5742,28 @@ gfc_global_used (gfc_gsymbol *sym, locus *where) name = "MODULE"; break; default: - gfc_internal_error ("gfc_global_used(): Bad type"); name = NULL; } - if (sym->binding_label) - gfc_error ("Global binding name %qs at %L is already being used as a %s " - "at %L", sym->binding_label, where, name, &sym->where); + if (name) + { + if (sym->binding_label) + gfc_error ("Global binding name %qs at %L is already being used " + "as a %s at %L", sym->binding_label, where, name, + &sym->where); + else + gfc_error ("Global name %qs at %L is already being used as " + "a %s at %L", sym->name, where, name, &sym->where); + } else - gfc_error ("Global name %qs at %L is already being used as a %s at %L", - sym->name, where, name, &sym->where); + { + if (sym->binding_label) + gfc_error ("Global binding name %qs at %L is already being used " + "at %L", sym->binding_label, where, &sym->where); + else + gfc_error ("Global name %qs at %L is already being used at %L", + sym->name, where, &sym->where); + } } |