clang/Driver: [PR12920] Don't forward any -W arguments to gcc-as and gcc-ld.

AFAIK, there are no -W options for gcc-as and gcc-ld.
It caused failure to build clang with gcc-4.7 on cygwin.

FIXME: Could we recategorize Options for gcc-as and gcc-ld?

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188668 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index ad004ba..3257946 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -3906,6 +3906,11 @@
           A->getOption().matches(options::OPT_g_Group))
         continue;
 
+      // Don't forward any -W arguments to assembly and link steps.
+      if ((isa<AssembleJobAction>(JA) || isa<LinkJobAction>(JA)) &&
+          A->getOption().matches(options::OPT_W_Group))
+        continue;
+
       // It is unfortunate that we have to claim here, as this means
       // we will basically never report anything interesting for
       // platforms using a generic gcc, even if we are just using gcc
diff --git a/test/Driver/gcc_forward.c b/test/Driver/gcc_forward.c
index a3502b2..b9933d7 100644
--- a/test/Driver/gcc_forward.c
+++ b/test/Driver/gcc_forward.c
@@ -1,18 +1,44 @@
 // Check that we don't try to forward -Xclang or -mlinker-version to GCC.
+// PR12920 -- Check also we may not forward W_Group options to GCC.
 //
 // RUN: %clang -target powerpc-unknown-unknown \
-// RUN:   -c %s \
+// RUN:   %s \
+// RUN:   -Wall -Wdocumentation \
 // RUN:   -Xclang foo-bar \
 // RUN:   -march=x86_64 \
 // RUN:   -mlinker-version=10 -### 2> %t
 // RUN: FileCheck < %t %s
 //
-// CHECK: gcc{{.*}}"
+// clang-cc1
+// CHECK: "-Wall" "-Wdocumentation"
+// CHECK: "-o" "{{[^"]+}}.s"
+//
+// gcc-as
+// CHECK: gcc{{[^"]*}}"
 // CHECK-NOT: "-mlinker-version=10"
 // CHECK-NOT: "-Xclang"
 // CHECK-NOT: "foo-bar"
+// CHECK-NOT: "-Wall"
+// CHECK-NOT: "-Wdocumentation"
 // CHECK: -march
 // CHECK-NOT: "-mlinker-version=10"
 // CHECK-NOT: "-Xclang"
 // CHECK-NOT: "foo-bar"
-// CHECK: gcc_forward
+// CHECK-NOT: "-Wall"
+// CHECK-NOT: "-Wdocumentation"
+// CHECK: "-o" "{{[^"]+}}.o"
+//
+// gcc-ld
+// CHECK: gcc{{[^"]*}}"
+// CHECK-NOT: "-mlinker-version=10"
+// CHECK-NOT: "-Xclang"
+// CHECK-NOT: "foo-bar"
+// CHECK-NOT: "-Wall"
+// CHECK-NOT: "-Wdocumentation"
+// CHECK: -march
+// CHECK-NOT: "-mlinker-version=10"
+// CHECK-NOT: "-Xclang"
+// CHECK-NOT: "foo-bar"
+// CHECK-NOT: "-Wall"
+// CHECK-NOT: "-Wdocumentation"
+// CHECK: "-o" "a.out"