diff --git a/src/CppParser/CppParser.h b/src/CppParser/CppParser.h index 922cabfb..f0e479cf 100644 --- a/src/CppParser/CppParser.h +++ b/src/CppParser/CppParser.h @@ -82,9 +82,9 @@ struct CS_API ParserDiagnostic ~ParserDiagnostic(); std::string fileName; std::string message; - ParserDiagnosticLevel level; - int lineNumber; - int columnNumber; + ParserDiagnosticLevel level { ParserDiagnosticLevel::Ignored }; + int lineNumber {0}; + int columnNumber {0}; }; enum class ParserResultKind diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 97d77366..4e55c574 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -4713,7 +4713,13 @@ ParserResult* Parser::ParseLibrary(const CppLinkerOptions* Opts) auto BinaryOrErr = llvm::object::createBinary(FileEntry); if (!BinaryOrErr) { - auto Error = BinaryOrErr.takeError(); + auto ErrMsg = llvm::toString(BinaryOrErr.takeError()); + auto Diag = ParserDiagnostic(); + Diag.fileName = FileEntry; + Diag.message = ErrMsg; + Diag.level = ParserDiagnosticLevel::Error; + res->Diagnostics.push_back(Diag); + res->kind = ParserResultKind::Error; return res; } diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 82780bfa..8910ccab 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -137,9 +137,17 @@ namespace CppSharp if (diag.Level == ParserDiagnosticLevel.Note) continue; - Diagnostics.Message("{0}({1},{2}): {3}: {4}", - diag.FileName, diag.LineNumber, diag.ColumnNumber, - diag.Level.ToString().ToLower(), diag.Message); + if (diag.LineNumber == 0 && diag.ColumnNumber == 0) + { + Diagnostics.Message("{0}: {1}: {2}", + diag.FileName, diag.Level.ToString().ToLower(), diag.Message); + } + else + { + Diagnostics.Message("{0}({1},{2}): {3}: {4}", + diag.FileName, diag.LineNumber, diag.ColumnNumber, + diag.Level.ToString().ToLower(), diag.Message); + } } } @@ -196,7 +204,10 @@ namespace CppSharp using var res = ClangParser.ParseLibrary(linkerOptions); if (res.Kind != ParserResultKind.Success) + { + res.Dispose(); continue; + } for (uint i = 0; i < res.LibrariesCount; i++) Context.Symbols.Libraries.Add(ClangParser.ConvertLibrary(res.GetLibraries(i))); @@ -206,7 +217,7 @@ namespace CppSharp Context.Symbols.IndexSymbols(); SortModulesByDependencies(); - return true; + return !hasParsingErrors; } public void SetupPasses(ILibrary library)