diff options
author | Sandra Loosemore <sandra@codesourcery.com> | 2022-01-04 18:18:13 -0800 |
---|---|---|
committer | Sandra Loosemore <sandra@codesourcery.com> | 2022-01-05 09:02:22 -0800 |
commit | 85a3442c85aedb00c59e986f16cccbb8ec60d777 (patch) | |
tree | 2ad4990645d1b6927b0dc72f749b9fa41b35dc14 /gcc/fortran/symbol.c | |
parent | 6aa0859afaf28f4fb13121352225bc5877e02a44 (diff) | |
download | gcc-85a3442c85aedb00c59e986f16cccbb8ec60d777.zip gcc-85a3442c85aedb00c59e986f16cccbb8ec60d777.tar.gz gcc-85a3442c85aedb00c59e986f16cccbb8ec60d777.tar.bz2 |
Fortran: Fix ICE caused by missing error for untyped symbol [PR103258]
The bit on a symbol to mark that it had already been diagnosed as
lacking a type was getting set even when the error was suppressed or
discarded, specifically when doing early resolution on a character
length expression to see if it can be constant-folded. Explicitly
suppress errors before doing that, then check whether they are
suppressed before setting the bit.
2022-01-04 Sandra Loosemore <sandra@codesourcery.com>
PR fortran/103258
gcc/fortran/
* decl.c (gfc_match_char_spec): Suppress errors around call
to gfc_reduce_init_expr.
* error.c (gfc_query_suppress_errors): New.
* gfortran.h (gfc_query_suppress_errors): Declare.
* symbol.c (gfc_set_default_type): Check gfc_query_suppress_errors.
gcc/testsuite/
* gfortran.dg/pr103258.f90: New.
Diffstat (limited to 'gcc/fortran/symbol.c')
-rw-r--r-- | gcc/fortran/symbol.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 0385595..1a4b022 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -299,7 +299,7 @@ gfc_set_default_type (gfc_symbol *sym, int error_flag, gfc_namespace *ns) if (ts->type == BT_UNKNOWN) { - if (error_flag && !sym->attr.untyped) + if (error_flag && !sym->attr.untyped && !gfc_query_suppress_errors ()) { const char *guessed = lookup_symbol_fuzzy (sym->name, sym); if (guessed) |