diff --git a/Source/cmDependsFortran.cxx b/Source/cmDependsFortran.cxx index 1eece98ad..b7e006d76 100644 --- a/Source/cmDependsFortran.cxx +++ b/Source/cmDependsFortran.cxx @@ -130,6 +130,12 @@ bool cmDependsFortran::WriteDependencies(const std::set& sources, if (cmFortran_yyparse(parser.Scanner) != 0) { // Failed to parse the file. Report failure to write dependencies. okay = false; + /* clang-format off */ + std::cerr << + "warning: failed to parse dependencies from Fortran source " + "'" << src << "': " << parser.Error << std::endl + ; + /* clang-format on */ } } return okay; diff --git a/Source/cmFortranParser.h b/Source/cmFortranParser.h index 5f1c7acdf..57ad2afbe 100644 --- a/Source/cmFortranParser.h +++ b/Source/cmFortranParser.h @@ -146,6 +146,9 @@ struct cmFortranParser_s // Buffer for string literals. std::string TokenString; + // Error message text if a parser error occurs. + std::string Error; + // Flag for whether lexer is reading from inside an interface. bool InInterface; diff --git a/Source/cmFortranParserImpl.cxx b/Source/cmFortranParserImpl.cxx index 71edf9f7a..d43d47c67 100644 --- a/Source/cmFortranParserImpl.cxx +++ b/Source/cmFortranParserImpl.cxx @@ -164,11 +164,9 @@ int cmFortranParser_GetOldStartcond(cmFortranParser* parser) return parser->OldStartcond; } -void cmFortranParser_Error(cmFortranParser* /*unused*/, const char* /*unused*/) +void cmFortranParser_Error(cmFortranParser* parser, const char* msg) { - // If there is a parser error just ignore it. The source will not - // compile and the user will edit it. Then dependencies will have - // to be regenerated anyway. + parser->Error = msg ? msg : "unknown error"; } void cmFortranParser_RuleUse(cmFortranParser* parser, const char* name)