diff --git a/src/plugins/clangcodemodel/semanticmarker.cpp b/src/plugins/clangcodemodel/semanticmarker.cpp index cb5d0b71f43..cb17346d109 100644 --- a/src/plugins/clangcodemodel/semanticmarker.cpp +++ b/src/plugins/clangcodemodel/semanticmarker.cpp @@ -33,6 +33,7 @@ #include "utils_p.h" #include "cxraii.h" +#include #include using namespace ClangCodeModel; @@ -131,12 +132,23 @@ static void appendDiagnostic(const CXDiagnostic &diag, } } +static bool isBlackListedDiagnostic(const Utils::MimeType &mimeType, const QString &diagnostic) +{ + static QString pragmaOnceInMainFile = QLatin1String("#pragma once in main file"); + + return diagnostic == pragmaOnceInMainFile + && mimeType.inherits(QLatin1String("text/x-chdr")); +} + QList SemanticMarker::diagnostics() const { QList diagnostics; if (!m_unit || !m_unit->isLoaded()) return diagnostics; + Utils::MimeDatabase mimeDatabase; + const Utils::MimeType mimeType = mimeDatabase.mimeTypeForFile(fileName()); + const unsigned diagCount = m_unit->getNumDiagnostics(); for (unsigned i = 0; i < diagCount; ++i) { ScopedCXDiagnostic diag(m_unit->getDiagnostic(i)); @@ -148,6 +160,9 @@ QList SemanticMarker::diagnostics() const CXSourceLocation cxLocation = clang_getDiagnosticLocation(diag); QString spelling = Internal::getQString(clang_getDiagnosticSpelling(diag)); + if (isBlackListedDiagnostic(mimeType, spelling)) + continue; + // Attach messages with Diagnostic::Note severity ScopedCXDiagnosticSet cxChildren(clang_getChildDiagnostics(diag)); const unsigned numChildren = clang_getNumDiagnosticsInSet(cxChildren);