diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index a99dea83db7..c250c9b4603 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -125,7 +125,7 @@ static QJsonObject createFileObject(const FilePath &buildDir, args.append("/TP"); } else { QStringList langOption - = createLanguageOptionGcc(kind, + = createLanguageOptionGcc(projectPart.language, kind, projectPart.languageExtensions & LanguageExtension::ObjectiveC); for (const QString &langOptionPart : langOption) diff --git a/src/plugins/cppeditor/compileroptionsbuilder.cpp b/src/plugins/cppeditor/compileroptionsbuilder.cpp index def318acb4e..2b40528dd39 100644 --- a/src/plugins/cppeditor/compileroptionsbuilder.cpp +++ b/src/plugins/cppeditor/compileroptionsbuilder.cpp @@ -167,7 +167,7 @@ void CompilerOptionsBuilder::addSyntaxOnly() isClStyle() ? add("/Zs") : add("-fsyntax-only"); } -QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt) +QStringList createLanguageOptionGcc(Language language, ProjectFile::Kind fileKind, bool objcExt) { QStringList options; @@ -176,23 +176,22 @@ QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt) case ProjectFile::Unsupported: break; case ProjectFile::CHeader: - if (objcExt) - options += "objective-c-header"; - else - options += "c-header"; + case ProjectFile::AmbiguousHeader: + if (language == Language::C) + options += QLatin1String(objcExt ? "objective-c-header" : "c-header"); + else if (language == Language::Cxx) + options += QLatin1String(objcExt ? "objective-c++-header" : "c++-header"); break; case ProjectFile::CXXHeader: - default: - if (!objcExt) { - options += "c++-header"; - break; - } - Q_FALLTHROUGH(); + options += QLatin1String(objcExt ? "objective-c++-header" : "c++-header"); + break; case ProjectFile::ObjCHeader: + options += QLatin1String(language == Language::C ? "objective-c-header" + : "objective-c++-header"); + break; case ProjectFile::ObjCXXHeader: options += "objective-c++-header"; break; - case ProjectFile::CSource: if (!objcExt) { options += "c"; @@ -447,7 +446,7 @@ void CompilerOptionsBuilder::updateFileLanguage(ProjectFile::Kind fileKind) } const bool objcExt = m_projectPart.languageExtensions & LanguageExtension::ObjectiveC; - const QStringList options = createLanguageOptionGcc(fileKind, objcExt); + const QStringList options = createLanguageOptionGcc(m_projectPart.language, fileKind, objcExt); if (options.isEmpty()) return; diff --git a/src/plugins/cppeditor/compileroptionsbuilder.h b/src/plugins/cppeditor/compileroptionsbuilder.h index 86842fa687a..1d6e384b9bd 100644 --- a/src/plugins/cppeditor/compileroptionsbuilder.h +++ b/src/plugins/cppeditor/compileroptionsbuilder.h @@ -18,7 +18,7 @@ enum class UseBuildSystemWarnings : char { Yes, No }; CPPEDITOR_EXPORT QStringList XclangArgs(const QStringList &args); CPPEDITOR_EXPORT QStringList clangArgsForCl(const QStringList &args); -CPPEDITOR_EXPORT QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt); +CPPEDITOR_EXPORT QStringList createLanguageOptionGcc(Utils::Language language, ProjectFile::Kind fileKind, bool objcExt); class CPPEDITOR_EXPORT CompilerOptionsBuilder {