diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp
index ae1e74020e679fd11452989db0f7717aee0cea4c..943b731d907e4f74f76146aa12fe2ff5029aee67 100644
--- a/src/plugins/clangcodemodel/clangutils.cpp
+++ b/src/plugins/clangcodemodel/clangutils.cpp
@@ -89,6 +89,7 @@ public:
 
         LibClangOptionsBuilder optionsBuilder(*projectPart.data());
 
+        optionsBuilder.addWordWidth();
         optionsBuilder.addTargetTriple();
         optionsBuilder.addLanguageOption(fileKind);
         optionsBuilder.addOptionsForLanguage(/*checkForBorlandExtensions*/ true);
diff --git a/src/plugins/clangrefactoring/refactoringcompileroptionsbuilder.cpp b/src/plugins/clangrefactoring/refactoringcompileroptionsbuilder.cpp
index 372cf1af1502b14dc9fd283a099eb59da09721d4..64feefa576f5998ab5d8dec2881646dfc4ed7a7f 100644
--- a/src/plugins/clangrefactoring/refactoringcompileroptionsbuilder.cpp
+++ b/src/plugins/clangrefactoring/refactoringcompileroptionsbuilder.cpp
@@ -124,6 +124,7 @@ Utils::SmallStringVector RefactoringCompilerOptionsBuilder::build(CppTools::Proj
 
     RefactoringCompilerOptionsBuilder optionsBuilder(projectPart);
 
+    optionsBuilder.addWordWidth();
     optionsBuilder.addTargetTriple();
     optionsBuilder.addLanguageOption(fileKind);
     optionsBuilder.addOptionsForLanguage(/*checkForBorlandExtensions*/ true);
diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp
index 1ead54a811a4cd47a5fecb649aaa1b7c9b93b334..1577db6bec08c9709723fc9ed04215b490d8e73d 100644
--- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp
+++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp
@@ -86,18 +86,18 @@ ClangStaticAnalyzerRunControl::ClangStaticAnalyzerRunControl(
 
     ToolChain *toolChain = ToolChainKitInformation::toolChain(target->kit(), ToolChain::Language::Cxx);
     QTC_ASSERT(toolChain, return);
-    m_extraToolChainInfo.wordWidth = toolChain->targetAbi().wordWidth();
-    m_extraToolChainInfo.targetTriple = toolChain->originalTargetTriple();
+    m_targetTriple = toolChain->originalTargetTriple();
 }
 
-static void prependWordWidthArgumentIfNotIncluded(QStringList *arguments, unsigned char wordWidth)
+static void prependWordWidthArgumentIfNotIncluded(QStringList *arguments,
+                                                  ProjectPart::ToolChainWordWidth wordWidth)
 {
     QTC_ASSERT(arguments, return);
 
     const QString m64Argument = QLatin1String("-m64");
     const QString m32Argument = QLatin1String("-m32");
 
-    const QString argument = wordWidth == 64 ? m64Argument : m32Argument;
+    const QString argument = wordWidth == ProjectPart::WordWidth64Bit ? m64Argument : m32Argument;
     if (!arguments->contains(argument))
         arguments->prepend(argument);
 
@@ -165,11 +165,11 @@ class ClangStaticAnalyzerOptionsBuilder : public CompilerOptionsBuilder
 {
 public:
     static QStringList build(const CppTools::ProjectPart &projectPart,
-                             CppTools::ProjectFile::Kind fileKind,
-                             const ExtraToolChainInfo &extraParams)
+                             CppTools::ProjectFile::Kind fileKind)
     {
         ClangStaticAnalyzerOptionsBuilder optionsBuilder(projectPart);
 
+        optionsBuilder.addWordWidth();
         optionsBuilder.addTargetTriple();
         optionsBuilder.addLanguageOption(fileKind);
         optionsBuilder.addOptionsForLanguage(false);
@@ -195,10 +195,7 @@ public:
         if (type != ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID)
             optionsBuilder.add(QLatin1String("-fPIC")); // TODO: Remove?
 
-        QStringList options = optionsBuilder.options();
-        prependWordWidthArgumentIfNotIncluded(&options, extraParams.wordWidth);
-
-        return options;
+        return optionsBuilder.options();
     }
 
     ClangStaticAnalyzerOptionsBuilder(const CppTools::ProjectPart &projectPart)
@@ -325,11 +322,11 @@ static QStringList createHeaderPathsOptionsForClangOnMac(const ProjectPart &proj
 static QStringList tweakedArguments(const ProjectPart &projectPart,
                                     const QString &filePath,
                                     const QStringList &arguments,
-                                    const ExtraToolChainInfo &extraParams)
+                                    const QString &targetTriple)
 {
     QStringList newArguments = inputAndOutputArgumentsRemoved(filePath, arguments);
-    prependWordWidthArgumentIfNotIncluded(&newArguments, extraParams.wordWidth);
-    prependTargetTripleIfNotIncludedAndNotEmpty(&newArguments, extraParams.targetTriple);
+    prependWordWidthArgumentIfNotIncluded(&newArguments, projectPart.toolChainWordWidth);
+    prependTargetTripleIfNotIncludedAndNotEmpty(&newArguments, targetTriple);
     newArguments.append(createHeaderPathsOptionsForClangOnMac(projectPart));
     newArguments.append(createMsCompatibilityVersionOption(projectPart));
     newArguments.append(createOptionsToUndefineClangVersionMacrosForMsvc(projectPart));
@@ -341,7 +338,7 @@ static QStringList tweakedArguments(const ProjectPart &projectPart,
 static AnalyzeUnits unitsToAnalyzeFromCompilerCallData(
             const QHash<QString, ProjectPart::Ptr> &projectFileToProjectPart,
             const ProjectInfo::CompilerCallData &compilerCallData,
-            const ExtraToolChainInfo &extraParams)
+            const QString &targetTriple)
 {
     qCDebug(LOG) << "Taking arguments for analyzing from CompilerCallData.";
 
@@ -361,7 +358,7 @@ static AnalyzeUnits unitsToAnalyzeFromCompilerCallData(
                 const QStringList arguments = tweakedArguments(*projectPart,
                                                                file,
                                                                options,
-                                                               extraParams);
+                                                               targetTriple);
                 unitsToAnalyze << AnalyzeUnit(file, arguments);
             }
         }
@@ -370,8 +367,7 @@ static AnalyzeUnits unitsToAnalyzeFromCompilerCallData(
     return unitsToAnalyze;
 }
 
-static AnalyzeUnits unitsToAnalyzeFromProjectParts(const QList<ProjectPart::Ptr> projectParts,
-                                                   const ExtraToolChainInfo &extraParams)
+static AnalyzeUnits unitsToAnalyzeFromProjectParts(const QList<ProjectPart::Ptr> projectParts)
 {
     qCDebug(LOG) << "Taking arguments for analyzing from ProjectParts.";
 
@@ -387,9 +383,7 @@ static AnalyzeUnits unitsToAnalyzeFromProjectParts(const QList<ProjectPart::Ptr>
             QTC_CHECK(file.kind != ProjectFile::Unclassified);
             if (ProjectFile::isSource(file.kind)) {
                 const QStringList arguments
-                    = ClangStaticAnalyzerOptionsBuilder::build(*projectPart.data(),
-                                                               file.kind,
-                                                               extraParams);
+                    = ClangStaticAnalyzerOptionsBuilder::build(*projectPart.data(), file.kind);
                 unitsToAnalyze << AnalyzeUnit(file.path, arguments);
             }
         }
@@ -418,13 +412,13 @@ AnalyzeUnits ClangStaticAnalyzerRunControl::sortedUnitsToAnalyze()
     AnalyzeUnits units;
     const ProjectInfo::CompilerCallData compilerCallData = m_projectInfo.compilerCallData();
     if (compilerCallData.isEmpty()) {
-        units = unitsToAnalyzeFromProjectParts(m_projectInfo.projectParts(), m_extraToolChainInfo);
+        units = unitsToAnalyzeFromProjectParts(m_projectInfo.projectParts());
     } else {
         const QHash<QString, ProjectPart::Ptr> projectFileToProjectPart
                 = generateProjectFileToProjectPartMapping(m_projectInfo.projectParts());
         units = unitsToAnalyzeFromCompilerCallData(projectFileToProjectPart,
                                                    compilerCallData,
-                                                   m_extraToolChainInfo);
+                                                   m_targetTriple);
     }
 
     Utils::sort(units, &AnalyzeUnit::file);
diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h
index 18deebfcbd311f80508101b7de1257960538b8f9..ce974bac37f6d005f9307520727624c9abba3d26 100644
--- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h
+++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h
@@ -47,11 +47,6 @@ struct AnalyzeUnit {
 };
 typedef QList<AnalyzeUnit> AnalyzeUnits;
 
-struct ExtraToolChainInfo {
-    unsigned char wordWidth = 0;
-    QString targetTriple;
-};
-
 class ClangStaticAnalyzerRunControl : public ProjectExplorer::RunControl
 {
     Q_OBJECT
@@ -88,7 +83,7 @@ private:
 
 private:
     const CppTools::ProjectInfo m_projectInfo;
-    ExtraToolChainInfo m_extraToolChainInfo;
+    QString m_targetTriple;
 
     Utils::Environment m_environment;
     QString m_clangExecutable;
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp
index f3b89c27f6b314ac7654ecea61a970987629d303..68a2586c0d4e0e39d1eef4ceb1065505701a8ea9 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.cpp
+++ b/src/plugins/cpptools/compileroptionsbuilder.cpp
@@ -87,6 +87,14 @@ void CompilerOptionsBuilder::addDefine(const QByteArray &defineDirective)
     m_options.append(defineDirectiveToDefineOption(defineDirective));
 }
 
+void CompilerOptionsBuilder::addWordWidth()
+{
+    const QString argument = m_projectPart.toolChainWordWidth == ProjectPart::WordWidth64Bit
+            ? QLatin1String("-m64")
+            : QLatin1String("-m32");
+    add(argument);
+}
+
 void CompilerOptionsBuilder::addTargetTriple()
 {
     if (!m_projectPart.targetTriple.isEmpty()) {
diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h
index a4aec5afdd922ee50fa8e4eb8923994d21e7bcda..e1ec557d835dee51379fcf85bcc97d6b7967fa37 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.h
+++ b/src/plugins/cpptools/compileroptionsbuilder.h
@@ -44,6 +44,7 @@ public:
     void addDefine(const QByteArray &defineDirective);
 
     // Add options based on project part
+    void addWordWidth();
     virtual void addTargetTriple();
     virtual void enableExceptions();
     void addHeaderPathOptions();
diff --git a/src/plugins/cpptools/projectpart.cpp b/src/plugins/cpptools/projectpart.cpp
index 85ea324c9f87c41fdfe80f055aa54eef43affb68..921d981a61154aa0025971428031a4ee6a5b9a22 100644
--- a/src/plugins/cpptools/projectpart.cpp
+++ b/src/plugins/cpptools/projectpart.cpp
@@ -32,6 +32,7 @@ namespace CppTools {
 
 ProjectPart::ProjectPart()
     : project(0)
+    , toolChainWordWidth(WordWidth32Bit)
     , isMsvc2015Toolchain(false)
     , languageVersion(CXX14)
     , languageExtensions(NoExtensions)
diff --git a/src/plugins/cpptools/projectpart.h b/src/plugins/cpptools/projectpart.h
index b18a57e1497e538bcbae2dce3538455eca1b4195..ea45720589ca63bcedc6de853225be488ffb1aa2 100644
--- a/src/plugins/cpptools/projectpart.h
+++ b/src/plugins/cpptools/projectpart.h
@@ -81,6 +81,11 @@ public: // Types
         Qt5 = 2
     };
 
+    enum ToolChainWordWidth {
+        WordWidth32Bit,
+        WordWidth64Bit,
+    };
+
     using Ptr = QSharedPointer<ProjectPart>;
 
 
@@ -103,6 +108,7 @@ public: // fields
     QByteArray projectDefines;
     QByteArray toolchainDefines;
     Core::Id toolchainType;
+    ToolChainWordWidth toolChainWordWidth;
     bool isMsvc2015Toolchain;
     QString targetTriple;
     ProjectPartHeaderPaths headerPaths;
diff --git a/src/plugins/cpptools/projectpartbuilder.cpp b/src/plugins/cpptools/projectpartbuilder.cpp
index b01795f9cf276ae35c271e5720d667f961f52343..98169f7d230c1653905c68034c18ae82da36afbe 100644
--- a/src/plugins/cpptools/projectpartbuilder.cpp
+++ b/src/plugins/cpptools/projectpartbuilder.cpp
@@ -343,6 +343,9 @@ void ProjectPartBuilder::evaluateProjectPartToolchain(
     projectPart->toolchainType = toolChain->typeId();
     projectPart->isMsvc2015Toolchain
             = toolChain->targetAbi().osFlavor() == ProjectExplorer::Abi::WindowsMsvc2015Flavor;
+    projectPart->toolChainWordWidth = toolChain->targetAbi().wordWidth() == 64
+            ? ProjectPart::WordWidth64Bit
+            : ProjectPart::WordWidth32Bit;
     projectPart->targetTriple = targetTriple(projectPart->project, toolChain->typeId());
     projectPart->updateLanguageFeatures();
 }