diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td
index 9c9893e..4f0d551 100644
--- a/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/include/clang/Basic/DiagnosticDriverKinds.td
@@ -109,6 +109,7 @@ def err_drv_unknown_objc_runtime : Error<
   "unknown or ill-formed Objective-C runtime '%0'">;
 def err_drv_emit_llvm_link : Error<
    "-emit-llvm cannot be used when linking">;
+def err_unknown_f_option : Error<"unknown flag: '%0'">;
 
 def warn_O4_is_O3 : Warning<"-O4 is equivalent to -O3">, InGroup<Deprecated>;
 def warn_c_kext : Warning<
diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td
index dddcf44..50078d6 100644
--- a/include/clang/Driver/Options.td
+++ b/include/clang/Driver/Options.td
@@ -823,6 +823,7 @@ def fdata_sections : Flag <["-"], "fdata-sections">, Group<f_Group>, Flags<[CC1O
   HelpText<"Place each data in its own section (ELF Only)">;
 def fdebug_types_section: Flag <["-"], "fdebug-types-section">, Group<f_Group>,
   Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">;
+def f : Joined<["-"], "f">, Group<f_Group>;
 def g_Flag : Flag<["-"], "g">, Group<g_Group>,
   HelpText<"Generate source level debug information">, Flags<[CC1Option]>;
 def gline_tables_only : Flag<["-"], "gline-tables-only">, Group<g_Group>,
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index 0125e89..1bf3ebb 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -108,6 +108,19 @@ void Driver::ParseDriverMode(ArrayRef<const char *> Args) {
   }
 }
 
+static void parseFFlagOptions(ArgList &Args, DiagnosticsEngine &Diags) {
+  for (arg_iterator I = Args.filtered_begin(options::OPT_f),
+         E = Args.filtered_end(); I != E; ++I) {
+    // For now all -f options are handled manually, so any occurrence of
+    // OPT_f means an unknown option.
+    Arg *A = *I;
+    StringRef Name = A->getValue();
+    if (Name.startswith("no-"))
+      Name = Name.substr(3);
+    Diags.Report(diag::err_unknown_f_option) << Name;
+  }
+}
+
 InputArgList *Driver::ParseArgStrings(ArrayRef<const char *> ArgList) {
   llvm::PrettyStackTraceString CrashInfo("Command line argument parsing");
 
@@ -144,6 +157,8 @@ InputArgList *Driver::ParseArgStrings(ArrayRef<const char *> ArgList) {
     }
   }
 
+  parseFFlagOptions(*Args, Diags);
+
   for (arg_iterator it = Args->filtered_begin(options::OPT_UNKNOWN),
          ie = Args->filtered_end(); it != ie; ++it) {
     Diags.Report(diag::err_drv_unknown_argument) << (*it) ->getAsString(*Args);
diff --git a/test/Driver/no-objc-default-synthesize-properties.m b/test/Driver/no-objc-default-synthesize-properties.m
index a034926..0da87af 100644
--- a/test/Driver/no-objc-default-synthesize-properties.m
+++ b/test/Driver/no-objc-default-synthesize-properties.m
@@ -1,4 +1,5 @@
-// RUN: not %clang  -fsyntax-only -fno-objc-default-synthesize-properties -fobjc-default-synthesize-properties %s 2>&1 | FileCheck %s
+// RUN: not %clang  -fsyntax-only -fno-objc-default-synthesize-properties %s 2>&1 | FileCheck %s
+// RUN: not %clang  -fsyntax-only -fobjc-default-synthesize-properties %s 2>&1 | FileCheck %s
 
 @interface I
 @property int P;
@@ -6,5 +7,4 @@
 
 @implementation I
 @end
-// CHECK: error: unknown argument: '-fno-objc-default-synthesize-properties'
-// CHECK: error: unknown argument: '-fobjc-default-synthesize-properties'
+// CHECK: error: unknown flag: 'objc-default-synthesize-properties'
diff --git a/test/Driver/unknown-arg.c b/test/Driver/unknown-arg.c
index f834a0e..05a1b41 100644
--- a/test/Driver/unknown-arg.c
+++ b/test/Driver/unknown-arg.c
@@ -1,4 +1,4 @@
-// RUN: not %clang %s -cake-is-lie -%0 -%d -HHHH -munknown-to-clang-option -print-stats -funknown-to-clang-option 2>&1 | \
+// RUN: not %clang %s -cake-is-lie -%0 -%d -HHHH -munknown-to-clang-option -print-stats 2>&1 | \
 // RUN: FileCheck %s
 
 // CHECK: unknown argument: '-cake-is-lie'
@@ -7,7 +7,10 @@
 // CHECK: unknown argument: '-HHHH'
 // CHECK: unknown argument: '-munknown-to-clang-option'
 // CHECK: unknown argument: '-print-stats'
-// CHECK: unknown argument: '-funknown-to-clang-option'
+
+
+// RUN: not %clang %s -funknown-to-clang-option 2>&1 | FileCheck --check-prefix=CHECK-F %s
+// CHECK-F: unknown flag: 'unknown-to-clang-option'
 
 
 // RUN: %clang -S %s -o %t.s  -Wunknown-to-clang-option 2>&1 | FileCheck --check-prefix=IGNORED %s
