CppEditor: Consider project part language

... when creating compiler command line for header files.
In particular, make sure we do not use "objective-c++-header" for
Objective-C headers in a C project part.

Fixes: QTCREATORBUG-28368
Change-Id: I1e5067a939e037df53a318af2b15dec7295fcd46
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Christian Kandeler
2022-10-27 16:31:23 +02:00
parent 134c84b502
commit 3c61470cb8
3 changed files with 14 additions and 15 deletions

View File

@@ -125,7 +125,7 @@ static QJsonObject createFileObject(const FilePath &buildDir,
args.append("/TP"); args.append("/TP");
} else { } else {
QStringList langOption QStringList langOption
= createLanguageOptionGcc(kind, = createLanguageOptionGcc(projectPart.language, kind,
projectPart.languageExtensions projectPart.languageExtensions
& LanguageExtension::ObjectiveC); & LanguageExtension::ObjectiveC);
for (const QString &langOptionPart : langOption) for (const QString &langOptionPart : langOption)

View File

@@ -167,7 +167,7 @@ void CompilerOptionsBuilder::addSyntaxOnly()
isClStyle() ? add("/Zs") : add("-fsyntax-only"); isClStyle() ? add("/Zs") : add("-fsyntax-only");
} }
QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt) QStringList createLanguageOptionGcc(Language language, ProjectFile::Kind fileKind, bool objcExt)
{ {
QStringList options; QStringList options;
@@ -176,23 +176,22 @@ QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt)
case ProjectFile::Unsupported: case ProjectFile::Unsupported:
break; break;
case ProjectFile::CHeader: case ProjectFile::CHeader:
if (objcExt) case ProjectFile::AmbiguousHeader:
options += "objective-c-header"; if (language == Language::C)
else options += QLatin1String(objcExt ? "objective-c-header" : "c-header");
options += "c-header"; else if (language == Language::Cxx)
options += QLatin1String(objcExt ? "objective-c++-header" : "c++-header");
break; break;
case ProjectFile::CXXHeader: case ProjectFile::CXXHeader:
default: options += QLatin1String(objcExt ? "objective-c++-header" : "c++-header");
if (!objcExt) { break;
options += "c++-header";
break;
}
Q_FALLTHROUGH();
case ProjectFile::ObjCHeader: case ProjectFile::ObjCHeader:
options += QLatin1String(language == Language::C ? "objective-c-header"
: "objective-c++-header");
break;
case ProjectFile::ObjCXXHeader: case ProjectFile::ObjCXXHeader:
options += "objective-c++-header"; options += "objective-c++-header";
break; break;
case ProjectFile::CSource: case ProjectFile::CSource:
if (!objcExt) { if (!objcExt) {
options += "c"; options += "c";
@@ -447,7 +446,7 @@ void CompilerOptionsBuilder::updateFileLanguage(ProjectFile::Kind fileKind)
} }
const bool objcExt = m_projectPart.languageExtensions & LanguageExtension::ObjectiveC; 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()) if (options.isEmpty())
return; return;

View File

@@ -18,7 +18,7 @@ enum class UseBuildSystemWarnings : char { Yes, No };
CPPEDITOR_EXPORT QStringList XclangArgs(const QStringList &args); CPPEDITOR_EXPORT QStringList XclangArgs(const QStringList &args);
CPPEDITOR_EXPORT QStringList clangArgsForCl(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 class CPPEDITOR_EXPORT CompilerOptionsBuilder
{ {