[Bug fortran/113165] Code containing more than one type declaration for a variable results in confusing error messages from compiler

2023-12-29 Thread xecej4 at outlook dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113165

--- Comment #3 from mecej4  ---
Thanks for the prompt response and the rapid fix.

[Bug fortran/113165] Code containing more than one type declaration for a variable results in confusing error messages from compiler

2023-12-28 Thread kargl at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113165

--- Comment #2 from kargl at gcc dot gnu.org ---
With the attached example code and the patch at the end of this
message, gfortran can be changes to identify both lines of code.
Fixing the run-on errors when -fimplicit-none is used is left as
an exercise for a new contributor or will be ignored until such
time as someone closes this bug report.

% gfcx -c e.f90
e.f90:3:30:

3 |   double precision a,b,c,d,f,g
  |  1
4 |   integer i,j,k,l
5 |   double precision d,q,r  ! 'd' was already declared as double
prec.
  |2  
Error: Symbol ā€˜dā€™ declared at (1) already has basic type of REAL and cannot
appear in the declaration at (2)



diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc
index a6078bc608a..7fa1839323b 100644
--- a/gcc/fortran/symbol.cc
+++ b/gcc/fortran/symbol.cc
@@ -2015,8 +2015,9 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus
*where)
gfc_error ("Symbol %qs at %L already has basic type of %s",
   sym->ns->proc_name->name, where, gfc_basic_typename (type));
   else
-   gfc_error ("Symbol %qs at %L already has basic type of %s", sym->name,
-  where, gfc_basic_typename (type));
+   gfc_error ("Symbol %qs declared at %L already has basic type of %s "
+  "and cannot appear in the declaration at %L", sym->name,
+  >declared_at, gfc_basic_typename (type), where);
   return false;
 }

[Bug fortran/113165] Code containing more than one type declaration for a variable results in confusing error messages from compiler

2023-12-28 Thread kargl at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113165

kargl at gcc dot gnu.org changed:

   What|Removed |Added

   Priority|P3  |P5
 CC||kargl at gcc dot gnu.org
   Severity|normal  |enhancement

--- Comment #1 from kargl at gcc dot gnu.org ---
You are hitting a run-on error caused by the first reported error.
If you are compiling old code or code you are currently writing or
code with a questionable pedigree, use the -fmax-errors=1 option.

For the record, your bug report is confusing ;-)
Because it includes error messages associated with your attached example:

  program multDecls
  double precision a,b,c,d,f,g
  integer i,j,k,l
  double precision d,q,r  ! 'd' was already declared as double prec.
  d = 65536.0d0
  r = sqrt(d)
  print *,' r = ',r,' p = ',p
  end program

but you refer to netlib code with a duplicate 't' declaration.

Due to the first error about 'd', the rest of the declaration is 
discarded.  The result is that 'q,r' have not been declared
and so have implicit types.  The option '-fimplicit-none' is telling
you about this problem.  Fix the first error and the run-on errors
go away.

Note, "Error: Symbol 'd' at (1) already has basic type of REAL" simply
means that 'd' has been typed as a REAL entity irrespective of the kind.
It does not mean that 'd' has been given a single precision type of 
REAL(4).  I suppose someone could change the error message to
a more generic "Error: Symbol 'd' at (1) has already been declared."
or some such wording.