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.

llvm-svn: 190529
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index d519a4c..eca94b6 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/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) {