public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* cygwin gfortran segfaulting on valid write statements
       [not found] <d04d793a-6c8b-7a11-5a9b-5cda1bb86e50.ref@bellsouth.net>
@ 2020-04-17 18:42 ` worsafe
  2020-04-17 19:39   ` Marco Atzeri
                     ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: worsafe @ 2020-04-17 18:42 UTC (permalink / raw)
  To: cygwin cygwin

I'm getting segfaults in valid write statements Using current cygwin 
gfortran (--version reports 9.3.0). This is with old code that runs on 
current debian stable and was running on cygwin a few years ago. I have 
been unable to construct a simple example for a bug report.

I would like to try downgrading the gfortran version, but see 6 
different versions of gcc-fortran and 11 versions of libgfortran in the 
cygwin repository. Can someone recommend a combination?


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: cygwin gfortran segfaulting on valid write statements
  2020-04-17 18:42 ` cygwin gfortran segfaulting on valid write statements worsafe
@ 2020-04-17 19:39   ` Marco Atzeri
  2020-04-17 22:29     ` Charles Russell
  2020-04-17 19:42   ` Brian Inglis
  2020-04-17 19:46   ` Brian Inglis
  2 siblings, 1 reply; 13+ messages in thread
From: Marco Atzeri @ 2020-04-17 19:39 UTC (permalink / raw)
  To: cygwin

Am 17.04.2020 um 20:42 schrieb worsafe@bellsouth.net:
> I'm getting segfaults in valid write statements Using current cygwin 
> gfortran (--version reports 9.3.0). This is with old code that runs on 
> current debian stable and was running on cygwin a few years ago. I have 
> been unable to construct a simple example for a bug report.
> 
> I would like to try downgrading the gfortran version, but see 6 
> different versions of gcc-fortran and 11 versions of libgfortran in the 
> cygwin repository. Can someone recommend a combination?
> 


9.3.0-1   libgfortran5
9.2.0-3   libgfortran5
9.2.0-2   libgfortran5
9.2.0-1   libgfortran5
8.3.0-1   libgfortran5
7.4.0-1   libgfortran4


in what type of statement have you the segfault ?

Regards
Marco



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: cygwin gfortran segfaulting on valid write statements
  2020-04-17 18:42 ` cygwin gfortran segfaulting on valid write statements worsafe
  2020-04-17 19:39   ` Marco Atzeri
@ 2020-04-17 19:42   ` Brian Inglis
  2020-04-17 19:46   ` Brian Inglis
  2 siblings, 0 replies; 13+ messages in thread
From: Brian Inglis @ 2020-04-17 19:42 UTC (permalink / raw)
  To: cygwin

On 2020-04-17 12:42, worsafe@bellsouth.net wrote:
> I'm getting segfaults in valid write statements Using current cygwin gfortran
> (--version reports 9.3.0). This is with old code that runs on current debian
> stable and was running on cygwin a few years ago. I have been unable to
> construct a simple example for a bug report.
> 
> I would like to try downgrading the gfortran version, but see 6 different
> versions of gcc-fortran and 11 versions of libgfortran in the cygwin repository.
> Can someone recommend a combination?

Try these in order from recent to less:

gcc-fortran	9.3.0-1 9.2.0-3 9.2.0-2 9.2.0-1 8.3.0-1 7.4.0-1
libgfortran5	9.3.0-1 9.2.0-3 9.2.0-2 9.2.0-1 8.3.0-1
libgfortran4						7.4.0-1

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: cygwin gfortran segfaulting on valid write statements
  2020-04-17 18:42 ` cygwin gfortran segfaulting on valid write statements worsafe
  2020-04-17 19:39   ` Marco Atzeri
  2020-04-17 19:42   ` Brian Inglis
@ 2020-04-17 19:46   ` Brian Inglis
  2020-04-17 23:33     ` Charles Russell
  2 siblings, 1 reply; 13+ messages in thread
From: Brian Inglis @ 2020-04-17 19:46 UTC (permalink / raw)
  To: cygwin

On 2020-04-17 12:42, worsafe@bellsouth.net wrote:
> I'm getting segfaults in valid write statements Using current cygwin gfortran
> (--version reports 9.3.0). This is with old code that runs on current debian
> stable and was running on cygwin a few years ago. I have been unable to
> construct a simple example for a bug report.

