diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
index 988c61d97cdbee89759ffdc1c40c0adacccd29be..16132315b820bf508a66e78507827d20806d2933 100644
--- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
+++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
@@ -274,6 +274,18 @@ QString AbstractMsvcToolChain::findInstalledJom()
         return jom;
 }
 
+bool AbstractMsvcToolChain::operator ==(const ToolChain &other) const
+{
+    if (!ToolChain::operator ==(other))
+        return false;
+
+    const AbstractMsvcToolChain *msvcTc = static_cast<const AbstractMsvcToolChain *>(&other);
+    return targetAbi() == msvcTc->targetAbi()
+            && m_debuggerCommand == msvcTc->m_debuggerCommand
+            && m_vcvarsBat == msvcTc->m_vcvarsBat;
+}
+
+
 } // namespace Internal
 } // namespace ProjectExplorer
 
diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.h b/src/plugins/projectexplorer/abstractmsvctoolchain.h
index b57b1641ce01ca3d382bcec4dbb257ee324bad1e..c5783ecaa8074b900595593bc261727104b9945a 100644
--- a/src/plugins/projectexplorer/abstractmsvctoolchain.h
+++ b/src/plugins/projectexplorer/abstractmsvctoolchain.h
@@ -65,6 +65,9 @@ public:
 
     QString varsBat() const { return m_vcvarsBat; }
     static QString findInstalledJom();
+
+    bool operator ==(const ToolChain &) const;
+
 protected:
     virtual Utils::Environment readEnvironmentSetting(Utils::Environment& env) const = 0;
     virtual QByteArray msvcPredefinedMacros(const Utils::Environment& env) const;