How could a simple optional argument lead to data corruption?
===

I have a FORTRAN code with a routine:

    SUBROUTINE READ_NC_VALS(NCID, RECID, VARNAME, VARDATA)
    integer ncid, recid
    character*(*) varname
    real*8 vardata
    dimension vardata(15,45,75)

    etc.


I want to add some flexibility to this code, and I thought I would do it by first adding an optional flag argument:

    SUBROUTINE READ_NC_VALS(NCID, RECID, VARNAME, VARDATA, how_to_calculate)

    ! everything the same and then ...
    logical, optional :: how_to_calculate

Now, at this point, I am not even using "how_to_calculate".  I am just putting it into the code for testing.  So I compile the code without a hitch.  Then I run it, and I get an error in the subroutine.  Specifically, some of the values in the code later on are "magically" altered from what they were without that optional argument.  The new values don't make sense to the logic of the code, so it exits politely with an error message.  Let me stress again that at this point, I am not even using this *optional* argument.  So then, on a lark, I go back to all the places in the source that call this routine and, even though my new argument in optional, I put in values for it in all the calls.  When I do that, the code runs fine.  So, what's up?  How can the mere presence of an unused optional argument in a subroutine result in other data being corrupted?  And how can adding input parameters for this optional argument fix things again?  This is being compiled with PGI, by the way.

Any ideas?  Thanks.

BTW, sorry for not providing more code.  My boss might not be too happy with me if I did that.  I don't make the rules; I just work here.