]> granicus.if.org Git - clang/commitdiff
When generating diagnostic information due to a clang failure, allow multiple
authorChad Rosier <mcrosier@apple.com>
Mon, 13 Feb 2012 18:16:28 +0000 (18:16 +0000)
committerChad Rosier <mcrosier@apple.com>
Mon, 13 Feb 2012 18:16:28 +0000 (18:16 +0000)
-arch options if the're all the same.

Patch by Jeremy Huddleston.
rdar://10849701

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150403 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/Driver.cpp

index 10eec2e1edf2f812f243bec115de00dc236d6531..26ceb32e73ee4b80d1573c9841ef9bbdd0c9905a 100644 (file)
@@ -410,21 +410,22 @@ void Driver::generateCompilationDiagnostics(Compilation &C,
   }
 
   // Don't attempt to generate preprocessed files if multiple -arch options are
-  // used.
-  int Archs = 0;
+  // used, unless they're all duplicates.
+  llvm::StringSet<> ArchNames;
   for (ArgList::const_iterator it = C.getArgs().begin(), ie = C.getArgs().end();
        it != ie; ++it) {
     Arg *A = *it;
     if (A->getOption().matches(options::OPT_arch)) {
-      Archs++;
-      if (Archs > 1) {
-        Diag(clang::diag::note_drv_command_failed_diag_msg)
-          << "Error generating preprocessed source(s) - cannot generate "
-          "preprocessed source with multiple -arch options.";
-        return;
-      }
+      StringRef ArchName = A->getValue(C.getArgs());
+      ArchNames.insert(ArchName);
     }
   }
+  if (ArchNames.size() > 1) {
+    Diag(clang::diag::note_drv_command_failed_diag_msg)
+      << "Error generating preprocessed source(s) - cannot generate "
+      "preprocessed source with multiple -arch options.";
+    return;
+  }
 
   if (Inputs.empty()) {
     Diag(clang::diag::note_drv_command_failed_diag_msg)