RTEMS FORTRAN Pattern Failures

Tobias Burnus burnus@net-b.de
Mon Jan 12 20:50:00 GMT 2015


Joel Sherrill wrote:
> run.txt is the cut and paste of the log file which reflects DejaGNU's 
> view of the run.
Which means that it hopefully matches every bit of the original output 
and that no editor interferes by adding or removing line breaks.


> Additionally, I think you are right that the "*** EXIT code 0" also 
> causes problems with the pattern.
> Details below but this is standard DejaGNU output when the target
> doesn't return
> an exit code.

Good to know. If the pattern is known, one can add it to the pattern.


>>   Can you try the following:
>>
>> a) Replace the pattern by  "1 2  3(\n|\r\r\n|\r)" (twice), note the
>> duplicated "\r"
>> b) Remove the "dg-output "\$" line
>>
>> [Best would be if you could try them also separately.] My bet would be
>> that doing (a) and (b) will succeed, while only (a) and (b) will fail.
>>
>>
>> If using (a) [alone or together with (b)] works, you should really find
>> out what inserts the "\r", especially as it does not appear if you
>> manually run the program. "\r\r\n" is definitely not a pattern I would
>> like to see in the test file.
> I assume the file in question is
> gcc/gcc/testsuite/gfortran.dg/g77/f77-edit-x-out.f

Yes.

> (a) alone didn't make it pass.
> (b) alone didn't make it pass.
> (a) and (b) together did not make it pass
>
> Does this file get copied or something else during the process that
> would eliminate edits having an impact?

I don't think so. Too bad that it didn't seem to help.

> Is there an easy way to take out.txt and just force it against this 
> .exp pattern?

Well, you could try whether PERL is able to match it, i.e. something 
like "cat file | perl ..." if you manage to get the exact output into a 
file (esp. with the right number of \r and \n, including the last line). 
I don't know whether that's really identical but it should come close to 
how DejaGNU matches the pattern.

Example - I use printf instead of a file:

printf '1 2  3\n1 2  3\n\n*** EXIT code 0' \
   | perl -e '$in = join("", <STDIN>); if ($in =~ m/^1 2 3(\n|\r\n|\r)1 
2  3(\n|\r\n|\r)((\n|\r\n|\r)\*\*\* EXIT code 0)?$/s) { print 
"matched\n" } else { print "not matched\n" };'

Tobias



More information about the Gcc mailing list