Filter option names to escape symbols not allowed as C++ identifiers.

Makes it possible to use options with names like "Wa,".
Also fixes the -Wall option handling as a side-effect.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50973 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/LLVMCConfigurationEmitter.cpp b/utils/TableGen/LLVMCConfigurationEmitter.cpp
index 1947aa5..8e4d870 100644
--- a/utils/TableGen/LLVMCConfigurationEmitter.cpp
+++ b/utils/TableGen/LLVMCConfigurationEmitter.cpp
@@ -135,19 +135,36 @@
     }
   }
 
+  // Escape commas and other symbols not allowed in the C++ variable
+  // names. Makes it possible to use options with names like "Wa,"
+  // (useful for prefix options).
+  std::string EscapeVariableName(const std::string& Var) const {
+    std::string ret;
+    for (unsigned i = 0; i != Var.size(); ++i) {
+      if (Var[i] == ',') {
+        ret += "_comma_";
+      }
+      else {
+        ret.push_back(Var[i]);
+      }
+    }
+    return ret;
+  }
+
   std::string GenVariableName() const {
+    const std::string& EscapedName = EscapeVariableName(Name);
     switch (Type) {
     case OptionType::Switch:
-     return "AutoGeneratedSwitch" + Name;
+     return "AutoGeneratedSwitch" + EscapedName;
    case OptionType::Prefix:
-     return "AutoGeneratedPrefix" + Name;
+     return "AutoGeneratedPrefix" + EscapedName;
    case OptionType::PrefixList:
-     return "AutoGeneratedPrefixList" + Name;
+     return "AutoGeneratedPrefixList" + EscapedName;
    case OptionType::Parameter:
-     return "AutoGeneratedParameter" + Name;
+     return "AutoGeneratedParameter" + EscapedName;
    case OptionType::ParameterList:
    default:
-     return "AutoGeneratedParameterList" + Name;
+     return "AutoGeneratedParameterList" + EscapedName;
    }
   }