ccc: Pass -f[no-]math-errno to clang.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64709 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/ccc/ccclib/Arguments.py b/tools/ccc/ccclib/Arguments.py
index 5d20fea..6cda01b 100644
--- a/tools/ccc/ccclib/Arguments.py
+++ b/tools/ccc/ccclib/Arguments.py
@@ -364,9 +364,30 @@
                 arg.opt.matches(optionC)):
                 yield arg
 
-    def getLastArg(self, option):
-        return self.lastArgs.get(option)
+    def getLastArgAndPosition(self, option):
+        return self.lastArgs.get(option, (None,-1))
 
+    def getLastArg(self, option):
+        return self.getLastArgAndPosition(option)[0]
+
+    def hasFFlag(self, option, negativeOption, default):
+        """hasFFlag - Given an option and its corresponding negative
+        option, return True if the option is present, False if the
+        negation is present, and default if neither option is
+        given. If both the option and its negation are present, the
+        last one wins.
+        """
+        arg,argPos = self.getLastArgAndPosition(option)
+        neg,negPos = self.getLastArgAndPosition(negativeOption)
+        if arg and neg:
+            return negPos < argPos
+        elif arg:
+            return True
+        elif neg:
+            return False
+        else:
+            return default
+            
     def getInputString(self, index, offset=0):
         # Source 0 is argv.
         if index.sourceId == 0:
@@ -457,9 +478,9 @@
         opt = arg.opt
         if opt.alias:
             opt = opt.alias
-        self.lastArgs[opt] = arg
+        self.lastArgs[opt] = (arg, len(self.args) - 1)
         if opt.group is not None:
-            self.lastArgs[opt.group] = arg
+            self.lastArgs[opt.group] = (arg, len(self.args) - 1)
 
     # Forwarding methods.
     #
@@ -793,6 +814,8 @@
         self.f_indirectVirtualCallsOption = self.addOption(FlagOption('-findirect-virtual-calls', self.fGroup))
         self.f_laxVectorConversionsOption = self.addOption(FlagOption('-flax-vector-conversions', self.Clang_fGroup))
         self.f_limitedPrecisionOption = self.addOption(JoinedOption('-flimited-precision=', self.fGroup))
+        self.f_mathErrnoOption = self.addOption(FlagOption('-fmath-errno', self.fGroup))
+        self.f_noMathErrnoOption = self.addOption(FlagOption('-fno-math-errno', self.fGroup))
         self.f_msExtensionsOption = self.addOption(FlagOption('-fms-extensions', self.Clang_fGroup))
         self.f_mudflapOption = self.addOption(FlagOption('-fmudflap', self.fGroup))
         self.f_mudflapthOption = self.addOption(FlagOption('-fmudflapth', self.fGroup))