clang-cl: Warn about overriding /MD with /MT etc.

This also bakes the /M options into a separate option group to make
them easier to refer to from the code.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190529 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index d519a4c..eca94b6 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -3722,11 +3722,19 @@
     // but defining _DEBUG is sticky.
     RTOptionID = options::OPT__SLASH_MTd;
 
-  if (Arg *A = Args.getLastArg(options::OPT__SLASH_MD,
-                               options::OPT__SLASH_MDd,
-                               options::OPT__SLASH_MT,
-                               options::OPT__SLASH_MTd)) {
+  if (Arg *A = Args.getLastArg(options::OPT__SLASH_M_Group)) {
     RTOptionID = A->getOption().getID();
+
+    // Diagnose overrides.
+    arg_iterator it = Args.filtered_begin(options::OPT__SLASH_M_Group);
+    Arg *Previous = *it++;
+    const arg_iterator ie = Args.filtered_end();
+    while (it != ie) {
+      const Driver &D = getToolChain().getDriver();
+      D.Diag(clang::diag::warn_drv_overriding_flag_option)
+        << Previous->getSpelling() << (*it)->getSpelling();
+      Previous = *it++;
+    }
   }
 
   switch(RTOptionID) {