PetscPrintf/ifort 9.1
Barry Smith
bsmith at mcs.anl.gov
Wed Aug 29 15:50:41 CDT 2007
Leif,
You obviously have thought about this more then me; I wasn't even
considering supporting \\, etc. So yes, it could generate unexpected results.
Since I cannot do it exactly right and general I will simply remove
PetscPrintf() and friends from PETSc for Fortran.
Barry
On Wed, 29 Aug 2007, Leif Strand wrote:
> Barry Smith wrote:
> > On Wed, 29 Aug 2007, Leif Strand wrote:
> > > (consider "\\n")
>
> > Actually this is not a problem, as was pointed out before the C compiler
> > replaces the \n with a single charactor (ASCII 10) so my simple search and
> > replace will never see the STRING "\n" when the Fortran compiler is gfortran
> > so nothing will be done twice.
>
> Again, consider "\\n". With PetscFixSlashN(), you are trying to meet the
> expectations of C programmers. So, let's say I write the C-ish quasi-Fortran
> code, 'call PetscPrintf("\\no")'. As a C programmer, I might expect this to
> print:
>
> \no
>
> [Of course, if I had plenty of coffee this morning, I would know I was calling
> 'PetscPrintf' from Fortran, and therefore, I would not know what to expect in
> this case, but we've already covered that.]
>
> Intel's ifort will leave "\\n" as "\\n", so PetscFixSlashN() will see "\\n" at
> runtime. As of right now, PetscFixSlashN() code doesn't handle "\\"
> correctly, so it will munge it so that it becomes {'\\', '\n', 'o'} and will
> PETSc print
>
> \
> o
>
> which is not what I intended.
>
> If you beef-up PetscFixSlashN() so that it handles escaped-backslashes ("\\"),
> you've "fixed" the 'ifort' case, but G95 is still broken. G95 will translate
> "\\no" to "\no" itself, at compile-time. So PetscFixSlashN() will see "\no"
> at runtime, and behave as if I had written "\no" in my code:
>
> [LF]
> o
>
> At runtime, you have no way of knowing whether the user's Fortran compiler did
> "\x" translation at compile-time, so you would need a 'configure.py' test to
> check this -- and even then, PETSc would screw up in non-trivial cases (what
> if the string was generated?).
>
> Better to do nothing than to have a half-baked implementation which satisfies
> users' faulty expectations.
>
> --Leif
>
>
More information about the petsc-users
mailing list