Try running under strace:

	$ strace -o prog.strace prog -options... args...

or gdb:

	$ gdb prog
	(gdb) run -options... args...
	SEGV diagnostics
	(gdb) bt
	(gdb) q

and attach or paste all output.

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: cygwin gfortran segfaulting on valid write statements
  2020-04-17 19:39   ` Marco Atzeri
@ 2020-04-17 22:29     ` Charles Russell
  0 siblings, 0 replies; 13+ messages in thread
From: Charles Russell @ 2020-04-17 22:29 UTC (permalink / raw)
  To: cygwin cygwin

On 4/17/2020 2:39 PM, Marco Atzeri via Cygwin wrote:

> in what type of statement have you the segfault ?


I recently tried building and running some old fortran code using what I 
think is the current version of cygwin gfortran (--version reports 
9.3.0) and was surprised to get a run-time error message saying that a 
format statement was missing a left parenthesis. There was no format 
error in that line (the same code ran previously on cygwin, and runs now 
on debian stable). Furthermore I would not expect to see a syntax error 
message at run time. I got around the problem by switching from cygwin 
to a debian virtual machine, but then went back for another look at 
cygwin, using different (old, tested) code. Again I hit a segfault, this 
time with no explicit message, but stepping through gdb tracked the 
error to a write statement. Copying the offending write statement into a 
simple example failed to reproduce the error.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: cygwin gfortran segfaulting on valid write statements
  2020-04-17 19:46   ` Brian Inglis
@ 2020-04-17 23:33     ` Charles Russell
  2020-04-18  1:01       ` Brian Inglis
  0 siblings, 1 reply; 13+ messages in thread
From: Charles Russell @ 2020-04-17 23:33 UTC (permalink / raw)
  To: cygwin cygwin

On 4/17/2020 2:46 PM, Brian Inglis wrote:

> Try running under strace:
> 
> 	$ strace -o prog.strace prog -options... args...
> 
> or gdb:
> 
> 	$ gdb prog
> 	(gdb) run -options... args...
> 	SEGV diagnostics
> 	(gdb) bt
> 	(gdb) q
> 
> and attach or paste all output.

The following is the case where I got an error message. Not actually a 
segfault. (Sorry, I'm not a programmer.) The executable, gdb, and strace 
all produce the same output:
-----------
At line 889 of file cgcrez.f (unit = 6, file = 'stdout')
Fortran runtime error: Missing initial left parenthesis in format

^

Error termination. Backtrace:
#0  0xffffffffffffffff in ???
#1  0xffffffffffffffff in ???
#2  0xffffffffffffffff in ???
#3  0xffffffffffffffff in ???
#4  0xffffffffffffffff in ???
#5  0xffffffffffffffff in ???
#6  0xffffffffffffffff in ???
#7  0xffffffffffffffff in ???
#8  0xffffffffffffffff in ???
#9  0xffffffffffffffff in ???
#10  0xffffffffffffffff in ???
#11  0xffffffffffffffff in ???
#12  0xffffffffffffffff in ???
#13  0xffffffffffffffff in ???
--------------
Here is the indicated line, using list mode in vim to show that there 
are no unexpected nonprinting characters:

  887           write(6,'(i6,1p3e9.2,x,e9.2,x,0pf6.3,x,1p2e10.2,''@'')')$
  888      &       iter, reldf,reldb,$
  889      &       gnorms, x1min, -cosag, beta(1),beta(np)$
  890 $

This code compiled and ran on cygwin in the past, and checks out now in 
debian stable.

In my other case, which I may or may not be able to find again, the 
program failed with no explicit error message like the one above. 
Stepping through with gdb showed that it was also crashing in a valid 
write statement.





^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: cygwin gfortran segfaulting on valid write statements
  2020-04-17 23:33     ` Charles Russell
@ 2020-04-18  1:01       ` Brian Inglis
       [not found]         ` <f868b6d5-2aee-c314-8a90-ba86a6aeeca6@bellsouth.net>
  0 siblings, 1 reply; 13+ messages in thread
From: Brian Inglis @ 2020-04-18  1:01 UTC (permalink / raw)
  To: cygwin

