From f699323ade84bb672ed0998de73c6f0333981bc1 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 24 Aug 2016 11:51:59 -0400 Subject: [PATCH] Fortran: Fix .mod file comparison for Intel 16 format The Intel 16 format starts with the 0x0A 0x00 sequence that we use to skip past the timestamp. This occurrence appears to be a version number. Skip the first byte to avoid matching the sequence early. Ideally we should gain a better understanding of the format and avoid depending on short sequences that are likely to appear early by coincidence, but this approach will suffice for now. Closes: #16263 --- Source/cmDependsFortran.cxx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/cmDependsFortran.cxx b/Source/cmDependsFortran.cxx index 38e319d72..4608b5ae0 100644 --- a/Source/cmDependsFortran.cxx +++ b/Source/cmDependsFortran.cxx @@ -677,6 +677,12 @@ bool cmDependsFortran::ModulesDiffer(const char* modFile, const char seq[2] = { '\n', '\0' }; const int seqlen = 2; + // Skip the leading byte which appears to be a version number. + // We do not need to check for an error because the sequence search + // below will fail in that case. + finModFile.get(); + finStampFile.get(); + if (!cmFortranStreamContainsSequence(finModFile, seq, seqlen)) { // The module is of unexpected format. Assume it is different. std::cerr << compilerId << " fortran module " << modFile