diff --git a/clang/include/clang/Basic/Diagnostic.h b/clang/include/clang/Basic/Diagnostic.h index 87489257cc59..9c0a02ca878c 100644 --- a/clang/include/clang/Basic/Diagnostic.h +++ b/clang/include/clang/Basic/Diagnostic.h @@ -27,6 +27,7 @@ namespace clang { class SourceRange; class DiagnosticBuilder; class IdentifierInfo; + class LangOptions; // Import the diagnostic enums themselves. namespace diag { @@ -667,6 +668,13 @@ class DiagnosticClient { public: virtual ~DiagnosticClient(); + /// setLangOptions - This is set by clients of diagnostics when they know the + /// language parameters of the diagnostics that may be sent through. Note + /// that this can change over time if a DiagClient has multiple languages sent + /// through it. It may also be set to null (e.g. when processing command line + /// options). + virtual void setLangOptions(const LangOptions *LO) {} + /// IncludeInDiagnosticCounts - This method (whose default implementation /// returns true) indicates whether the diagnostics handled by this /// DiagnosticClient should be included in the number of diagnostics diff --git a/clang/include/clang/Frontend/TextDiagnosticPrinter.h b/clang/include/clang/Frontend/TextDiagnosticPrinter.h index 9341b89f56ab..afdafb2b34a9 100644 --- a/clang/include/clang/Frontend/TextDiagnosticPrinter.h +++ b/clang/include/clang/Frontend/TextDiagnosticPrinter.h @@ -50,8 +50,8 @@ public: PrintRangeInfo(printRangeInfo), PrintDiagnosticOption(printDiagnosticOption) {} - void SetLangOpts(const LangOptions &LO) { - LangOpts = &LO; + void setLangOptions(const LangOptions *LO) { + LangOpts = LO; } void PrintIncludeStack(SourceLocation Loc, const SourceManager &SM); diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp index e9e5c3744a9c..81d1e397904b 100644 --- a/clang/tools/clang-cc/clang-cc.cpp +++ b/clang/tools/clang-cc/clang-cc.cpp @@ -2301,11 +2301,7 @@ int main(int argc, char **argv) { // Initialize language options, inferring file types from input filenames. LangOptions LangInfo; - - if (!VerifyDiagnostics) - static_cast(TextDiagClient) - ->SetLangOpts(LangInfo); - + TextDiagClient->setLangOptions(&LangInfo); InitializeBaseLanguage(); LangKind LK = GetLanguage(InFile); @@ -2346,7 +2342,8 @@ int main(int argc, char **argv) { // Process the source file. ProcessInputFile(*PP, PPFactory, InFile, ProgAction); - HeaderInfo.ClearFileInfo(); + HeaderInfo.ClearFileInfo(); + TextDiagClient->setLangOptions(0); } if (Verbose)