On 2020-04-17 17:33, Charles Russell wrote:
> On 4/17/2020 2:46 PM, Brian Inglis wrote:
> 
>> Try running under strace:
>>
>>     $ strace -o prog.strace prog -options... args...
>>
>> or gdb:
>>
>>     $ gdb prog
>>     (gdb) run -options... args...
>>     SEGV diagnostics
>>     (gdb) bt
>>     (gdb) q
>>
>> and attach or paste all output.
> 
> The following is the case where I got an error message. Not actually a segfault.
> (Sorry, I'm not a programmer.) The executable, gdb, and strace all produce the
> same output:
> -----------
> At line 889 of file cgcrez.f (unit = 6, file = 'stdout')
> Fortran runtime error: Missing initial left parenthesis in format
> ^

> Here is the indicated line, using list mode in vim to show that there are no
> unexpected nonprinting characters:
> 
>  887           write(6,'(i6,1p3e9.2,x,e9.2,x,0pf6.3,x,1p2e10.2,''@'')')$
>  888      &       iter, reldf,reldb,$
>  889      &       gnorms, x1min, -cosag, beta(1),beta(np)$
>  890 $
> 
> This code compiled and ran on cygwin in the past, and checks out now in debian
> stable.
> 
> In my other case, which I may or may not be able to find again, the program
> failed with no explicit error message like the one above. Stepping through with
> gdb showed that it was also crashing in a valid write statement.

Do you perhaps need an extra pair of parentheses to repeat the formatted output,
perhaps from the second specifier, as you have 5 variable format specifiers and
8 variables?
Showing a bit more context with all variable declarations would help, and you
can use cat -A (== -vET) to show non-printing characters e.g.

$ egrep -nw 'iter|reldf|reldb|gnorms|x1min|cosag|beta|write' cgcrez.f | cat -A

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: gfortran 9.3 write format error (was: segfaulting on valid write statements)
       [not found]         ` <f868b6d5-2aee-c314-8a90-ba86a6aeeca6@bellsouth.net>
@ 2020-04-18 16:23           ` Brian Inglis
  2020-04-18 17:00             ` gfortran 9.3 write format error Eliot Moss
  2020-04-18 18:13             ` Charles Russell
  0 siblings, 2 replies; 13+ messages in thread
From: Brian Inglis @ 2020-04-18 16:23 UTC (permalink / raw)
  To: cygwin

On 2020-04-17 23:16, Charles Russell wrote:
> On 4/17/2020 8:01 PM, Brian Inglis wrote:
>> On 2020-04-17 17:33, Charles Russell wrote:
>>> At line 889 of file cgcrez.f (unit = 6, file = 'stdout')
>>> Fortran runtime error: Missing initial left parenthesis in format
>>> ^
>>> Here is the indicated line, using list mode in vim to show that there are no
>>> unexpected nonprinting characters:
>>>  887           write(6,'(i6,1p3e9.2,x,e9.2,x,0pf6.3,x,1p2e10.2,''@'')')$
>>>  888      &       iter, reldf,reldb,$
>>>  889      &       gnorms, x1min, -cosag, beta(1),beta(np)$
>>>  890 $
>>> This code compiled and ran on cygwin in the past, and checks out now in debian
>>> stable.
>>> In my other case, which I may or may not be able to find again, the program
>>> failed with no explicit error message like the one above. Stepping through with
>>> gdb showed that it was also crashing in a valid write statement.

>> Do you perhaps need an extra pair of parentheses to repeat the formatted output,
>> perhaps from the second specifier, as you have 5 variable format specifiers and
>> 8 variables?

> Looks OK to me, and works on debian.
> 
> (i6,        iter
> 1p3e9.2,    reldf, reldb, gnorms       
> x,       
> e9.2,        x1min
> x,
> 0pf6.3,        -cosag
> x,
> 1p2e10.2,       beta(1), beta(np)
> '' @'')

>> Showing a bit more context with all variable declarations would help, and you
>> can use cat -A (== -vET) to show non-printing characters e.g.
>>
>> $ egrep -nw 'iter|reldf|reldb|gnorms|x1min|cosag|beta|write' cgcrez.f | cat -A
> 
> This yields 200 lines of output and I don't see how it helps, but I'll send you
> the output if you wish. Regarding declarations, this is fortran 77 code with g77
> extensions using implicit double precision (a-h,o-z), i.e. traditional fortran
> type conventions but double precision. The code was originally written using g77
> and gfortran on cygwin, passes ftnchek, and runs fine on current debian stable.
> Hard to see how this can be anything but a problem with the current cygwin
> compiler or its installation. My program uses a half dozen static libraries
> built within the past year (after switching from 32 bit cygwin on windows 7 to
> 64 bit cygwin on windows 10). I suppose there might be some mismatch with these
> libraries, though I did check to make sure that none of my 32 bit libraries
> slipped in. If I have to downgrade the compiler version I'll presumably need to
> rebuild all my libraries yet again.

Unfortunately without a Simple Test Case it is hard to reproduce the errors and
most of us are not (recent) ForTran programmers, and available ForTran docs seem
less than rigorous in specifying formatted I/O format requirements, with
gfortran providing not even hints.

However, one thing we have become used to is more warnings about questionable
practices in every release, more warning conditions disrupting compilation such
that they are treated as errors, and stricter checking of all aspects of programs.

What are your build command lines for the programs giving errors, and what
compiler version are you using on Debian - 8.3?

You can get more details about the configured and assumed defaults by running on
Cygwin and Debian:

	$ touch null.f
	$ gfortran -v   null.f |& tee gfortran-v.log
	$ gfortran -### null.f |& tee gfortran-###.log

You may not have problems if you are building with default -std=gnu or explicit
-std=legacy, but other options may give errors with obsolescent extensions, as
your formats may be considered, although as far as I can see, there is no
gfortran documentation which would support that.

As I did not recognize 1p[23]e... as a repeated format, it is possible that
gfortran now requires you to specify that in a more standards compliant manner,
except perhaps if you compile with -std=legacy (and the runtime supports that in
formatted I/O format strings), otherwise you may want to try restating your
formats in a more standard manner e.g.

	'(i6,3(1pe9.2),x,e9.2,x,0pf6.3,x,2(1pe10.2),''@'')'

which may or may not solve your problem.

I am shocked that gfortran does not appear to me to support any options for
checking string formats at compile time (contrasted with the dozen or so options
for C format string checking), controlling formatting conventions used at
runtime, or really any rigorous treatment of what format options, grammar, and
specifiers are supported at compile time, or in strings at runtime.

You may want to check out the (scant) available documentation at:

	https://gcc.gnu.org/fortran/
	https://gcc.gnu.org/wiki/GFortran

the mailing list archives at:

	https://gcc.gnu.org/pipermail/fortran/
	https://gcc.gnu.org/legacy-ml/fortran/

especially why gfortran is incompatible with g77:

	https://gcc.gnu.org/legacy-ml/fortran/2007-01/msg00619.html

If changing your formats eliminates the errors, I suggest you report a format
compatibility bug against gfortran on the gcc bugzilla, and request they provide
some user documentation for supported compiler and runtime formats, other than
the doxygen internals docs for gfortran and libgfortran.

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: gfortran 9.3 write format error
  2020-04-18 16:23           ` gfortran 9.3 write format error (was: segfaulting on valid write statements) Brian Inglis
@ 2020-04-18 17:00             ` Eliot Moss
  2020-04-18 18:13             ` Charles Russell
  1 sibling, 0 replies; 13+ messages in thread
From: Eliot Moss @ 2020-04-18 17:00 UTC (permalink / raw)
  To: cygwin


 > As I did not recognize 1p[23]e... as a repeated format, it is possible that
 > gfortran now requires you to specify that in a more standards compliant manner,
 > except perhaps if you compile with -std=legacy (and the runtime supports that in
 > formatted I/O format strings), otherwise you may want to try restating your
 > formats in a more standard manner e.g.
 >
 > 	'(i6,3(1pe9.2),x,e9.2,x,0pf6.3,x,2(1pe10.2),''@'')'
 >
 > which may or may not solve your problem.

Or maybe write 1p,3e9.2 since the scale factor thing is actually a separate
format element (I believe, from cruising what general Fortran docs I found
around the Internet).

Best - Eliot

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: gfortran 9.3 write format error
  2020-04-18 16:23           ` gfortran 9.3 write format error (was: segfaulting on valid write statements) Brian Inglis
  2020-04-18 17:00             ` gfortran 9.3 write format error Eliot Moss
@ 2020-04-18 18:13             ` Charles Russell
  2020-04-18 18:45               ` worsafe
                                 ` (2 more replies)
  1 sibling, 3 replies; 13+ messages in thread
From: Charles Russell @ 2020-04-18 18:13 UTC (permalink / raw)
  To: cygwin cygwin

On 4/18/2020 11:23 AM, Brian Inglis wrote:
  what compiler version are you using on Debian

$ gfortran --version
GNU Fortran (Debian 8.3.0-6) 8.3.0

When support ended for g77 I feared for my collection of old fortran 
code, but it all worked fine under gfortran after a few trivial changes 
that I made years ago. (BLOCK DATA had to be rewritten, but I had used 
that only once.) The gfortran developers must intend to keep viable all 
that netlib code that has been widely used and thoroughly debugged. No 
problems with the above gfortran version, which is newer than the most 
recent one for Cygwin. So I doubt that the error message comes from 
intentional compiler changes.

Like you, I can't understand why a syntax error should appear at run 
time.  gfortran is good at finding syntax errors at compile time.

I'm still using fortran 77 because it meets my needs, I know where the 
bugs hide, and that is the language of most netlib code and of all my 
old tools. gfortran handles it well.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: gfortran 9.3 write format error
  2020-04-18 18:13             ` Charles Russell
@ 2020-04-18 18:45               ` worsafe
  2020-04-18 18:52               ` worsafe
  2020-04-18 20:12               ` Charles Russell
  2 siblings, 0 replies; 13+ messages in thread
From: worsafe @ 2020-04-18 18:45 UTC (permalink / raw)
  To: cygwin cygwin

Error in my last message - the current debian gfortran (8.3.0) is in 
fact older than the current cygwin fortran (9.3.0).  So I'll try 
downgrading to 8.3.0 in cygwin.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: gfortran 9.3 write format error
  2020-04-18 18:13             ` Charles Russell
  2020-04-18 18:45               ` worsafe
@ 2020-04-18 18:52               ` worsafe
  2020-04-18 20:12               ` Charles Russell
  2 siblings, 0 replies; 13+ messages in thread
From: worsafe @ 2020-04-18 18:52 UTC (permalink / raw)
  To: cygwin cygwin

There was an error in my last message In fact, the current cygwin 
gfortran is 9.3.0, the current debian compiler is 8.3.0. I'll have to 
reflect upon that.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: gfortran 9.3 write format error
  2020-04-18 18:13             ` Charles Russell
  2020-04-18 18:45               ` worsafe
  2020-04-18 18:52               ` worsafe
@ 2020-04-18 20:12               ` Charles Russell
  2 siblings, 0 replies; 13+ messages in thread
From: Charles Russell @ 2020-04-18 20:12 UTC (permalink / raw)
  To: cygwin cygwin

Problem solved (probably).

When setting out to downgrade gfortran, I found that there was a slight 
upgrade available - 9.3.0.1 to 9.3.0.2. I upgraded, ran "make clean" and 
"make test".  This time it ran to completion with no error message.

Seems unlikely this minor upgrade fixed a major problem.  More likely, 
reinstalling gfortran was what fixed it.

I was having similar problems with other programs, not just this one, 
and time will tell whether upgrading fixed everything.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-04-18 20:13 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <d04d793a-6c8b-7a11-5a9b-5cda1bb86e50.ref@bellsouth.net>
2020-04-17 18:42 ` cygwin gfortran segfaulting on valid write statements worsafe
2020-04-17 19:39   ` Marco Atzeri
2020-04-17 22:29     ` Charles Russell
2020-04-17 19:42   ` Brian Inglis
2020-04-17 19:46   ` Brian Inglis
2020-04-17 23:33     ` Charles Russell
2020-04-18  1:01       ` Brian Inglis
     [not found]         ` <f868b6d5-2aee-c314-8a90-ba86a6aeeca6@bellsouth.net>
2020-04-18 16:23           ` gfortran 9.3 write format error (was: segfaulting on valid write statements) Brian Inglis
2020-04-18 17:00             ` gfortran 9.3 write format error Eliot Moss
2020-04-18 18:13             ` Charles Russell
2020-04-18 18:45               ` worsafe
2020-04-18 18:52               ` worsafe
2020-04-18 20:12               ` Charles Russell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).